Windows文件結束符解釋(C++)

文件結束符

windows系統文件結束符:Ctrl + Z + Enter;
UNIX系統文件結束符:Ctrl + D + Enter;

解釋

結合我上一篇博客(C++用while語句讀取數量不定的輸入數據的另一種寫法:使用文件結束符)的例子來給大家解釋。
代碼:

#include<iostream>
using namespace std;

int main() {
	int value = 0, sum = 0;
	cout << "請輸入數據:";
	while (cin >> value) {
		sum += value;
	}
	cout << "The sum is :" << sum<<endl;
	system("pause");
	return 0;
}

運行結果:
在這裏插入圖片描述
看到上述運行結果,相信有些人會有這樣子的疑惑,不是說輸入無效的輸入,也會使istream對象的條件就會變爲無效。無效的istream對象會使條件變爲假嗎?你這裏都輸入^Z了,這肯定是無效的輸入阿,爲什麼這個無效的輸入會是文件結束符呢?我輸入別的無效輸入也能結束阿。

我們通過另外一段代碼來給大家解釋一下,爲什麼Ctrl + Z會是文件結束符。
代碼:

#include<iostream>
#include<string>
using namespace std;

int main() {
	string str = "hello world!";
	cout << "請輸入字符串:";
	cin >> str;
	cout << str << endl;
	system("pause");
	return 0;
}

此處先給字符串str賦了初值:hello world!,然後請求用戶輸入一個值,而該值會改變str的值,最終輸出str。
那麼我們來試幾個運行情況:
輸入Ctrl + Q會怎麼樣:
運行結果無法顯示
會發現,最終把^Q賦值給了str,而該字符串也不能正確的顯示出來。
再試一組看看:
在這裏插入圖片描述
運算結果仍然無法顯示,那我們試試看文件結束符:Ctrl + Z;
在這裏插入圖片描述
此時發現,程序輸出了hello world!,這是因爲^Z並不是字符串,而是文件結束符,輸入流istream讀取到了文件結束符,會終止這次輸入,使istream對象的狀態變爲無效,此處的istream對象指的就是cin。所以str並沒有被賦予一個新的值,仍然保持舊值:hello world!,所以最終的輸出結果爲hello world!。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章