2011-04-26 38 views
1

我正在讀取整數文件。我想將每行的整數保存到一個新的數組中。爲此,我想檢測一個文件的新行。如果有人知道這一點,請幫助。如何使用C程序檢測任何文件的新行

要讀取的文件如下

1 2 4 5 6 
7 3 2 5 
8 3 
9 7 6 2 
+0

那麼,你到目前爲止有什麼?你知道如何打開一個文件並從中讀取嗎?你知道如何一次讀一行嗎? – 2011-04-26 13:35:24

+1

['fgets()'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/fgets.html)從輸入流中讀取**行**。使用它和['sscanf()'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/scanf.html)。 – pmg 2011-04-26 13:36:53

回答

2
#include <stdio.h> 
int main (int argc, char **argv) { 
    FILE *fp = fopen ("d:\\abc.txt", "r"); 
    char line[1024]; 
    char ch = getc (fp); 
    int index = 0; 
    while (ch != EOF) { 
     if (ch != '\n'){ 
      line[index++] = ch; 
     }else { 
      line[index] = '\0'; 
      index = 0; 

      printf ("%s\n", line); 
     } 
     ch = getc (fp); 
    } 


    fclose (fp); 

    return 0; 
} 
+0

在這個程序中有一些分段錯誤...我試圖找出原因.... – 2011-04-26 13:53:08

+0

我沒有得到任何分段錯誤,請注意線限於1024.這是示例代碼,您可以擴展它進一步。 – Avinash 2011-04-26 13:55:42

+0

我有一行少於4或5個整數... – 2011-04-26 14:00:21

8

爲什麼不使用fgets()在了文件中的時間去一條線?然後您可以使用sscanf()而不是fscanf()來提取整數。

+0

這是一個很好的建議,因爲它將系統調用的數量減少到每行只有一行,而不是每個字符一個。非常適合演出! – oysteijo 2014-08-02 09:56:01

-1

如果使用由字符閱讀炭然後識別空白與「32」和「輸入」由「13」和/或「10」

+0

從不硬編碼ASCII值。使用字符常量,例如''代表空格,'\ n'代表換行,'\ r'代表回車。當你想要的時候也使用isspace()。 – unwind 2011-04-26 14:03:55

0

使用fgets()在讀取輸入的單個線時間。然後使用strtol()解析一個整數,使用它的「結束指針」功能找出再次嘗試的位置,然後循環直到解析完所有的值。

0

使用getc()這個動作很好,但不要忘記,getc()返回類型是int。重新輸入爲字符「有效」,但由於在重新輸入爲char(在大多數C編譯器上)後EOF = -1 = 0xFF(即0xFF字符被檢測爲EOF),您可能會遇到非嚴格ASCII輸入文件的問題。

0
#include<stdio.h> 
void main() 
{ 
    FILE *p; 
    int n; 
    int s=0; 
    int a[10]; 
    p=fopen("C:\\numb.txt","r"); 
    if(p!=NULL) 
     printf("file opened"); 

    while((n=getc(p))!=EOF) 
    { if(n!=NULL && n!='\n') 
     { 
     printf("\n%d",n); 
     a[s]=n; 
     ++s; 
     } 
    } 
fclose(p); 
getchar(); 
} 

我不確定int爲char,反之亦然轉換,但程序適用於非零數字。我嘗試了視覺基礎。

相關問題