#include
int main()
{
FILE *fp;
int i,k,n;
fp = fopen("yygy.dat","a+");
if(fp == NULL)
{
printf("this file is faild!");
exit(1);
}
for(i = 1;i < 6; i++)
{
fprintf(fp,"%d",i);
if(i % 3 == 0)
{
fprintf(fp,"\n");
}
}
rewind(fp);
fscanf(fp,"%d%d",&k,&n);
printf("%d %d\n",k,n);
fclose(fp);
}
我想大家也許會想到這個的結(jié)果是:1?。?BR> 但是事實上經(jīng)過你的編輯,編譯,運行后,你將得到結(jié)果為:123 45,你所得到的結(jié)果并不是這樣的對吧,那就對了,那就是嚇你一跳的地方。
再如 可以把以上的程序改動一下:
把 if(i % 3 == 0)
{
fprintf(fp,"\n");
}
這一塊注釋掉后會是什么結(jié)果喃?結(jié)果應(yīng)該是:12345 -43423(這個數(shù)并不是每個人編譯運行的時候都是一樣的,這只是一個垃圾數(shù)據(jù))
那我們通過這些,不難總結(jié)出fscanf這個函數(shù)的問題了,它這娃兒只認(rèn)"/n" 讀一次 就是讀一個以"/n"結(jié)尾的一串?dāng)?shù)字
但是,還有一個問題,考試.大提示就是我們?nèi)绻谟胒printf函數(shù)進行輸入文件的時候在輸入非常多的數(shù)后才有一個"\n"的情況下,那么fscanf 還是不是像上面我們說的那樣讀出以"\n"結(jié)尾的一串值喃,那我們就來試一下子了 我們只要把for(i = 1;i < 6; i++)
這一句中的i < 6 改為 i < 60 , 且剛才那個
if(i % 3 == 0)
{
fprintf(fp,"\n");
}
還是注釋到
那么你得到的結(jié)果是不是又變了喃,這個值會是一個大大的數(shù),但是并不我們所預(yù)期的那樣對吧,因為這里用fscanf讀出的時候用的format是%d 也就是讀一個整數(shù)的長度,整數(shù)的長度是32位的,而我們這里是寫了60次后才進行讀的,所以太長了。
注意:每次執(zhí)行新的改動后的可執(zhí)行文件的時候,一定要把原來生成的那個yygy.dat刪掉.
綜上所述:我們在使用fscanf()的時候不僅要注意到“\n” 的位置還要注意我們進行文件讀寫時所用的format。
int main()
{
FILE *fp;
int i,k,n;
fp = fopen("yygy.dat","a+");
if(fp == NULL)
{
printf("this file is faild!");
exit(1);
}
for(i = 1;i < 6; i++)
{
fprintf(fp,"%d",i);
if(i % 3 == 0)
{
fprintf(fp,"\n");
}
}
rewind(fp);
fscanf(fp,"%d%d",&k,&n);
printf("%d %d\n",k,n);
fclose(fp);
}
我想大家也許會想到這個的結(jié)果是:1?。?BR> 但是事實上經(jīng)過你的編輯,編譯,運行后,你將得到結(jié)果為:123 45,你所得到的結(jié)果并不是這樣的對吧,那就對了,那就是嚇你一跳的地方。
再如 可以把以上的程序改動一下:
把 if(i % 3 == 0)
{
fprintf(fp,"\n");
}
這一塊注釋掉后會是什么結(jié)果喃?結(jié)果應(yīng)該是:12345 -43423(這個數(shù)并不是每個人編譯運行的時候都是一樣的,這只是一個垃圾數(shù)據(jù))
那我們通過這些,不難總結(jié)出fscanf這個函數(shù)的問題了,它這娃兒只認(rèn)"/n" 讀一次 就是讀一個以"/n"結(jié)尾的一串?dāng)?shù)字
但是,還有一個問題,考試.大提示就是我們?nèi)绻谟胒printf函數(shù)進行輸入文件的時候在輸入非常多的數(shù)后才有一個"\n"的情況下,那么fscanf 還是不是像上面我們說的那樣讀出以"\n"結(jié)尾的一串值喃,那我們就來試一下子了 我們只要把for(i = 1;i < 6; i++)
這一句中的i < 6 改為 i < 60 , 且剛才那個
if(i % 3 == 0)
{
fprintf(fp,"\n");
}
還是注釋到
那么你得到的結(jié)果是不是又變了喃,這個值會是一個大大的數(shù),但是并不我們所預(yù)期的那樣對吧,因為這里用fscanf讀出的時候用的format是%d 也就是讀一個整數(shù)的長度,整數(shù)的長度是32位的,而我們這里是寫了60次后才進行讀的,所以太長了。
注意:每次執(zhí)行新的改動后的可執(zhí)行文件的時候,一定要把原來生成的那個yygy.dat刪掉.
綜上所述:我們在使用fscanf()的時候不僅要注意到“\n” 的位置還要注意我們進行文件讀寫時所用的format。