逐行读取整数文件

时间:2012-11-06 00:24:56

标签: c

我只想从文件中输出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);

}

5 个答案:

答案 0 :(得分:3)

我会使用sscanf

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

这将拉出一行上的第一个整数。这不是最安全或最强大的方式,但这超出了范围。

PS:

fclose(streamForInput);

应该是:

fclose(stream);

答案 1 :(得分:2)

嗯。第一个问题是:

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

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

答案 2 :(得分:1)

要打印line所使用的字符串,请使用%s

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

现在,如果它确实是一个整数,你可以使用%d

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

您所看到的是将指针类型(C中的字符串基本上是什么)视为整数类型的结果。由于指针保存内存地址,因此-1079184140是指针保存的实际地址,表示为32位有符号整数。

答案 3 :(得分:1)

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

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

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

但是如果你想读行,那已经有了其他好的答案。

答案 4 :(得分: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;
   }