为scanf提供单个值,需要两个行为异常

时间:2012-07-09 20:32:25

标签: c scanf

#include<stdio.h>
int main()
{
  int x,y; 
  printf("please input 2 numbers:\n");
  scanf("%d,%d",&x,&y);
  printf("Now the value for x is %d, and value for y is %d",x,y);
  return 1;
}

我输入两个数字然后按,分隔它们然后按预期工作。

但如果我给出一个2345号码,那么就会出现一个奇怪的结果:

现在x的值是3456,y的值是32767

我无法弄清楚为什么会这样。

3 个答案:

答案 0 :(得分:2)

当你致电scanf()时,你必须检查该功能的返回值,看它是否成功。在我的系统上,记录了返回分配的输入项的数量。

答案 1 :(得分:1)

这个奇怪的值,是内存垃圾。在C中,所有未初始化的变量(staticextern除外)都指向内存垃圾。 当您使用此变量的值时,任何事情都可能发生,您有UB。您必须初始化此变量的值并检查scanf()的返回值。

正如@Michael Dorst在评论中提到的那样,将xx设置为某些非常用值(例如-1)并在scanf()调用之后,检查它们的值是否已更改太

答案 2 :(得分:0)

这是因为你的scanf语句。 通常,scanf语句具有以下格式:

scanf("%d %d",&x,&y); //without the commas inside the ""'s


但你已经制作了这种格式:

scanf("%d,%d",&x,&y); //with the commas inside the ""'s


这意味着您需要在两个输入之间使用逗号分隔符


查看以下试验

TRIAL1 :(注意:输入为2345)

Please input 2 numbers:
2345
Now the value for x is 2345, and value for y is 134513867.



TRIAL2 :(注意:输入是23,45)

Please input 2 numbers:
23,45
Now the value for x is 23, and the value for y is 45.



TRIAL3 :(注意:输入为23 + 45)

Please input 2 numbers:
23+45
Now the value for x is 23, and the value for y is 134513867.



因此,根据试验, scanf(“%d,%d”,&amp; x,&amp; y); 要求输入具有逗号分隔符。第一次和第三次试验的输出结果是,y变量确实包含了垃圾,因为这些y值保持不变/未初始化。但似乎x变量得到了正确的值,因为你的scanf上的第一个%d。