0

ファイルから3つの整数を出力したいだけです。なぜこれが機能しないのですか?-1079184140 などを取得します。

int main(int argc, char *argv[]) 
{

   FILE* stream  = fopen(argv[2], "r");

   char line[80];

  for (int i = 0; i < 3; i++)
  {
    fgets(line, 80, stream);
    printf("%d \n", line);
  } 

  fclose(streamForInput);

}
4

5 に答える 5

4

私はsscanfを使用します。

int number;
sscanf (line, "%d", &number);
printf ("%d \n", number);

これにより、行の最初の整数がプルされます。これは最も安全で堅牢な方法ではありませんが、範囲外です。

PS:

fclose(streamForInput);

次のようにする必要があります。

fclose(stream);
于 2012-11-06T00:33:00.703 に答える
3

うーん。最初の問題は次のとおりです。

   printf("%d \n", line);

行はchar []であるためです。ただし、 %d を使用して出力するため、アドレスである行を出力します。したがって、printf は行のアドレスを出力します...代わりに、printf ("%d", atoi(line)); を使用できます。

于 2012-11-06T00:38:16.833 に答える
1

stringを出力するにlineは、次を使用します%s

printf("%s \n", line);

これが本当に整数であれば、次のように使用できます%d

int num = atoi(line);
printf("%d \n", num );

あなたが見ているのは、ポインター型 (基本的には C の文字列です) を整数型として扱った結果です。ポインタはメモリ アドレスを保持するため、-1079184140 はポインタが保持する実際のアドレスであり、32 ビットの符号付き整数として表されます。

于 2012-11-06T00:35:55.920 に答える
1

ファイルの内容 (空白で区切られた 3 つの数字) が正確にわかっている場合は、それを直接読み取ってみませんか?

if (fscanf(stream, "%d%d%d", &foo, &bar, &baz) < 3)
    // handle error

printf("%d\n%d\n%d\n", foo, bar, baz);

しかし、行を読みたい場合は、他の良い答えが既にあります。

于 2012-11-06T00:46:48.390 に答える
0

整数のファイルを 1 行ずつ読み取るには

  void read_file(char *filename, int *readbuff, int size)
   {
       FILE *fp = fopen(filename,"r");
       if(fp == NULL){
          printf("Failed to open file %s \n", filename);
          return;
       }

       /*the condition in for loop checks if the integer was read into
        readbuff[i] and the readbuff is not overflown*/
       for(int i = 0 ; fscanf(fp,"%d\n",&readbuff[i]) == 1  && i < size; ++i);

       fclose(fp);
       return;
   }
于 2018-07-25T15:57:52.207 に答える