不期望的节目结果(添加字母)

时间:2015-12-23 12:37:36

标签: c

在我最近开始学习C的过程中,我所做的第一件事就是一个非常基本的“2数字程序之和”。

/* Basic addition prog */

#include <stdio.h>

int main(void) {

  int v_1;    /* first var */
  int v_2;    /* second var*/
  int answer; /* Sum of 2 vars*/

  printf("Simple addition calculator \n");
  printf("enter first number:  ");
  scanf("%d", &v_1);
  printf("enter second number:  ");
  scanf("%d", &v_2);

  answer = v_1 + v_2;

  printf("%d\n", answer);
}

当我运行这个并输入2个数字时,一切运行正常,我会得到正确的答案。 输出结果如下:

  

输入第一个数字:1

     

输入第二个数字:1

     

= 2

我决定尝试通过使用字母而不是数字来打破它,因为我首先要输入2个字母,然后将它们转换为数字值,否则会出错并崩溃。

然而,这不是发生的事情而是我得到以下内容:

  

输入第一个数字:a

     

输入第二个数字:= 32765

我的问题不是“如何解决这个问题”,因为它“实际上发生了什么?”

修改 同样,这个问题更多的是试图了解正在发生的事情,而不是试图解决问题。我不是在寻找“如何避免这种情况?”我正在寻找“导致它的原因和原因?”

铊;博士 我真的可以简化我想知道的2个问题。

为什么我输入的字母表中每个字母的唯一垃圾数据? 即每次进入a时32767,而每次进入b时都是32767

为什么跳过第二个变量输入?

1 个答案:

答案 0 :(得分:3)

检查scanf("%d", &v_1);的结果。如果不是1,则v_1不会更新。

  

为什么跳过第二个变量输入?

scanf("%d", &v_1);输入非数字输入既不会消耗该输入也不会更改v_1

这也是scanf("%d", &v_2);没有等待输入的原因,它试图使用相同的输入并且也失败了。

  

为什么我输入的字母表中每个字母的唯一垃圾数据?即每次进入a时32767,而每次进入b时都是32767

代码只是获取v_1, v_2的未初始化值。在v_1之前,优化编译器甚至可能不会“创建”scanf("%d", &v_1);,因此未初始化的v_1可能依赖于输入的文本。由于这是未定义的行为,结果可能明天或另一台机器上有所不同。

使用初始化值尝试相同的操作。

int v_1 = 0; /* first var */
int v_2 = 0;