0
#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

我不知道为什么会这样。

4

3 回答 3

2

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

于 2012-07-09T20:35:07.533 回答
1

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

正如@Michael Dorst 在评论中提到的那样,设置xx设置一些非通用值(例如,-1),并在scanf()调用后检查它们的值是否也发生了变化。

于 2012-07-09T20:54:02.590 回答
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",&x,&y); 要求输入有逗号分隔符。第一次和第三次试验的输出发生了什么,y 变量确实包含垃圾,因为这些 y 值保持不变/未初始化。但似乎 x 变量得到了正确的值,因为你的 scanf 上的第一个 %d 。

于 2012-07-10T06:21:08.737 回答