📅  最后修改于: 2023-12-03 14:39:41.372000             🧑  作者: Mango
C 语言中的输入函数 scanf()
和 fscanf()
用于从标准输入流和文件流中读取数据。本文将介绍这两个函数的使用方法、用法的注意事项和示例代码。
scanf()
函数scanf()
函数是从标准输入流中读取数据的函数,其函数原型如下:
int scanf(const char *format, ... );
函数参数 format
是格式化字符串,指定了所要读取的数据类型及其格式,可以包含空格和换行符。除 format
以外的参数是所要读取的数据的指针,可以是变量名、数组名或指针等形式。函数会按照指定的格式读取输入流中的数据,并将它们存储在相应的变量或数组中。
需要注意的是,scanf()
函数在读取数据时会留下输入缓冲区中的换行符,如果后续使用 gets()
函数或者 fgets()
函数可能会读取到不正确的数据。为避免出现此类问题,可以使用额外的 getchar()
函数读取掉缓冲区中的换行符。例如:
char ch;
scanf("%c", &ch);
getchar();
下面是一个简单的 scanf()
函数的示例代码:
#include <stdio.h>
int main()
{
int a, b;
float c;
printf("Please enter an integer:");
scanf("%d", &a);
printf("Please enter another integer and a float number:");
scanf("%d %f", &b, &c);
printf("a=%d, b=%d, c=%.2f\n", a, b, c);
return 0;
}
fscanf()
函数fscanf()
函数是从文件流中读取数据的函数,与 scanf()
函数的参数和使用方法类似,只不过需要指定读取的文件流的指针。
其函数原型如下:
int fscanf(FILE *stream, const char *format, ...);
stream
参数是文件指针,指向要读取的文件流。其他参数同样是格式化字符串和数据指针。
使用 fscanf()
函数时需要注意的是,如果文件中的数据与格式化字符串不对应,可能会导致读取的数据不正确或者出错。因此,对于复杂的读取内容与格式之间的对应关系,需要进行特殊的处理。
下面是一个简单的 fscanf()
函数的示例代码:
#include <stdio.h>
int main()
{
FILE *fp = fopen("data.txt", "r");
if (fp == NULL)
{
printf("File open error!\n");
return 0;
}
int count, total = 0;
float score;
while(fscanf(fp, "%d%f", &count, &score) != EOF)
{
total += count;
}
printf("Total=%d\n", total);
fclose(fp);
return 0;
}
scanf()
和 fscanf()
函数是 C 语言中常用的输入函数。它们在读取数据时需要指定格式化字符串,以便正确地读取数据。但需要注意的是,如果数据和格式化字符串不一致,则会出现错误或读取到不正确的数据。在处理复杂的格式对应关系时,需要特别小心。