我不能使用两个scanf函数来输入字母

时间:2015-10-04 00:12:57

标签: c++ c

为什么我不能使用两个scanf函数输入字符

例如

char a;
char b;
printf("a");
scanf("%c", &a);
printf("%c", a);
scanf("%c", &b);

printf("%c", b);

有很多解决方案,但我想知道2 scanf函数在字符中不起作用的原因

2 个答案:

答案 0 :(得分:2)

当您输入单个字符时,您实际上会向程序发送两个字符:您按下的字符和按Enter键时的换行符。

假设你按下&​​#34; 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慢一点。