被吞掉的scanf与神奇的printf

当使用scanf读取char值时,可能会遇到输入被吞掉的问题,这实际上是由于输入缓冲区导致的。scanf读取完指定值后,会将剩余的输入放回缓冲区。例如,输入'a[Enter]','a'被读取,'[Enter]'(即' ')被留在缓冲区。为避免这种情况,可以考虑不同读取方式。另一方面,通过巧妙运用printf,可以在不直接传递变量值到格式化字符串的情况下,实现复杂输出需求。例如,打印姓名及其长度对齐的程序,可以通过动态构造printf格式来实现。
摘要由CSDN通过智能技术生成

被吞掉的scanf

在编程时使用scanf函数读取char值的时候很容易陷入十分“诡异”的情况

偶尔你会发现scanf函数根本没有起作用,好像在运行时这段代码莫名其妙被吞掉了!

测试代码:

#include <stdio.h>

int main(int argc, char *argv[]) {
	char a, b;
	scanf("%c", &a);
	scanf("%c", &b);

	printf("%c\n", a);
	printf("%c\n", b);

	return 0;
}

运行情况:

jimmy@MyPet:~/code/learnc$ gcc -o test test.c 
jimmy@MyPet:~/code/learnc$ ./test 
a
a


jimmy@MyPet:~/code/learnc$ 

看起来我输入了字符'a'回车后一切就结束了,没有让我输入b。

其实这一切都是输入缓冲区在捣鬼。

scanf函数从命令行读取到指定的值后,会将剩余的内容放回输入缓冲区。

在本例中:命令行输入“a[Enter]”-->读取字符'a'放入变量a,[Enter]放回缓冲区-->读取字符[Enter](也就是'\n')放入变量b-->输出a存的字符'a'-->输出b存的字符'\n',OVER。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值