为什么我不能使用两个scanf函数输入字符
例如
char a;
char b;
printf("a");
scanf("%c", &a);
printf("%c", a);
scanf("%c", &b);
printf("%c", b);
有很多解决方案,但我想知道2 scanf函数在字符中不起作用的原因
答案 0 :(得分:2)
当您输入单个字符时,您实际上会向程序发送两个字符:您按下的字符和按Enter键时的换行符。
假设你按下" s"然后输入。第一个scanf
只读取" s",将换行符保留在输入缓冲区中。第二个scanf
将立即读取换行符,然后由第二个printf
打印。
如果您输入了两个或多个字符并按Enter键,例如" abc"然后回车,第一个scanf
将读取" a"第二个scanf
将立即读取" b"。 " c"当程序退出时,换行符将保留在缓冲区中。
答案 1 :(得分:0)
scanf的程序代码就是那样
scanf()
int readCount = 0;
copy data to buffer until newline
clear the keyboard buffer until newline
match the pattern and write to the vargs
for every pattern matched, readCount ++
return readCount;
由于每个scanf都会尝试解析并清除键盘缓冲区,直到换行。所以你不能在同一行输入2个字符。
你可以轻松解决这个问题。
1) scanf( "%c%c", &a, &b )
这不是通用的
2) std::cin >> a >> b;
这是通用的,但根据我的经验,这种方法比scanf慢一点。