奇怪的C++行为.价值被覆盖

Adw*_*mar 0 c++ scanf undefined-behavior

#include <iostream>
#include <stdio.h>
using namespace std;
int main(){
int t;
scanf("%d",&t);
while(t--){
    long long int val;
    char op;
    scanf("%lld",&val);
    while(true){
        long long int x;
        scanf("%s",&op);
        if(op=='=')break;
        scanf("%lld",&x);
        cout<<"***"<<t<<endl;
        if(op=='+')val+=x;
        else if(op=='-')val-=x;
        else if(op=='*')val*=x;
        else val/=x;
    }
    printf("%lld",val);
 }
Run Code Online (Sandbox Code Playgroud)

}

在上面的代码中,我无法理解为什么在x输入后t的值被设置为0.您甚至可以打印并检查t是否设置为零.我甚至在ideone上检查了它.http://ideone.com/JeCbSv有 什么帮助吗?

And*_*dyG 7

scanf的阅读op内容无效.op是单一的char,所以你应该阅读

scanf("%c",&op);
Run Code Online (Sandbox Code Playgroud)

scanf("%s",&op);
Run Code Online (Sandbox Code Playgroud)

  • 这就是为什么使用`std :: cin> op`更安全的原因.毕竟,已经包含了`<iostream>`. (2认同)
  • @AdwaitKumar:它基本上是未定义的行为,所以理论上*任何*都可能发生.解释不能来自C(或C++).生成的机器代码*可能*有解释; 如果没有,那你就不走运了:你必须为此研究硬件/管道/等. (2认同)