簡體   English   中英

fscanf()返回負值

[英]fscanf() returns negative value

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

您可能想添加此通話

rewind(fp);

就在之前

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

同樣應該經常檢查系統調用的結果。 在您的情況下,主要是fopen()是否確實返回了不同於NULL

另外, while(!feof(fp))構造很可能不會總是表現出預期的效果( 為什么“ while(!feof(file))”總是錯誤的? )。 您最好采用WhozCraig在下面的評論中建議的方法。

您無需預先確定文件大小。 只需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);
}

另外:始終檢查函數調用的返回值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM