2012-12-22 82 views
5

通常讀到文件結束,但我感興趣的是如何從文本文件中讀取數據(一系列數字),直到line?我的任務是從文件中讀取幾個系列的數字,這些數據以新的方式排列。下面是輸入的一個示例:從文件讀取數據直到C/C++的行尾

1 2 53 7 27 8 
67 5 2 
1 56 9 100 2 3 13 101 78 

第一系列:1 2 53 7 27 8

二之一:67 5 2

第三之一:1 56 9 100 2 3 13 101 78

我必須從文件中分別讀取它們,但是每一行都要直到行尾。我有這樣的代碼:

#include <stdio.h> 
    FILE *fp; 
    const char EOL = '\\0'; 
    void main() 
    { 
     fp = fopen("26.txt", "r"); 
     char buffer[128]; 
     int a[100]; 
     int i = 0; 
     freopen("26.txt","r",stdin); 
     while(scanf("%d",&a[i])==1 && buffer[i] != EOL) 
      i++; 
     int n = i; 
     fclose(stdin); 
    } 

它讀取直到文件結束,所以它不會做我期望的。你有什麼建議?

+0

使用freopen並從標準輸入讀取的任何具體原因? –

回答

5

使用fgets()閱讀全行,然後解析線(可能與strtol())。

#include <stdio.h> 
#include <stdlib.h> 

int main(void) { 
    char buffer[10000]; 
    char *pbuff; 
    int value; 

    while (1) { 
    if (!fgets(buffer, sizeof buffer, stdin)) break; 
    printf("Line contains"); 
    pbuff = buffer; 
    while (1) { 
     if (*pbuff == '\n') break; 
     value = strtol(pbuff, &pbuff, 10); 
     printf(" %d", value); 
    } 
    printf("\n"); 
    } 
    return 0; 
} 

你可以看到code running at ideone

+1

如果您打算使用這個想法,請確保您添加代碼以處理奇怪的輸入(具有錯誤數據(包括超長行)的文件,空行,尾隨空格的行,空文件,...).. 。) – pmg

2

的\ n應是新線逃逸,試試這個,而不是

const char EOL = '\n'; 

沒有ü得到它的工作?這應該幫助:

#include <stdio.h> 
FILE *fp; 
const char EOL = '\n'; // unused . . . 

void main() 
{ 
    fp = fopen("26.txt", "r"); 
    char buffer[128]; 
    int a[100]; 
    int i = 0; 
    freopen("26.txt","r",stdin); 

    while(scanf("%i",&a[i])==1 && buffer[i] != EOF) 
     ++i; 

    //print values parsed to int array.  
    for(int j=0; j<i; ++j) 
     printf("[%i]: %i\n",j,a[j]); 

    fclose(stdin); 
}