#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
我无法弄清楚为什么会这样。
答案 0 :(得分:2)
当你致电scanf()
时,你必须检查该功能的返回值,看它是否成功。在我的系统上,记录了返回分配的输入项的数量。
答案 1 :(得分:1)
这个奇怪的值,是内存垃圾。在C中,所有未初始化的变量(static
和extern
除外)都指向内存垃圾。
当您使用此变量的值时,任何事情都可能发生,您有UB
。您必须初始化此变量的值并检查scanf()
的返回值。
正如@Michael Dorst在评论中提到的那样,将x
和x
设置为某些非常用值(例如-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
这意味着您需要在两个输入之间使用逗号分隔符
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。