1

我有这段代码可以从文件中读取整数。我使用相同的代码从另一个文件中读取双精度并完美运行,但这次循环变得无限。可能是什么?我正在阅读的文件是由程序编写的,可以吗?我不知道这是什么意思,但我的操作系统说该文件是二进制文件。好吧,任何帮助将不胜感激。谢谢。

i=1;
cadeia = malloc ( i * sizeof(int) );
if (!cadeia){ //Avalia se a alocação de memória foi bem sucedida
  printf("Problema na alocação de memória para cadeia.");
  exit(0);
}
while ( !feof( arq_cadeia ) ){ /*Fazendo leitura e alocação de memória da matriz de transição*/
   fscanf ( arq_cadeia , "%d" , ( cadeia+i-1 ) );
   i++;
   cadeia = realloc ( cadeia , i * sizeof( int ) );
   if (!cadeia){ //Avalia se a alocação de memória foi bem sucedida
  printf("Problema na alocação de memória para cadeia.");
  exit(0);
   }
   printf("%d\n", *( cadeia+i-1 ));
}
4

2 回答 2

2

您的预感是正确的,如果您的文件是二进制格式scanf,则无法读取它。如果您无法使用文本编辑器(例如记事本)查看数字,scanf也无法阅读它们。

顺便说一句,您的程序还有其他问题:每次读取数字时重新分配整个数组的效率非常低!最简单的事情是分配这么多的空间,你不会需要它(不要担心“浪费”,只要你不超过顶部)。第二个最简单的方法是测量文件的大小(你需要stat或一些这样的)并估计其中的整数数量。第三个最简单的方法,为 10000 个整数分配足够的空间,并仔细检查何时将用完并分配两倍于已有的整数。

于 2012-07-10T15:40:32.437 回答
0

您正在读取整数,假设它们是以文本模式编写的。检查文件是文本文件还是二进制文件,正如您所怀疑的那样。如果你可以用文本编辑器打开它并阅读内容,那么它就是一个文本文件。否则,您需要调整程序才能读取二进制文件。

于 2012-07-10T15:40:34.667 回答