提问人:Huỳnh Lương Phương Trúc 提问时间:4/14/2018 更新时间:4/14/2018 访问量:303
无法停止使用 !feof() 读取 Unicode 文件
Can't stop reading Unicode file with !feof()
问:
我不知道为什么 while 循环无法停止。它无法将 c 与 Delim 进行比较,也无法通过达到 eof 而停止。
wchar_t* Getline(const wchar_t* Filename, const wchar_t Delim){
FILE* f = _wfopen(Filename, L"r, ccs=UTF-8");
wchar_t* info = NULL;
wchar_t* temp = NULL;
int count = 1;
int i = 0;
wchar_t c;
c = fgetwc(f);
while (c != Delim || !feof(f))
{
count++;
temp = (wchar_t*)realloc(info, count * sizeof(wchar_t));
if (temp)
{
info = temp;
info[i] = c;
i++;
}
else
{
free(info);
wprintf(L"Failed to read\n");
}
c = fgetwc(f);
}
info[i] = '\0';
fclose(f);
return info;
}
读取文件中的所有字符后。它似乎没有停止。甚至 c 也与 Delim 相同。而 !feof(f) 也没有起作用。我尝试了 c != WEOF,但也失败了
我以为问题出在我阅读的文件中,但不是。我更改了另一个文件,但遇到了同样的问题。 谢谢你帮助我!
答:
1赞
vogomatix
4/14/2018
#1
您希望在没有 Delim 字符且它不是文件末尾的情况下循环,因此请将 替换为||
&&
while (!feof(f) && c != Delim)
编辑:顺序也已更改以响应评论
评论
1赞
Paul Ogilvie
4/14/2018
..您必须切换测试,因为如果为 true,则定义不明确。c
eof()
0赞
Huỳnh Lương Phương Trúc
4/14/2018
我傻了。问题解决了。谢谢
0赞
vogomatix
4/14/2018
我们偶尔都会做傻事。P.S. 请接受答案
上一个:PHP码计数额外数字
下一个:检查输入流在 C 中是否为空
评论
FILE* f = _wfopen(Filename, L"r, ccs=UTF-8");
f
malloc
calloc
realloc
void*
perror( L"realloc failed" ); free( info ); exit( EXIT_FAILURE )' as the code in the
realloc()
wint_t
wchar_t
while ( (c = fgetwc(f)) !=WEOF && (wchar_t)c != Delim )
fgetwc()