我正在使用fscanf()函数从文本文件中逐行读取数据。它运行正常但突然间我不知道我犯了什么错误,现在函数返回负值。 下面是我的代码片段:
FILE *fp;
char ip[16];
int port;
fp = fopen("ClientInformation.txt", "r");
int size = -1;
while (!feof(fp))
{
fgetc(fp);
size++;
}
char buff[1000];
sprintf(buff,"%i",size);
MessageBox(NULL,
buff,
"Size",
MB_ICONINFORMATION);
if(size > 0)
{
while (fscanf(fp, " %s %d", ip, &port) > 0)
{
MessageBox(NULL,"fscanf() Successful","SUCCESS!", MB_ICONINFORMATION);
}
}
答案 0 :(得分:3)
您可能想要添加此调用
rewind(fp);
之前
while (fscanf(fp, " %s %d", ip, &port) > 0)
{
还应始终检查系统调用的结果。在您的情况下,主要是fopen()
是否确实返回了与NULL
不同的内容。
另外,while(!feof(fp))
构造很可能并不总是按预期行事(Why is “while ( !feof (file) )” always wrong?)。你最好在下面的评论中采用 WhozCraig 提出的方式。
答案 1 :(得分:2)
您无需提前确定文件大小。只需fscanf()
文件并检查返回值:
int ret;
while ((ret = fscanf(fp, " %s %d", ip, &port)) == 2) {
MessageBox(NULL,"fscanf() Successful","SUCCESS!", MB_ICONINFORMATION);
}
switch (ret) {
case EOF:
/* EOF or error, check errno */
break;
case 0:
case 1:
/* bogus file contents */
break;
default:
fprintf(stderr, "Philip says this cannot happen, but it did.\n");
exit(EXIT_FAILURE);
}
另外:始终检查函数调用的返回值。