我用C ++编写了一个小程序,它应该从用户那里得到2个整数,然后打印出这两个整数的总和;
#include <iostream>
int main(){
int a;
int b;
int c = a + b;
std::cin >> a;
std::cin >> b;
std::cout << c;
return 0;
}
但每次我运行程序时,我都能输入两个整数,但结果答案总是65538
:
> 1
> 1
65538
我该如何解决这个问题?
答案 0 :(得分:5)
放置声明
int c = a + b;
之后的陈述
std::cin >> a;
std::cin >> b;
首先,您必须输入变量a和b的值,并且仅在将总和存储在变量c。
之后答案 1 :(得分:5)
声明
int c = a + b;
不是关于值之间关系的断言。
这只是一个要完成的计算,从(推测的)已知值c
和a
计算b
。
因此,将放在输入语句之后。
要获得有关使用 indeterminate 值(未初始化)的变量的警告,使用Visual C ++使用选项/W4
,使用g ++使用选项-Wall
以及优化选项等只是-O
。
g ++行为的示例:
[H:\dev\test\0107] > g++ foo.cpp [H:\dev\test\0107] > g++ -Wall foo.cpp [H:\dev\test\0107] > g++ -Wall -O foo.cpp foo.cpp: In function 'int main()': foo.cpp:7:15: warning: 'a' is used uninitialized in this function [-Wuninitialized] int c = a + b; ^ foo.cpp:7:15: warning: 'b' is used uninitialized in this function [-Wuninitialized] [H:\dev\test\0107] > _
答案 2 :(得分:1)
将其更改为...
#include <iostream>
int main(){
int a;
int b;
int c;
std::cin >> a;
std::cin >> b;
c = a + b; //let c be the sum of a and b
std::cout << c; //print c
return 0;
}
c
显示为65538,因为c
未初始化。随机垃圾值已分配给c
。
最重要的是,在打印之前,您没有将a + b
的值分配给c
,这就是为什么您获得了c
的垃圾值。
换句话说,如果将变量初始化为(比如说0):
int a = 0;
int b = 0;
int c = 0;
您将获得0
而非65538
,因为在您为其指定任何新值之前,这是c
的原始值。
我希望我能够简单地让你理解出了什么问题。
答案 3 :(得分:0)
您获得垃圾值65538
的原因是您在从用户读取值之前正在执行操作c = a + b;
。由于a
和b
未初始化,因此此操作会将先前存储的值保存在内存中a
abd b
。这会调用未定义的行为
阅读int c = a + b;
和a
后,您需要对b
行进行标记。
std::cin >> a;
std::cin >> b;
int c = a + b;