学了一段时间的C语言,虽然能够编写一点点小程序,但是回头再次看书的途中,突然觉得又收获了不少知识,尤其是对格式化输入/输出函数的理解和应用方面.我想把我对输出函数scanf的运用总结一下,希望能对自己或他人(尤其是初学者)有帮助.
scanf函数称为格式化输出函数,即按照用户指定的格式从键盘上把数据输入到指定的变量之中.它是一个标准库函数,他的函数原型在头文件"stdio.h"中.scanf函数的一般形式为:
scanf("格式控制字符串",地址列表); 比方说:
#include <stdio.h>
int main(void)
{
float a;
printf("请输入变量a的值: \n");
scanf("%f",&a);
printf("a=%2.3f\n",a);
}
虽然他的用法看起来很简单,但是,我刚开始的时候总是与printf函数搞混淆(因为两者的调用形式很像),其实这两个函数有很大的区别,因此在使用scanf函数的时候有很多讲究,一不小心就会出现小错误.
首先,scanf函数不能显示非格式字符串,也就是说不能显示提示字符串,.如上面的语句中printf函数就可以有中文提示信息,而scanf函数中就不能有中文出现;
其次,scanf函数中没有精度控制,也不能有换行转义字符"\n",这和printf不一样.如上面的语句中,如scanf语句中写成scanf("%2.3f",&a)和scanf("%f\n",&a)都是非法的;
再次,scanf函数中要求给出变量的地址,如给的是变量名就会出错哦,即scanf("%f",a)是非法的;
再次,这一点是最容易搞错的,在输入字符数据时,若格式控制串中没有非格式字符,则认为所有输入的字符均为有效字符.如:
int main(void)
{
char i,k,j;
scanf("%c%c%c",&i,&j,&k);
printf("i=%c, j=%c, k=%c",i,j,k);
}
输入和显示结果为:如输入字符a b c,则把'a'赋给变量i,''赋给变量j,'b'赋给变量k.只有当输入为abc时,才能是这样的输出结果:i=a, j=b, k=c.
当然如果格式控制串中有非格式字符,则输入时也要输入该非格式字符,如:
#include <stdio.h>
int main(void)
{
char i,k,j;
scanf("%c,%c,%c",&i,&j,&k);
printf("i=%c, j=%c, k=%c",i,j,k);
}
输入时应该是:a,b,c.显示结果为:i=a, j=b, k=c.
最后,在scanf函数中,如果有"*"符,用以表示该输出项,读入后不赋予相应的变量,即跳过该输出值.如:
#include <stdio.h>
int main(void)
{
int i,k;
scanf("%d %*d %d",&i,&k);
printf("i=%d, k=%d",i,k);
}
当输入三个数字为: 23 12 34时,显示结果应为:i=23, k=34.
对于scanf函数的使用格式当然还不止这一点,我呢,只要是把我在平时的编程中遇到的容易混淆的小细节给总结出来,使在今后能够谨慎运用.