我有点绝望,因为我浪费了最后 4 个小时来寻找简单/愚蠢的事情的解决方案。我在学校有一个项目,我必须从文本文件中读取整数,然后计算它们的最大值。问题是这些数字不一定用空格分隔,也可以用制表符 (\t) 或换行符 (\n) 分隔。我使用 fscanf 函数读取我的整数,但问题是在最后一个数字之后我的文件中有一个空格,所以它读取最后一个数字的 2 倍(我不知道为什么)。通常人们会说“删除那个空格”,但我的老师会以几种方式测试程序,他警告我们程序必须是健壮的(我们必须能够管理空格,\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
),我需要管理相同类型的 os 错误。任何帮助,将不胜感激!