gpt4 book ai didi

c - 从 C 中的文本文件读取整数时的错误

转载 作者:行者123 更新时间:2023-12-01 12:49:49 25 4
gpt4 key购买 nike

我有点绝望,因为我浪费了最后 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),我需要管理相同类型的操作系统错误。 任何帮助将不胜感激!

最佳答案

查看fscanf的返回值

if (fscanf(file,"%d",&temp) != 1) break;

如果找不到数字就跳出循环。 fscanf 返回成功转换的次数,应该用于错误检查和处理。

关于c - 从 C 中的文本文件读取整数时的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13352544/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com