------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------scanf函数的用法及注意事项
1.定义:scanf是标准的格式化输入函数,它从标准输入设备(一般是键盘)中读取输入数据。
2.使用格式:scanf("格式说明符",输入项的地址列表)。
3.注意事项:
(1)输入分隔符问题:如果输入数据全部为整数则可以用空格、制表符或者换行符来作为分隔符,不能用,;作为分隔符。如下例程序:
#include<stdio.h>
int main(){
int a,b,c;
printf("请输入字符:\n");
scanf("%d%d%d",&a,&b,&c);printf("a=%d,b=%d,c=%d\n",a,b,c);
return 0;
}运行上面程序,如果输入1 2 3系统会打印输出a=1,b=2,c=3; 如果输入1,2,3,系统会打印输出a=1,b=-1,c=-1.
分析:出现这种情况时因为逗号被当做一个字符存入了输入缓冲区内,当函数从输入缓冲区读取数据时会读取它,而它的数据类型与格式说明符中不同,产生出错,所以打印输出-1;而空格、制表符、换行符虽然也存入了输入缓冲区,但它作为当前数据输入完毕的标志,函数会自动识别这个标志从而接下来读取下一数据。
(2)混合输入问题:当函数中既有整型数据又有字符型数据时,分隔符不能再使用空格或制表符。如下例程序:
#include<stdio.h>
int main(){
int a,b,c;
char ch;
printf("请输入字符:\n");
scanf("%d%c%d",&a,&ch,&b);
printf("a=%d,ch=%c,c=%d\n",a,ch,b);
return 0;
}运行上面程序,当用键盘输入10 d 20后打印输出10, ,-1。
分析:由于空格也属于字符,当键盘输入空格后,空格被存入输入缓冲区,因此函数读取的数据依次是10,空格,d,空格,20,此时10赋值给a、空格赋值给ch、d赋值给b,所以最后打印输出的结果是10, ,-1。如果真想在输入的时候把空格作为分隔符,则可以把格式说明符改为%d %c %d,注意此时三个格式说明符中间都有空格,这样你键盘输入的空格就会被原样吸取掉。
(3)格式说明符末尾慎用\n。看下例程序:
#include<stdio.h>
int main(){
int a,b,c;
printf("请输入字符:\n");
scanf("%d%d\n",&a,&b);
printf("a=%d,b=%d\n",a,b);
return 0;
} 运行上面程序,当键盘输入1,2然后回车,我们会发现没有打印输出。分析:由于格式说明符的末尾添加了\n导致键盘输入回车(\n)时,回车符被函数吸收掉,所以无法进行打印输出。如果想要解决这个问题,我们可以再输入结束时按原样输入一个\n符号,然后再回车,此时程序会正常运行。这个小问题有时候大家不会去注意,从而导致出现错误。如果注意到这个知识点,该类问题会被避免。