【问题标题】:C++ Beginner Assignment OperatorsC++ 初学者赋值运算符
【发布时间】:2016-08-31 15:40:41
【问题描述】:

我是 C++ 的初学者,我正在做这个赋值运算符的示例代码。我不知道我在这里做错了什么。

#include <iostream>

using namespace std;
int main()
{
    int x = 200; int y = 100;
    x += y; cout << x << endl; //x += y; // x = x + y, x = 200 + 100, output 300.
    x -= y; cout << x << endl; //x -= y; // x = x - y, x = 200 - 100, output 100.
    x /= y; cout << x << endl; //x /= y; // x = x / y, x = 200 / 100, output 2.
    x %= y; cout << x << endl; //x % y; // x = % y, x = 200 % 100, output 0.
    return 0;
}

我正在得到结果

x -= y = 200
x /= y = 2
x %= y = 2

当它假设是

x -= y = 100
x /= y = 2
x %= y = 0

它实际上将以前的结果相加。如何阻止代码将结果添加到下一行?谢谢!

【问题讨论】:

  • 您假设 x 在每次命令后重置回 200,但事实并非如此。
  • 停止要求它累积结果。 -=+=/=%=都是累加运算符,将=之前的运算结果赋给左边的变量。
  • 您的第一个分配是x += y,因此下一个x -= y 的结果是x == 200。没有“累加”结果,您只需继续分配给x,如果这不是您想要的,那么就不要这样做......
  • 只需将 xstart 定义为 200 并在每次操作之前将 x 重置为 xstart

标签: c++ operators variable-assignment


【解决方案1】:

正如您在代码中的 cmets 中提到的,x += y 的结果等同于x = x + y,这意味着x 的值将发生变化。所以在接下来的数学赋值中使用x 的新值 300 也就不足为奇了。

如果您想避免这种情况,请考虑将x + y 的结果保存到另一个变量中。

int x = 200;
int y = 100;
int x_addition = x + y;
std::cout << x_addition << std::endl;

或者,如果它的唯一用途是显示加法的结果,则在一行中完成所有操作。

int x = 200;
int y = 100;
std::cout << x + y << std::endl;

【讨论】:

    【解决方案2】:

    xy 是变量并且U 是操作时x U= y 等效于:

    x = x U y;
    

    这意味着原始变量正在被修改并分配结果。

    你的代码相当于:

    x = x + y;
    cout << x << endl; // x is now 300
    x = x - y;
    cout << x << endl; // x is now 200
    x = x / y;
    cout << x << endl; // x is now 2
    x = x % y;
    cout << x << endl; // x is now 2
    

    如果您不想更改x,您可以将x 保存在临时变量中或只打印结果:

    int x = 200;
    int y = 100;
    cout << x - y << endl; // x unchanged
    cout << x + y << endl; // x unchanged
    cout << x / y << endl; // x unchanged
    cout << x * y << endl; // x unchanged
    

    或者:

    int x = 200;
    int x = 100;
    int result = x + y;
    cout << result << endl;
    result = x - y;
    cout << x << endl;
    result = x / y;
    cout << result << endl;
    result = x % y;
    cout << result << endl;
    

    注意:由于=操作符返回赋值后的值cout &lt;&lt; x += y &lt;&lt; end可以编译打印赋值后的值。

    【讨论】:

      【解决方案3】:

      每次你做像x += y;这样的赋值时,它都会改变x的值。

      x += y;
      

      等价于

      x = x + y;
      

      这意味着分配。 x 的值在变化。现在是 300。后面的作业也会发生同样的事情。

      注意:如果你不想改变x和y的值,最好在其他变量中赋值。

      int x = 200, y = 100, t;
      t = x + y; cout << t << endl;
      t = x - y; cout << t << endl;
      t = x * y; cout << t << endl;
      t = (int) x / y; cout << t << endl;
      

      【讨论】:

        【解决方案4】:

        您期望xy 的原始值永远保留,但事实并非如此。像x += y;x = x + y; 这样的赋值会改变变量的值(在本例中是x,即等号左边的那个)。先前的值被覆盖,因此丢失。

        如果您不想更改原始值,则必须将结果分配给其他变量(例如,一个名为 temp 的变量,您可以每次都覆盖它),或者您不分配它完全没有,您只需将计算结果发送至cout

        以临时变量为例:

        int x = 200; int y = 100; int temp;
        temp = x + y; cout << temp << endl; //temp = x + y, temp = 200 + 100, output 300.
        temp = x - y; cout << temp << endl; //temp = x - y, temp = 200 - 100, output 100.
        

        或者,完全取消变量:

        cout << x + y << endl; // 200 + 100, output 300
        cout << x - y << endl; // 200 - 100, output 100
        

        查看变量被覆盖的另一种方法(好吧,在这种情况下只是x)是将它们声明为const

        const int x = 200; const int y = 100;
        

        程序无法编译,因为它试图更改常量变量。

        【讨论】:

          【解决方案5】:

          尝试在每次分配后将 x 重置为 200。像这样:

          #include <iostream>
          
          using namespace std;
          int main()
          {
              int x = 200; int y = 100;
              x += y; cout << x << endl; 
              x = 200;
              x /= y; cout << x << endl; 
              x = 200;
              x %= y; cout << x << endl; 
              return 0;
          }
          

          【讨论】:

            【解决方案6】:

            您正在使用累积运算符,因此您正在更改“x”的值。

            x += y; // x = 200 + 100 = 300
            x -= y; // x = 300 - 100 = 200
            x /= y; // x = 200 / 100 = 2
            x %= y; // x = 2 % 100 = 2
            

            你可以这样做:

                int x = 200;
                int y = 100;
                cout << x + y << endl;
                cout << x - y << endl;
                cout << x / y << endl;
                cout << x % y << endl;
            

            或者:

                int x = 200;
                int y = 100;
                int result;
            
                result = x + y;
                cout << result << endl;
            
                result = x - y;
                cout << result << endl;
            
                result = x / y;
                cout << result << endl;
            
                result = x % y;
                cout << result << endl;
            

            【讨论】:

              【解决方案7】:

              你不指望加法运算的价值

              x=200,y=100;    
              x+=y;//x=200+100=300,x=300,y=100   
              x-=y;//x=300-100=200,x=200,y=100    
              

              在这里你忘记了在减法之前有加法操作

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2011-07-29
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2014-11-20
                • 2021-08-10
                • 2011-07-17
                • 2016-04-01
                相关资源
                最近更新 更多