【发布时间】:2021-02-26 13:13:45
【问题描述】:
我正在尝试读取一个包含整数的 .txt 文件并将其存储在结构数组中。我可以使用以下代码读取具有附加字符数据的第一个文件,如下所示:
fp = fopen("test.txt", "r");
while(fscanf(fp, "%s %d %d %d %d", a[i].letter , &a[i].hor, &a[i].width , &a[i].ver, &a[i].height)==5 && i<LineCount){
if(ferror(fp) || feof(fp)) break;
i++;
}
- A 10 213 20 20
- B 100 10 150 15
- ....
但是,在那之后,当我尝试使用以下代码读取另一个具有以下格式的文件时:
file1 = fopen("beg.txt", "r");
printf("HELLOOOO");
while(fscanf(file1, "%d %d %d %d", &b[i].id, &b[i].hor, &b[i].ver, &b[i].time)==4 && i<LineCount){
printf("HEYY");
if(ferror(file1) || feof(file1)) break;
i++;
}
格式:
- 1 10 100 100
- 2 100 10 100
- 3 172 172 18
- ....
fopen 不返回 NULL,所以它打开了,我可以看到“HELLOOOO”,但它永远不会进入“HEYY”并且程序退出,不是立即退出,而是在短时间内退出。我仔细检查了所有内容,文件和结构格式正确,我正在执行与第一个完全相同的操作,但它不起作用。
如果您知道我做错了什么或可能出现的问题,我将不胜感激您的 cmets。
【问题讨论】:
-
读取第二个文件之前
i的值是多少?老实说,从我读到的内容来看,您还没有尝试所有方法。例如,您的fscanf()是否失败?请多花点时间,这是一个非常简单的程序,您应该可以使用一些打印语句或在调试器中进行调试。 -
感谢您的评论。
i为 0。我实际上在每一步都尝试过打印,但我无法检测到问题的根源。我刚刚想通了一些事情。如果我不阅读第一个文件,我可以阅读第二个文件。另外,如果我在 main 中声明了一个变量,并在读取之前为其分配了一个值。我什至无法读取一个文件。因此,如果我声明的变量多于当前变量,我将无法读取文件,或者如果读取了文件,我将无法读取另一个文件。我对C没有那么丰富的经验,所以我对这些东西一无所知。这是内存相关问题还是硬件问题? -
也许
i>=LineCount? -
请创建仍然存在此问题的最小完整程序并将其与文件的前几行一起发布。目前你只展示了几件,所以猜测可能是什么问题。你为什么会为这样的程序考虑硬件或内存问题?你是在内存非常有限的有缺陷的微控制器板上运行它吗?
-
好的,我会以这种方式重新发布问题。我认为因为我在函数中读取文件并且它可以工作,所以我在该函数之前在 main() 中声明了任何变量并且它停止工作。任何变量,例如
int u = 0
标签: c file scanf fopen dev-c++