我是一个有点绝望的助手,因为我浪费了过去4个小时寻找一个简单/愚蠢问题的解决方案。我在学校里有一个项目,必须从文本文件中读取整数,然后计算它们的最大值。问题在于这些数字不一定由空格分隔,还可能是制表符(\t)或换行符(\n)。我使用fscanf函数读取整数,但问题在于在我的文件中,最后一个数字后面有一个空格,所以它会读取两次最后一个数字(我不知道为什么)。通常人们会说“只需删除该空格”,但我的老师将测试程序的多种方式,并警告我们该程序必须具有健壮性(我们必须能够处理空格、\t、\n以便正确读取数字,这就是为什么他特意在最后一个数字后留下一个空格的原因)。下面是我的代码和示例文本:
FILE* file = NULL;
int *t = NULL, *new_size = NULL;
int temp, count;
file = fopen(argv[1],"r");
do
{
fscanf(file,"%d",&temp);
count++;
new_size = (int*) realloc (t, count * sizeof(int));
if (new_size != NULL)
{
t = new_size;
t[count-1] = temp;
}
else
{
free(t);
puts("Erreur d\'allocation memoire!\n");
exit(1);
}
} while(!feof(file));
fclose(file);
printf ("Numbers read\n:");
for(i = 0; i < count; i++)
{
printf ("%d ", t[i]);
}
我的论点是一个名为data.txt的文件,其中包含:3 1 7 0 4 9 6 150和一个\n。所以基本上,我的程序读取前8个整数,之后,由于它不是EndOfFile,它仍然再次读取最后一个(150)。因此我的输出是:
读取的数字:
3 1 7 0 4 9 6 150 150
有人能告诉我该怎么做,以使我的程序更加健壮?我需要处理同样类型的错误,如果最后有一个空格,甚至是一个制表符(\t
)。
任何帮助都将不胜感激!