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

因为 line 是一个 char[]。但是你使用 %d 来输出它,所以你输出行,它是一个地址。所以 printf 打印行的地址......而不是你可以使用 printf ("%d", atoi(line));

于 2012-11-06T00:38:16.833 回答
1

要打印字符串,即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

如果您确切知道文件的内容(三个数字用空格分隔),为什么不直接读取呢?

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

逐行读取文件中的整数

  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 回答