簡體   English   中英

在 while 循環中使用 fscanf() 讀取文本文件

[英]Read a text file using fscanf() in a while loop

所以我試圖在while循環中使用 fscanf() 從輸入文本文件中讀取成對的數字。 文本文件將類似於以下內容:

(2, 50) (4, 30) (9, 30) (10, 400) (-5, -40)
(7, 20) (19, 200) (20, 50) (-18, -200) (-2, 29)

我的代碼是:

int main()
{
    FILE *fp;
    fp = fopen("File", "r");
    if (fp == NULL)
    {
        perror("Invalid input!");
        return 0;
    }
    else
    {
        int key, value;
        int check;
        while (fscanf(fp, "(%d,%d)", &key, &value) != EOF)
        {
            printf("(%d, %d)\n", key, value);
            check = fscanf(fp, "(%d,%d)", &key, &value);
            printf("%d", check);
        }
    }
    return 0;
}

但是 output 不是遍歷文件中的每一對,而是無限地打印 (2,50)。 有人可以幫我修復我的代碼嗎?

我也希望“檢查”至少返回 2,因為它成功地有兩個值,即 2 和 50。但它總是返回 0。

之后您必須閱讀空間,這可以通過以下方式完成:

fscanf(fp, "(%d,%d)%*c", &key, &value) 這里%*c正在讀取一個字符並將其丟棄。

或通過

fscanf(fp, "(%d,%d) ", &key, &value) 在這里,您明確地閱讀了空間。

筆記:

我不確定為什么您只在之后才打印支票,您實際上是在跳過一對,請注意這一點。

允許輸入中的空格

"(%d,%d)"不讀取括號之間的空格: ) ( 。允許在'(' , ')' , ','之前使用空格。 "%d"已經允許前導空格.

// while (fscanf(fp, "(%d,%d)", &key, &value) != EOF)
while (fscanf(fp, " (%d ,%d )", &key, &value) != EOF)
//                 ^   ^   ^ 

與目標進行比較,而不是失敗的目標之一

fscanf(fp, " (%d,%d )"...返回 2,1,0,EOF。只有當返回值為 2 時,循環才會繼續。使用!= EOF時,返回值為 2 時循環繼續, 1 或 0。

// while (fscanf(fp, " (%d ,%d )", &key, &value) != EOF)
while (fscanf(fp, " (%d ,%d )", &key, &value) == 2)

暫無
暫無

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

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