scanf与回车的冲突
★ 原因是输入完第二行数据后回车被当作一个字符读入了内存输入缓冲区,所以c1读入了回车符
★ 解决方法:
<方法一> 在读字符函数中首位置加入一个空格
所加入的空格使第二行尾输入的回车符与该空格符对应,第三行输入的第一个字符就被c1读入了
<方法二> 在第三个函数前加一个getchar函数(包含在stdio.h中) getchar()"吃掉"前面的回车符.
结果同上
- #include <stdio.h>
- main()
- {
- int a, b;
- float x, y;
- char c1, c2;
- scanf("a=%d b=%d", &a, &b);
- scanf("%f %e", &x, &y);
- scanf("%c %c", &c1, &c2);
- printf("a=%d, b=%d, x=%f, y=%f, c1=%c, c2=%c/n", a, b, x, y, c1, c2);
- }
运行结果
a=1 b=2↙
1.1 2.2↙
m n↙
a=1,b=2,x=1.100000,y=2.200000,c1=
,c2=m
1.1 2.2↙
m n↙
a=1,b=2,x=1.100000,y=2.200000,c1=
,c2=m
★ 原因是输入完第二行数据后回车被当作一个字符读入了内存输入缓冲区,所以c1读入了回车符
★ 解决方法:
<方法一> 在读字符函数中首位置加入一个空格
- #include <stdio.h>
- main()
- {
- int a, b;
- float x, y;
- char c1, c2;
- scanf("a=%d b=%d", &a, &b);
- scanf("%f %e", &x, &y);
- scanf("%c %c", &c1, &c2); /*第一个%c前加入一个空格*/
- printf("a=%d, b=%d, x=%f, y=%f, c1=%c, c2=%c/n", a, b, x, y, c1, c2);
- }
运行结果
a=1 b=2↙
1.1 2.2↙
m n↙
a = 1, b = 2, x = 1.100000, y = 2.200000, c1 = m, c2 = n
1.1 2.2↙
m n↙
a = 1, b = 2, x = 1.100000, y = 2.200000, c1 = m, c2 = n
所加入的空格使第二行尾输入的回车符与该空格符对应,第三行输入的第一个字符就被c1读入了
<方法二> 在第三个函数前加一个getchar函数(包含在stdio.h中) getchar()"吃掉"前面的回车符.
- #include <stdio.h>
- main()
- {
- int a, b;
- float x, y;
- char c1, c2;
- scanf("a=%d b=%d", &a, &b);
- scanf("%f %e", &x, &y);
- getchar(); /* getchar() 吃掉前面的回车符 */
- scanf("%c %c", &c1, &c2);
- printf("a=%d, b=%d, x=%f, y=%f, c1=%c, c2=%c/n", a, b, x, y, c1, c2);
- }