问:
C语言 这个程序为什么要加getchar() 前面有scanf了啊
#include <stdio.h>
main()
{
char a;
int i,b;
scanf("%c",&a);
getchar();
for (i=0;i<26;i++){
b=a+i;
if((a>=‘a’&&a<=‘z’&&b>‘z’)||(a>=‘A’&&a<=‘Z’&&b>‘Z’))
b=b-26;
printf("%c", b);
}
printf("\n");
}
答1:
加getchar(); 的目的是吸收掉前面执行scanf("%c",&a); 时遗留在输入缓冲区里的’\n’,以免后面还有某些输入语句时由遗留在输入缓冲区里的’\n’引起错误。在这段代码中,后面已经没有输入语句了,所以有没有getchar();都可以。
答2:
scanf函数读完一个字符后,缓冲区里还留下一个你输入的回车,所以要用getchar读出来并丢弃。在此程序中确实没有必要这么做,但是你可以试试连续用多个scanf读取字符,就会知道什么时候该这样做了。
20210708 也可以在前面加个fflush(stdin)函数清除缓冲区
#include <stdio.h>
void main()
{
char a ,b ; printf("请输入a和b的值:");
scanf("%c%c",&a,&b);
fflush(stdin); //清楚输入缓冲区;
printf("a=%c,b=%c\n",a,b);
printf("请输入a和b的值:");
scanf("%c%c",&a,&b);
printf("a=%c,b=%c\n",a,b);
}
20210714 当然,getchar也能替代scanf获取用户键入的字符数组
#include <stdio.h>
int main() {
char text[50];
printf("请输入算式:\n");
//scanf_s("%s", text, sizeof(text));//sanf没法输入空格?
int i = 0;
while ((text[i] = getchar()) != '\n') {
//putchar(text[i]);
i++;
}
text[i] = '\0';
printf("text:%s\n", text);
return 0;
}
运行结果:
请输入算式:
sdf3 dsfd fdsf44 gg
text:sdf3 dsfd fdsf44 gg