程序执行不正确

时间:2014-05-31 12:50:59

标签: c++

我用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

我该如何解决这个问题?

4 个答案:

答案 0 :(得分:5)

放置声明

int c = a + b;

之后的陈述

std::cin >> a;
std::cin >> b;

首先,您必须输入变量a和b的值,并且仅在将总和存储在变量c。

之后

答案 1 :(得分:5)

声明

int c = a + b;

不是关于值之间关系的断言。

这只是一个要完成的计算,从(推测的)已知值ca计算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;。由于ab未初始化,因此此操作会将先前存储的值保存在内存中a abd b。这会调用未定义的行为 阅读int c = a + b;a后,您需要对b行进行标记。

std::cin >> a;
std::cin >> b;
int c = a + b;