3

行ごとに読み取り、各行の先頭の数字を int 配列にキャプチャし、文字を 2 次元文字配列にキャプチャするループを作成できるようにしたいと考えています。私は次のようなループを持つことができると思った

while (fscanf(file, "%d %c %c %c", &num, &f, &e, &h)==4){}

ただし、それは C が文字列を読み取ることができた場合です。一行一行の読み方は?

4

3 に答える 3

1

行を読むには、次を使用できます:-

  while ( fgets ( line, sizeof line, file ) != NULL )

またはあなたが試すことができます

  while ((read = getline(&line, &len, fp)) != -1)
于 2012-10-23T20:07:10.930 に答える
0
      #include <stdio.h>
      #include <stdlib.h>
      int main()
      {
          char matrix[500][500], space;
          int numbers[500], i = 0, j;
          FILE *fp = fopen("input.txt", "r");

          while(!feof(fp))
          {
                fscanf(fp, "%d", &numbers[i]); // getting the number at the beggining
                fscanf(fp, "%c", &space); // getting the empty space after the number
                fgets(matrix[i++], 500, fp); //getting the string after a number and incrementing the counter
          }
        for(j = 0; j < i; j++)
            printf("%d %s\n", numbers[j], matrix[j]);
      } 

変数「i」は、何行あるかをカウントしています。500 を超える行がある場合は、その値を変更するか、動的ベクトルを使用できます。

于 2012-10-23T20:10:30.063 に答える
0

これはどうですか:

    char buf[512];
    int  length = 0;

    while(fgets(&buf[0], sizeof(buf), stdin)) {
        length = strlen(&buf[0]);
        if(buf[length-1] == '\n')
            break
        /* ...
        ... 
        realloc or copy the data inside buffer elsewhere.
        ...*/
    }

/* ... */
于 2012-10-23T20:16:07.207 に答える