以下是一段程序:
#include <stdio.h>
int main()
{
int i=1,flag=1;
char c;
while(flag)
{
printf("%d\n",i);
printf("continue?[Y/N]");
scanf("%c",&c);
if(c=='n' || c='N')
flag=0;
i++;
}
return 0;
}
当输入Y(事实上其他非N或n字符也可以)时。输出i的下一个i的值
但运行后的结果却是这样的:
问题出在scanf("%c",c)语句上,这里我们应该改成scanf(" %c",c) ,再%c前加上一个空格
若不加空格则在输入时将按照以下情况给c 赋值:
输入Y, c='Y',flag=0,,i=2,继续循环,输出提示,c='回车符',flag=0,i=3,继续循环,输出提示,等待给c赋值
错误在于回车符也被赋值给c
加上空格后 回车符不在赋值给c 也就避免了这种情况
再举个例子:
#include <stdio.h>
int main()
{
char a,c;
scanf("%c",&a);
scanf("%c",&c);
printf("\n");
printf("%c\n",a);
printf("%c\n",c);
return 0;
}
要输入两个字符并且输出,如果第二个%c前不加空格则不会得到正确的结果。