scanf()
在一个字符串中遇到空格、回车、Tab结束,不接受遇到的空格、回车、Tab控制符后面的字符输入语句,将读入的是空格、回车、tab控制符。
如果想要读取可以采用%[]输入;
书写格式:%9[^\n],表示不包含\n,输入接受任何非回车字符,结束条件要么输入字符达到9个要么输入回车,如果超过9个则后面的会被省略 scanf(" %9[^\n] ", str ); |
问题:看下面一段代码
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{
char arr[10] = { 0 };
char c = 0;
scanf("%s", arr);
c = getchar();
printf("%s\n%c", arr, c);
system("pause");
return 0;
}
输出结果:
【现象】输完arr按回车准备输入c的时候程序直接结束,并且输出了arr,c为回车。
【解决方法】在多个输入型函数之间从在缓冲区概念,每次输入完一个函数都要清空缓冲区。具体解决方法如下:
(1)在scanf()后面再加一个没用的getchar(),用于接收回车,并丢弃。
(2)在scanf()后面加fflush(stdin);清空缓冲区。注:高等vs不适用
(3)万能法:在scanf()后面加一个
while (getchar() != '\n')
{
;
}
gets()
遇到回车结束,并吞掉回车符。下一个字符输入语句,将读入回车以后的字符。
例:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{
char arr[10] = { 0 };
char c = 0;
gets(arr);
c = getchar();
printf("%s\n%c", arr, c);
system("pause");
return 0;
}
结果: