一、scanf()函数
-
scanf()输入结束符: 回车符 和 空格符
例子:
#include<stdio.h>
int main(){
char a[1024] = {'0'};
scanf("%s\n",a);
printf("%s\n",a);
return 0;
}
当输入时,1 23 guah
输出为1
2.scanf()由于是回车符结束(或者空格符结束),所以在缓存区里会有回车符,在循环使用scanf()函数做输入时,会出现程序进入死循环。
首先 int scanf(const char *format, ...)函数的返回值为int型,表示正确输入的个数,如:
input = scanf("%d %d",&a,&b);
当输入 1 2(回车) (1 和 2 都是整形 )
输出input = 2;
当输入 c 1(回车)
input = 1;
所以可以根据输入是否正确来判断是否进行后续操作:
#include<stdio.h>
int main(){
int a = 0,b = 1;
while(!(scanf("%d",&a)))
{
printf("%d",b)
}
printf("%d\n",a);
return 0;
}
代码中是只有输入整数时,程序才执行打印a的值,代码输入错误时,打印b的值,然后继续输入,
但是输入错误时,由于没有提示信息,不方便操作,所以加入提示信息,代码如下:
#include<stdio.h>
int main(){
int a = 0,b = 1;
while(!(scanf("%d",&a)))
{
printf("%d",b);
printf("please input correct type a!\n");
}
printf("%d\n",a);
return 0;
}
在执行时,出现了无限循环
啥原因?只是加了一行 printf("please input correct type a!\n");
原来在printf语句中,最后一行有一个\n,\n作为scanf()的输入了,这时就会出现输入错误,导致了程序的无限循环。解决方法是:在printf后面加入getchar(),用于接收\n,此时就清除了缓冲区中的\n,程序能正常运行
#include<stdio.h>
int main(){
int a = 0,b = 1;
while(!(scanf("%d",&a)))
{
printf("%d",b);
printf("please input correct type a!\n");
getchar();
}
printf("%d\n",a);
return 0;
}
w
1please input correct type a!
e
1please input correct type a!
2
2
所以在使用scanf()函数会出现很多不容易发现的致命错误。
二、fgets()函数
为了避免scanf()输入会容易遇到一些错误,在程序中尽量使用fgets()函数做输入函数,fgets()函数时读取一行数据。注意读取的最大的空间是sizeof(str);
# include <stdio.h>
int main(void)
{
char str[30];
printf("请输入字符串:");
fgets(str, sizeof(str), stdin);
printf("%s", str);
return 0;
}
当输入时,1 23 guah
输出 1 23 guah