fgets只读取文件的第一行
fgets only read the first line of file
我正试图从.cpp文件中读取一个文件。我使用的是C库,所以不要混淆这一点。
所以这个问题和我在标题中所说的一样清楚。fgets方法可以读取第一行,但当涉及到第二行时,它既不能读取第二行,也不能读取文件的其余部分(因为它在出现问题时退出)。
你可以找到代码的相关部分:
void read_input()
{
int i = 0, N = 5;
char str[STR_SIZE], line[STR_SIZE];
FILE *fp;
fp = fopen("out", "r");
if (!fp)
{
fprintf(stderr, "error: file could not be openedn");
exit(1);
}
for (i = 0; i<2; i++)
{
if (fgets(str, STR_SIZE, fp) == NULL)
{
fprintf(stderr, "error: failed at file readingn");
exit(1);
}
if (feof(fp))
{
fprintf(stderr, "error: not enough lines in filen");
exit(1);
}
if ((sscanf(str, "%s", line) != 1) )
{
fprintf(stderr, "error: invalid file formatn");
exit(1);
}
printf("%dt%sn", i, line);
fclose(fp);
}
}
我相信问题已经存在,因为您在循环中使用了fclose(fp);
。因此,在第一次迭代之后,fp
被传递给fclose()
,并且在任何进一步的迭代中,对于fp
的任何重复使用,都将调用未定义的行为,因为fp
不再有效。
解决方案:将fclose(fp);
移出循环。
您正在关闭循环中的文件!将fclose
函数置于循环之外。
for (i = 0; i<2; i++)
{
....
printf("%dt%sn", i, line);
fclose(fp); // <-- here, move out of the loop.
}
相关文章:
- 用c++从输入文件中读取另一行
- 读取文件的最后一行并输入到链接列表时出错
- 如何从一行中读取特定数量的字符?(C++)
- 读取最后一行代码算法 - c++ 时出现问题
- 而(!inputfile.eof())只读取第一行?
- 逐字读取文本文件中的每一行并转换为 int(无限循环或崩溃?
- 需要从存档中读取一行文本.txt直到找到"hhh",然后转到下一行
- 从文本文件中读取一行并将其存储在 C++ 中的 2D 矢量中
- 从文件中的一行读取特定数据-C++
- 使用std::getline()读取一行
- 从文本文件中的每一行读取数字,并计算数字重复的次数
- 从文件读取并在一行中写入 cout
- 将 ifstream 文件和每一行读取到数组中
- 从文件 c++ 中的下一行读取
- 在同一行读取具有多个类型的文件
- 写入终端并从同一行读取
- 如何在c++中从最后一行读取文本文件
- 逐行读取数组,每一行读取3个值
- 在同一行读取字符串和整数
- 从一行读取hh:mm格式的时间