6

ファイルの最後まで読み取るのが一般的ですが、テキスト ファイルからの最後までデータ (一連の数値) を読み取る方法に興味があります。新しい行に配置されているファイルからいくつかの一連の数字を読み取るタスクがありました。入力の例を次に示します。

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

最初のシリーズ: 1 2 53 7 27 8

2 つ目: 67 5 2

3 つ目: 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);
     }  

ファイルの最後まで読み取るため、期待どおりの結果が得られません。何を指示してるんですか?

4

2 に答える 2

6

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

ideone で実行されているコードを確認できます

于 2012-12-22T11:08:13.643 に答える
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);
}  
于 2012-12-22T10:11:27.267 に答える