1:问题
遇到的问题是在读取多行输入时,出现读取的结果和预期不匹配的问题。
2:原因
2.1:回车符被写入了标准输入stdio(输入缓冲区)
2.2:scanf会读取回车符
3:过程
键盘敲入字符,当敲下回车键之后,c程序会先将缓冲区清空,然后将这些字符和回车符('\n')写入缓冲区中, 再然后scanf()和getchar函数会从缓冲区中读取字符(%d%c)。
4:实例4-1
int N,a,b,c;
scanf("%d", &N);
while(N--) {
scanf("%d%d%d", &a,&b,&c);
printf("%d%d%d\n", a,b,c);
}
input sample
3
123
456
789
没有问题,因为这里只是读取数字,不读取回车符(char),所以你输入的回车符会在缓冲区里待着,直到你下一次按下回车键,c程序将缓冲区清空。
5:实例4-2,证明清空缓冲区,及读取回车符
#include <stdio.h>
void main() {
int a,b;
char c,d,e;
scanf("%d", &a);
printf("#########\n");
scanf("%d", &b);
printf("#########\n");
scanf("%c", &c);
printf("#########\n");
scanf("%c", &d);
printf("#########\n");
scanf("%c", &e);
printf("#########\n");
printf("---output---\n");
printf("%d\n", a);
printf("--------\n");
printf("%d\n", b);
printf("--------\n");
printf("%c\n", c);
printf("--------\n");
printf("%c\n", d);
printf("--------\n");
printf("%c\n", e);
printf("--------\n");
}
1
#########
2
#########
#########
3
#########
#########
---output---
1
--------
2
--------
--------
3
--------
--------
6:getchar()
getchar是读入函数的一种。它从标准输入里读取下一个字符,相当于getc(stdin)。
可以用getchar()来读取回车符’\n’来控制多行输入的问题