c语言为啥scanf()后要加个getchar()?(也可以在前面加个fflush(stdin)函数清除缓冲区)(getchar代替scanf用法【可捕获空格】)

问:

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);  
}

参考文章:C语言scanf函数以及缓存详解

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dontla

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值