為什麼這篇fscanf換行鄉民發文收入到精華區:因為在fscanf換行這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者andy2007 (...)看板C_and_CPP標題[問題] 函式讀檔換行時間Sat Jul ...
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
Dev-C++ 4.9.9.2
問題(Question):
我有一個.txt檔案,檔案內容為:
10101
01001
00011
我想把每列讀到a[5]內,並且從字串轉成int,也就是
a[0] = 1, a[1] = 0, a[2] = 1, a[3] = 0, a[4] = 1
但這在函式內,我希望下一次呼叫此函式可以把第二列讀a[5]內,也就是
a[0] = 0, a[1] = 1, a[2] = 0, a[3] = 0, a[4] = 1,依此類推
但是我不知道如何在下一次呼叫時換行...Orz
程式碼(Code):(請善用置底文網頁, 記得排版)
#include <stdio.h>
#include <stdlib.h>
const char *file = "C:\\test_01.txt";
void read(int *a);
int main(void)
{
int a[5];
int i;
for(i=0;i<2;i++)
{
read(a);
putchar('\n'); //結果兩次都是10101
}
system("pause");
return 0;
}
void read(int *a)
{
int i;
FILE *fptr;
fptr = fopen(file,"r"); //每次呼叫都要開檔一次,有辦法開一次就好了嗎?
if(fptr!=NULL)
{
char temp[2] = {0};
for(i=0;i<5;i++)
{
fscanf(fptr,"%c",temp);
a[i] = atoi(temp);
printf("a[%d]=%d\t",i,a[i]);
}
}
else
printf("read file error!");
}
謝謝各位前輩指點 :)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.114.214.89
真對不起,我改了一點小地方,用"\0"就可以了,但我不知道為什麼
fscanf(fptr," %c",temp); //%c前面有"空白"
a[i] = atoi(temp);
這樣下面這五個都可以達到換行的作用
什麼都不打
fscanf(fptr,"%c",temp); //讀入.txt的 \n
fscanf(fptr,"\n",temp);
fscanf(fptr,"\0",temp);
fscanf(fptr,"\0\n",temp);
但如果
fscanf(fptr,"%c",temp); //%c前面沒有空白
a[i] = atoi(temp);
則
fscanf(fptr,"%c",temp); //讀入.txt的 \n
fscanf(fptr,"\n",temp); //正確
fscanf(fptr,"\0",temp); //讀取錯誤!
fscanf(fptr,"\0\n",temp); //讀取錯誤!
※ 編輯: andy2007 來自: 140.114.214.89 (07/27 16:31)