c語言檔案操作相關

無臉男發表於2016-07-01

關於fscanf函式的用法

_Check_return_ _CRT_INSECURE_DEPRECATE(fscanf_s) _CRTIMP int __cdecl fscanf(_Inout_ FILE * _File, _In_z_ _Scanf_format_string_ const char * _Format, ...);

這是函式宣告,該函式有三個引數,第一個是檔案指標,第二個是格式如“%s %d...”這樣的,第三個是儲存這些從檔案讀取的資料的地址。具體這些可以去百度,接下來想講講我對這個的理解。

while (!feof(fp))
    {
    fscanf(fp, "%s %d", myp.myname, &myp.socer);
    }

大家好奇為什麼這樣可以讀取檔案中的格式化字元。這是因為檔案指標會自動向下移動,每當我們讀取一行,檔案指標就會自動向下讀取一行。類似的有read函式。(具體專業術語可能有誤,希望大家指出)下面附上例子;

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

struct MyStruct
{
char myname[10];
int socer;

};

int main()
{
MyStruct myp;
FILE *fp = NULL;
fp = fopen("d:/data.txt", "a+");
while (!feof(fp))
{
    fscanf(fp, "%s %d\n", myp.myname, &myp.socer);
    printf("%s %d\n", myp.myname, myp.socer);
}
printf("%s %d\n", myp.myname, myp.socer);
fclose(fp);
system("pause");
return 0;
}

細心的同學可能發現我的例子裡用的和前面寫的fscanf(),有點不一樣

fscanf(fp,"%s %d",myp.myname, &myp.socer);
fscanf(fp,"%s %d\n",myp.myname, &myp.socer);

這兩個都可以工作。 說了這麼多,只是想表達這個檔案指標會自動的向下移動,可能你早已經知道。

首先你要在d盤建立data.txt
內容類似這樣
張三 100
李四 99
王二 60

相關文章