2

我正在使用 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);
    }
}
4

2 回答 2

3

您可能想添加此通话

rewind(fp);

就在之前

while (fscanf(fp, " %s %d", ip, &port) > 0)
{

还应始终检查系统调用的结果。在您的情况下,主要是是否fopen()确实返回了不同于NULL.

此外,该while(!feof(fp))构造很可能不会总是按预期运行(为什么“while (!feof (file))”总是错误的?)。您最好按照WhozCraig在下面的评论中提出的方式进行。

于 2013-04-02T06:45:44.933 回答
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);
}

另外:始终检查函数调用的返回值。

于 2013-04-02T06:57:20.177 回答