我用C 輸入流讀取檔案,為什麼最後一行多讀了一次,檔案內容如下

2022-05-22 09:25:23 字數 3057 閱讀 3180

1樓:子瓜犬蟲之示單

一邊讀取一邊輸出這個結構不太好吧,每行讀取完成後再輸出則可以在輸出前加入一個判斷:

if (infile.fail())

2樓:

因為你是先判斷,然後讀取資料的。

eof()這個函式是在讀取失敗的時候才為true的,所以讀到最後一行的時候,eof()的值還是0,於是又再次進入迴圈裡了,一執行這句infile>>na;時,讀取失敗,eof()為1,由於讀取失敗,na裡的數值就沒有變,以下的那些變數也是這個道理,所以就多輸出一行了。

你可以用do while 語句。最好之前能判斷檔案是否為空。

3樓:風吹魂

用記事本開啟儲存上面資料的檔案, 按下「↓」方向鍵, 將游標移動到最下面, 你的游標肯定是停留在tjh f這一行的下一行。 這就是出現你這個問題的原因, 按一下退格鍵, 回退到上一行, 儲存檔案, 重新執行程式, 就沒問題了。

簡單的說, 就是你的檔案中有10行, 最後多了一個空行, 所以出現上面的問題。

4樓:匿名使用者

file 多一行空的?

while 是先判斷是否為空 如果你多一行空白 他還是會執行阿 ==

c++關於檔案輸入流read的讀取問題。

5樓:

把ofile.close();移到ifstream ifile("d:\\data.

dat",ios::binary);前就ok!因為寫完檔案後不關閉的話,檔案指標位置指在最後,後面讀開啟後接著這個位置向後讀取資料了,後面並沒有寫入什麼。

6樓:匿名使用者

在開啟讀檔案物件之前先關閉寫檔案物件。

7樓:秒懂百科

read():把引數所指的檔案傳送位元組到指標所指的記憶體中

c++中cin.get()的具體用法

8樓:撒颯颯

cin.get()是保留回車在輸入流佇列中的,

而cin是丟棄回車的。

ch=cin.get();是第一次輸入,因為是剛開始,所以沒有回車保留在輸入流的佇列中。這時你輸入一個字元,然後回車。

get()收到回車或空格或製表符就停止輸入了、此時,輸入流佇列中留下一個回車。

num=cin.get();這是第二次輸入。因為第一次用了get,所以輸入流佇列中有個回車。則get()接受這個回車。又因為get()收到回車或空格或製表符就停止輸入。

所以這一次的輸入就是一個回車,

可以num=cin.get();之前把回車給弄了。你應該想到了。

就用cin.get(),把第一次輸入留下的回車給弄走.則num=cin.

get()就可以正常了。

擴充套件資料

cin執行機制解析:

c++的cin究竟確切含義是什麼呢?很多初學者第一次接觸cin時,當程式執行到cin指令時,程式自動會中斷,然後等待使用者從鍵盤中輸入資訊。只有當使用者輸入完成,按下回車之後,程式才會繼續往下執行。

這個過程很容易讓初學者產生誤會,認為cin就是呼叫電腦鍵盤進行輸入的指令。也是因為這個錯誤的認知,會引起一系列的誤會。例如上文中圖4,雖然程式中有三次cin,但其實我們只要從鍵盤裡輸入一次,就可以完成全部輸入工作,不一定非得分開三次從鍵盤輸入。

cin本質和其它c++變數一樣,它也是一個變數名,它被定義在iostream檔案裡。因此,我們要使用cin功能時,就必須匯入標頭檔案。在c++中,變數名通常實質是代表著一段記憶體區域,

同樣的道理,cin這個變數其實也是對映到一段記憶體區域裡面,我們可以認為cin實際上代表著一段記憶體緩衝區,這段緩衝區的作用是,用於快取從鍵盤輸入的資訊。

9樓:

用法有以下幾種:

1、cin.get()

用法1: cin.get(字元變數名)可以用來接收字元

#include

using namespace std;

main ()

{ char ch;

ch=cin.get();               //或者cin.get(ch);

cout<輸入:jljkljkl

輸出:j

用法2:cin.get(字元陣列名,接收字元數目)用來接收一行字串,可以接收空格

#include

using namespace std;

main ()

{ char a[20];

cin.get(a,20);

cout<輸入:jkl jkl jkl

輸出:jkl jkl jkl

輸入:abcdeabcdeabcdeabcdeabcde (輸入25個字元)

輸出:abcdeabcdeabcdeabcd              (接收19個字元+1個'\0')

用法3:cin.get(無引數)沒有引數主要是用於捨棄輸入流中的不需要的字元,或者捨棄回車,彌補cin.get(字元陣列名,接收字元數目)的不足。

10樓:匿名使用者

你執行時想輸入a,會按a 回車,cin.get()會把回車('\n')當作字元(num)讀了,然後``````

char ch;

cin>>ch;

char num;

cin>>num;

這樣(>>)會跳過回車符或者空格

11樓:無極之道我心延

cin不是變數名,什麼玩意兒

12樓:焉從壘

to,together

dev-c++中編寫了一段c程式,其中設定了用檔案進行輸入輸出。

13樓:匿名使用者

-物聯網校企聯盟技術部

求教關於c++檔案輸入流結束判斷

14樓:匿名使用者

讀寫一行用getline(istream,string),檔案讀取判斷結束的方法一般如下:

while(true)

我C盤所有檔案總共40G為什麼屬性裡顯示佔用80G

你將你的檔案大小乘以2就是已經佔用的大小了吧。也就是說,你的c盤裡面可能有一個備份的c盤存在。有兩種可能,一個是您有裝還原精靈。另一種是您開了系統還原 這個建議您可以將其關掉,佔硬碟又沒有什麼作用。關掉系統還原的方法 右擊 我的電腦 屬性,看 系統還原 選項卡下面的 在所有驅動器上關閉系統還原 將其...

c語言從大到小排序,為什麼我寫的程式最後執行輸不出結果

用冒泡法或快速排序法實現,這種if語句判斷容易出錯。c語言 輸入10個數,按由大到小順序排列,下面的程式有問題嗎?什麼問題?為什麼?程式沒問題,bai很標準的冒泡排du 序法!zhi只缺少兩個標頭檔案包含語句dao 你在main函式的前專面加上以下 屬兩句指令 include printf和scan...

為什麼我用搜狗輸入法打字不能選擇候選字了?包括鍵盤的設定欄那排都按下去沒反應,求解!謝謝了

進入應用管理清除一下搜狗輸入法的資料試試 你測試下你的螢幕是不是有失靈的地方 搜狗輸入法打字的時候為什麼候選框沒有候選文字了 有可能是電腦中病毒,或是那個軟體壞了,所以導致資料錯誤,好好檢視一下吧 不太明白是怎麼回事,如果還是沒有解決的話,建議你到搜狗官方論壇上去發帖。是不是按空格才能出備選詞啊?你...