#include <stdio.h>
main()
{
int num;
char another="y";
for(;another=="y";)
{
printf("no. is ");
scanf("%d", &num);
printf("sq. of %d is %d", num,num*num);
printf("\nWant to enter another no. : y/n");
scanf("%c", &another);
}
}
我有这样的C代码。根据我的说法,这应该是这样的:输入no并给出正方形。但它也无法在无限循环中运行。但它只运行一次。为什么呢?
我在Windows 64位上使用GCC4.8.1编译器。
答案 0 :(得分:2)
因为在第二次迭代时scanf
将\n
分配给another
而不是分配y
。
说明:键入输入后按 Enter 键,然后还有一个字符与输入的输入一起进入缓冲区。此字符由 Enter 生成,并且为\n
。假设您键入y
然后按 Enter 键,则缓冲区将包含y\n
,即两个字符y
和\n
。<登记/>
执行scanf("%d", &num);
时,它会读取输入的数字,并在缓冲区中留下\n
字符,以便下次调用scanf
。无论您在控制台中输入了什么,下一个\n
来电scanf
都会读取此scanf("%c", &another);
。
要占用这一新行char
,请在%c
中的scanf
说明符之前使用空格。
scanf(" %c", &another);
^Notice the space before %c.
并改变
for(;another=="y";) {...} // Remove the double quote.
到
for(;another=='y';) {...} // Single quote is used for `char`s.
答案 1 :(得分:0)
循环中的测试是错误的:
another=="y"
将another
(单个字符)的值与字符串文字的值进行比较,该值将被重新指定为指向字符y
的指针。它应该是:
another == 'y'
你应该为此获得编译器警告,因为将小整数与指针进行比较是非常奇怪的。