fscanf函數用法
簡要介紹
fscanf()函數是格式化讀寫函數。它讀取的對象是磁盤文件
函數原型:
int fscanf(FILE * fp,char * format,...);
其中fp為文件指針,format為C字符串,...為參數列表,返回值為成功寫入的字符的個數。
fscanf函數會從文件輸入流中讀入數據,存儲到format中,遇到空格和換行時結束。
使用示例
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int id; //學生id
char name[30]; //學生姓名
char address[100]; //學生地址
}Student;
int main()
{
Student student;
FILE* fp = fopen("D:\\markdown.txt", "wt+");
if (fp == NULL)
{
puts("文件不存在,請在指定目錄下先行創建文件!");
exit(0);
}
printf("請依次輸入學生的id,姓名和地址:\n");
scanf("%d%s%s", &student.id, student.name, student.address);
//將學生信息存入D:\\markdown.txt文件中
fprintf(fp, "%d\t%s\t%s\n", student.id, student.name, student.address);
Student temp;
//重置文件指針
rewind(fp);
//將文件中的信息讀取出來並且存儲到temp中
fscanf(fp, "%d\t%s\t%s\n", &temp.id, temp.name, temp.address);
printf("第%d位學生的姓名為:%s,地址為%s\n", temp.id, temp.name, temp.address);
fclose(fp);
return 0;
}
運行結果:
請依次輸入學生的id,姓名和地址:
1
yaya
未知
第1位學生的姓名為:yaya,地址為未知
注意點
1、fscanf函數在文件輸入流中讀取數據時,遇到空格或者換行會結束讀取,如果要忽略換行符的影響,可以使用
fscanf(fp, "%[^\n]", test);
在上面的這條語句中,%[]表示讀取指定字符集,即%[0-2]為讀取0~2之間的數字(包括0和2),^ 表示反向讀取,即讀取指定字符集以外的字符,遇到指定字符就停止(不會讀取指定字符)。所以%[^\n]表示讀取字符直到遇到\n為止。
如果要將換行符讀取掉,但不存儲到變量中,可以采用
fscanf(fp, "%[^\n]%*c", test);
2、scanf和fscanf的相互轉換
char name[10] = "";
scanf("%[0-2]", name); //等價於下一句
fscanf(stdin, "%[0-2]", name); //等價於上一句
printf("%s", name);