我是一个C语的新手,有问题请教

来源:百度知道 编辑:UC知道 时间:2024/06/05 11:16:40
#include <stdio.h>
int main(void)
{
char cA;
printf("请输入任意大、小写字母:");
scanf("%c",&cA);
while((cA >= 65 && cA <= 91)||(cA >= 97 && cA <= 123))
{
if(cA >= 65 && cA <= 91)
{
cA = cA + 32;
}
printf("%c",cA);
printf("\n");
printf("请输入任意大、小写字母:");
scanf("%c",&cA);
}
return 0;
}
这个循环里面的输入为什么不起作用呀?

scanf在读取字符的时候不再忽略掉空白字符(空格' ',换行'\n'和制表符'\t'),并且C语言里面的输入输出函数都要通过输入(stdin)输出流(stdout)的缓冲,你从键盘输入的串会首先被缓冲在输入流中,C里面很多输入函数都是以你键入回车来标志一次输入流缓冲的结束的,scanf也是如此,但是scanf从标准输入流里面读取字符,在你这个程序里面,读到了一个字符后,它就成功完成了一次任务了,而由于你敲回车而生成的那个换行符则仍然残存在标准输入流里面,由于scanf从标准输入流里面读取字符,又不再忽略掉空白字符,下一次循环的时候,它就把这个残存在标准输入流里面得换行符读了出来,不等你再输入了。通常有经验的程序员都是通过调用库函数fflush(stdin);来处理这种情况。fflush(stdin);帮你清楚残留在标准输入流里面的垃圾字符。修改的程序如下:

#include <stdio.h>
#include <stdlib.h> /* for fflush() */

int main(void)
{
char cA;
printf("请输入任意大、小写字母:");
scanf("%c",&cA);
while((cA >= 65 && cA <= 91)||(cA >= 97 && cA <= 123))
{
fflush(stdin);
if(cA >= 65 && cA <= 91)
{
cA = cA + 32;
}
printf("%c",cA);
printf("\n");
printf("请输入任意大、小写字母:");
scanf("%c",&cA);
}
return 0;
}

在循环里面的scanf("%