1.fscanf():
fscanf()函數的頭文件是<stdio.h>,
函數原型 爲 int fscanf(FILE*stream, constchar*format, [argument...]);
其功能爲根據數據格式(format)從輸入流(stream)中寫入數據(argument);
【參數】stream爲文件指針,format爲格式化字符串,argument 爲格式化控制符對應的參數。
從文件指針fp指向的文件中,按format中對應的控制格式讀取數據,並存儲在agars對應的變量中;
原型: fscanf(FILE *fp, const char *format, agars)
#include<stdio.h>
#include<stdlib.h>
int main()
{
FILE *fp;
char ch;
fp = fopen("test.txt","r");
if(fp == NULL)
{
printf("Open filefailure!");
exit(1);
}
else
{
fscanf(fp,"%s",&ch);
}
printf("%s\n",ch);
fclose(fp);
return 0;
}
注:對於上面else中的內容需注意一下幾點:
1.如果要讀取一個整數(該整數必須在所存變量的數據類型表示的範圍之內)則爲:fscanf(fp, “%d”, &ch),而此時ch應該定義爲int;若讀取的數據大於int所能表示的範圍,則讀取的數據屏幕顯示爲負數,即讀取的數據發生越界,如果此時的ch依然爲char型,則運行時報錯(內存讀寫錯誤)。
2.如果要讀取字符串,則ch應該定義爲char型數組或指針(指針需分配空間),而不能將其定義爲char型,否則也會報錯(內存讀寫錯誤);
3.輸出數據時的數據格式應該和讀取數據時的控制格式相同,除非進行強制轉換。
4.使用fscanf()時,其中的變量agars應該取其地址;
5.對於文件的操作,記得文件打開操作後要關閉。
對於fscanf()主要應用:
按行讀取一個文件中的所有內容 或 依次讀取每行相隔的幾個數據,具體參照以下示例:
#include<stdio.h>
#include<stdlib.h>
int main()
{
FILE *fp;
char *ch, *ah;
ch =(char *) malloc(sizeof(char) * 100);
ah =(char *) malloc(sizeof(char) * 100);
fp = fopen("test.txt","r");
if(fp == NULL)
{
printf("Open filefailure!");
exit(1);
}
else
{
while(!feof(fp))
{
fscanf(fp, “%s”, ch);
printf(“%s”, ch);//這兩行爲按行讀取所有數據
fscanf(fp, “%s%s”, ch, ah);
printf(“The value of ch and ah is:%s %s\n”,ch,ah);//這兩行爲分別讀取每行相隔的幾個數據
}
}
printf("%s\n",ch);
free(ch);
free(ah);
fclose(fp);
return 0;
}
2.fprintf():
將agars(參數表)內各項的值,按format(格式控制字符串)所表示的格式,將數據格式爲字符串的形式寫入到文件指針fp指向的文件中。
原型:fprintf(FILE *fp, const char *format, agars)
fprintf()和fscanf()相對應,其用法也基本和fscanf()相同。具體參照以下示例:
#include<stdio.h>
#include<stdlib.h>
int main()
{
FILE *fp;
fp = fopen("test.txt","a+");
fprintf(fp,“%d %d”,123456,789);//將123456和789寫到test.txt文件中
fprintf(fp,"%s %s","China","ChongQing"); //將字符串China和ChongQing追加寫到test.txt文件中
fclose(fp);
return 0;
}
參考:https://blog.csdn.net/jhg1204/article/details/7932187
https://blog.csdn.net/sinat_24310873/article/details/53141429