gpt4 book ai didi

C 从文件中读取字符串和 int

转载 作者:行者123 更新时间:2023-11-30 19:09:09 24 4
gpt4 key购买 nike

简而言之,程序应该从格式为“int string”的文件中读取,例如“5 Liverpool (new line)2 Manchester”并打印屏幕上的内容。问题发生在第 4 次(共 5 次)迭代时,程序崩溃了。我认为更好的方法包括使用诸如 gets 之类的函数,但是,这是 C 语言的入门级类(class),所以我很确定类(class)中没有涵盖这些函数。在你研究它之前,我已经在另一个问题上使用了与 fscanf 相同的原理,并且它工作完美(但文件格式为“string int”)。任何帮助将非常感激。谢谢。

#include<stdio.h>
#include<stdlib.h>
int main()
{
FILE *dat;
FILE *dat1;
dat = fopen("ekipe.txt", "r");
int ek[5], bd[5], i = 0, t1, t2, g1, g2;
char im[5][10];
for(i = 0; i < 5; i++)
bd[i] = 0;
if(dat)
while(!feof(dat))
{
fscanf(dat, "%d %s\n", &ek[i], &im[i]);
printf("%d %s\n", ek[i], im[i]);
i++;
}

fclose(dat);
system("PAUSE");
return 0;
}

最佳答案

for(i = 0; i < 5; i++)
bd[i] = 0;

这里,变量i取自05

循环结束后,仍然是5

所以,你的下一个循环:

while(!feof(dat))
{
fscanf(dat, "%d %s\n", &ek[i], &im[i]);
printf("%d %s\n", ek[i], im[i]);
i++;
}

始终超出数组范围。

这“似乎有效”四次是一个偶然的问题,可能与您在函数中声明的变量有关(在堆栈中腾出空间并防止操作系统检测到内存访问冲突,或者至少可以防止其他较低级别的构造在内存中被覆盖,从而导致进一步的痛苦)。但是,从根本上讲,当您现在将 i5 带到 10 时,此循环中的每个访问都会被破坏。

您需要重置i

如果您使用调试器单步执行程序,您会注意到这一点。

此外,您的输入长度为 11 个字符,包括终止空字节,但您只留下了 10 个字符的空间 (char im[5][10])。

最后,不要运行这样的 I/O 循环。在执行任何 I/O 之前检查 EOF 是没有意义的。相反,检查 fscanf 的返回值是否成功。

关于C 从文件中读取字符串和 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43701416/

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