2012-12-22 32 views
5

ファイルの最後まで読むのが一般的ですが、データファイル(一連の番号)をテキストファイルから?私は新しい行に配置されたファイルからいくつかの一連の数字を読み込むという作業をしました。ここでの入力の例である: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

第二1:67 5 2

第1: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を使用しstdinから読み込む特別な理由はありますか? –

答えて

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'; 

uはそれが働いて手に入れた代わりにこれを試して?これは役立つはず:

#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); 
} 
関連する問題