scanf
函数作用:格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。
函数原型
int scanf(const char * restrict format,...);
函数参数:函数的第一个参数是格式字符串,它指定了输入的格式,并按照格式说明符解析输入对应位置的信息并存储于可变参数列表中对应的指针所指位置。每一个指针要求非空,并且与字符串中的格式符一一顺次对应。
返回值:scanf函数返回成功读入的数据项数,读到文件末尾出错时则返回EOF。
例:使用scanf函数输入数据。
#include <stdio.h>
int main(void)
{
int a,b,c;
printf("Give me the value of a,b,c seperated with whitespaces:\n");
scanf("%d%d%d",&a,&b,&c);
printf("a=%d,b=%d,c=%d\n",a,b,c);
return 0;
}
&a,&b,&c中的&是寻址操作符,&a表示对象a在内存中的地址[2] ,是一个右值。变量a,b,c的地址是在编译阶段分配的(存储顺序由编译器决定)。
这里注意:如果scanf中%d是连着写的如“%d%d%d”,在输入数据时,数据之间不可以用逗号分隔,只能用空白字符(空格或tab键或者回车键)分隔——“2 (空格)3(tab) 4” 或 “2(tab)3(回车)4”等。若是“%d,%d,%d”,则在输入数据时需要加“,”,如“2,3,4”。
fscanf
功 能: 从一个流中执行格式化输入,fscanf遇到空格和换行时结束,注意空格时也结束。这与fgets有区别,fgets遇到空格不结束。
函数原型:int fscanf(FILE*stream,constchar*format,[argument…]);
函数参数:FILE *stream:文件指针
char *format:格式字符串
[argument…]:输入列表
返回值:整型,成功返回读入的参数的个数,失败返回EOF(-1)。
例:
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
int i;
printf("Input an integer:");
/*从标准输入中读取一个整数*/
if(fscanf(stdin, "%d",&i))
printf("The integer read was:%d\n", &i);
else
{
fprintf(stderr, "Error reading an integer from stdin.\n");
exit(1);
}
return 0;
}
返回EOF如果读取到文件结尾。
scanf
函数作用:从一个字符串中读进与指定格式相符的数据。
函数原型:
int sscanf( const char *, const char *, ...);
int sscanf(const char *buffer,const char *format,[argument ]...);
函数参数:buffer存储的数据
format格式控制字符串
argument 选择性设定字符串
sscanf会从buffer里读进数据,依照format的格式将数据写入到argument里。
返回值
成功则返回参数数目,失败则返回-1,错误原因存于errno中。
在linux系统中成功返回的是成功转换的值的个数,例如: sscanf(“1 2 3”,”%d %d %d”,buf1, buf2,
buf3); 成功调用返回值为3,即buf1,buf2,buf3均成功转换。 sscanf(“1 2”,”%d %d %d”,buf1,
buf2, buf3); 成功调用返回值为2,即只有buf1,buf2成功转换。 (注意:此处buf均为地址)