簡體   English   中英

我對從txt文件中讀取非常困惑

[英]i am very confused about reading from txt file

對不起,我是新來的ci想從txt文件中讀取這些數據。

A 7
c 5
y 6
U 9
j 4
Z 3
z 5
0

這是我的代碼

 while(feof(input)==0){
    char c;
    int num;
    fscanf(input,"%c%d",&c,&num);
    printf("%c:%d\n",c,num);
}

但結果是控制台與txt文件的結果不一樣

打開文件完成

A:7

:7
c:5

:5
y:6

:6
U:9

:9
j:4

:4
Z:3

:3
z:5

:0

我的代碼是正確的,不是嗎?

 fscanf(input,"%c%d",&c,&num); 

我的代碼是正確的,不是嗎

你不是在吃換行符。 改為:

fscanf(input,"%c%d ",&c,&num);
                  ^

作為解釋,每一行以一個字符'\\n'結尾。 如果你對它沒有做任何事情, %c會嘗試閱讀它,你會得到令人困惑的結果。 一個便宜的技巧是在fscanf添加一個空格,這使得它在%c%d對之后吃掉所有空白。

編輯

根據Peter Kowalski的評論:

不應該是fscanf(輸入,“%c%d”,&c,&num); 我在%c和%d之間放了額外的空格

這個問題問得好。 事情是%d忽略領先空間的說明者之一 無論流中有多少空白, scanf都會吃掉並丟棄它們。 因此%d之前的空白是隱含的。

你還需要吃新線。

fscanf(input,"%c%d\n",&c,&num);

快速修復:只需調整printf()語句即可

 printf("%c:%d\n",c,num);

 printf("%c %d",c,num);

還有其他方法,比如調整當前的scanf() ,這樣可以更好地解決源代碼問題(您正在閱讀並保留換行符)。

或者,您可以只讀取整行,而無需將其解析為組件並將其打印出來。

暫無
暫無

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

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