王也臺詞輿情優(yōu)化公司
前面部分的示例程序幾乎沒有提供與用戶的交互(如果有的話)。他們只是在屏幕上打印簡單的值,但標(biāo)準(zhǔn)庫提供了許多其他方式通過其輸入/輸出功能與用戶交互。本節(jié)將簡要介紹一些最有用的方法。
cin | 標(biāo)準(zhǔn)輸入 |
cout | 標(biāo)準(zhǔn)輸出 |
cerr | 標(biāo)準(zhǔn)錯(cuò)誤(輸出) |
clog | 標(biāo)準(zhǔn)日志記錄(輸出) |
我們將只看到更詳細(xì)的內(nèi)容和(標(biāo)準(zhǔn)輸出和輸入流); 并且也是輸出流,因此它們本質(zhì)上的工作方式類似于 ,唯一的區(qū)別是它們標(biāo)識用于特定目的的流:錯(cuò)誤消息和日志記錄;在許多情況下,在大多數(shù)環(huán)境設(shè)置中,它們實(shí)際上做完全相同的事情:它們在屏幕上打印,盡管它們也可以單獨(dú)重定向。
1.輸出:
在大多數(shù)程序環(huán)境中,默認(rèn)情況下,標(biāo)準(zhǔn)輸出是屏幕,對于格式化的輸出操作,與插入運(yùn)算符一起使用,插入運(yùn)算符寫為(即兩個(gè)“小于”號)。
cout << "Output sentence"; // 在屏幕上打印輸出句子
cout << 120; // 在屏幕上打印數(shù)字120
cout << x; // 在屏幕上打印x的值
運(yùn)算符將它后面的數(shù)據(jù)插入到它前面的流中。
雙引號是造成差異的原因;當(dāng)文本被封閉在它們之間時(shí),文本按字面打印;如果不是,則文本被解釋為變量的標(biāo)識符,并改為打印其值。例:
cout << "Hello"; // 打印 Hello
cout << Hello; // 輸出變量Hello的內(nèi)容
多個(gè)插入操作 (<<) 可以鏈接在單個(gè)語句中:
cout << "This " << " is a " << "single C++ statement";
要插入換行符,應(yīng)在換行符的確切位置插入換行符。在C++中,換行符可以指定為(即,反斜杠字符后跟小寫)。例如:
cout << "First sentence.\n";
cout << "Second sentence.\nThird sentence.";
操縱器產(chǎn)生換行符,就像插入一樣;但它還有一個(gè)額外的行為:流的緩沖區(qū)(如果有)被刷新,這意味著請求將輸出物理寫入設(shè)備(如果尚未寫入)。這主要影響完全緩沖的流,并且(通常)不是完全緩沖的流。
2.輸入:
在大多數(shù)程序環(huán)境中,默認(rèn)情況下,標(biāo)準(zhǔn)輸入是鍵盤,為訪問它而定義的C++流對象是 。
對于格式化輸入操作,與提取運(yùn)算符一起使用,提取運(yùn)算符寫為(即兩個(gè)“大于”符號)。然后,此運(yùn)算符后跟存儲提取數(shù)據(jù)的變量。例如:
int age;
cin >> age;
提取操作使用運(yùn)算符后面的變量類型來確定它如何解釋從輸入讀取的字符;如果是整數(shù),則預(yù)期的格式是一系列數(shù)字,如果是字符串,則為字符序列等。
// i/o example#include <iostream>
using namespace std;int main ()
{int i;cout << "Please enter an integer value: ";cin >> i;cout << "The value you entered is " << i;cout << " and its double is " << i*2 << ".\n";return 0;
}
從中提取似乎使從標(biāo)準(zhǔn)輸入中獲取輸入的任務(wù)變得非常簡單明了。但是這種方法也有很大的缺點(diǎn)。在上面的示例中,如果用戶輸入了無法解釋為整數(shù)的其他內(nèi)容,會發(fā)生什么情況?好吧,在這種情況下,提取操作將失敗。默認(rèn)情況下,這允許程序繼續(xù)而不設(shè)置變量值,如果以后使用該值,則會產(chǎn)生不確定的結(jié)果。
也可以鏈接提取以在單個(gè)語句中請求多個(gè)基準(zhǔn):
cin >> a >> b;
相當(dāng)于:
cin >> a;
cin >> b;
在這兩種情況下,用戶都需要引入兩個(gè)值,一個(gè)用于變量,另一個(gè)用于變量。
3.CIN和字符串:
提取運(yùn)算符可用于獲取字符串,其方式與基本數(shù)據(jù)類型相同:
string mystring;
cin >> mystring;
要從 獲取整行,存在一個(gè)名為 的函數(shù),它將流作為第一個(gè)參數(shù),將字符串變量作為第二個(gè)參數(shù)。例如:
// cin with strings
#include <iostream>
#include <string>
using namespace std;int main ()
{string mystr;cout << "What's your name? ";getline (cin, mystr);cout << "Hello " << mystr << ".\n";cout << "What is your favorite team? ";getline (cin, mystr);cout << "I like " << mystr << " too!\n";return 0;
}
在兩次調(diào)用 中,我們都使用相同的字符串標(biāo)識符。程序在第二次調(diào)用中所做的只是將以前的內(nèi)容替換為引入的新內(nèi)容。
4.字符串流:
標(biāo)準(zhǔn)標(biāo)頭定義了一個(gè)稱為的類型,該類型允許將字符串視為流,從而允許以與對 和 執(zhí)行相同的方式從字符串中提取或插入字符串或插入操作。
string mystr ("1204");
int myint;
stringstream(mystr) >> myint;
這將聲明 與初始化為 的值 和 類型的變量。然后,第三行使用此變量從字符串構(gòu)造中提取。這段代碼將數(shù)值存儲在名為 的變量中。
// stringstreams
#include <iostream>
#include <string>
#include <sstream>
using namespace std;int main ()
{string mystr;float price=0;int quantity=0;cout << "Enter price: ";getline (cin,mystr);stringstream(mystr) >> price;cout << "Enter quantity: ";getline (cin,mystr);stringstream(mystr) >> quantity;cout << "Total price: " << price*quantity << endl;return 0;
}
在這個(gè)例子中,我們間接地從標(biāo)準(zhǔn)輸入中獲取數(shù)值:我們不是直接從中提取數(shù)值,而是從中獲取字符串對象中的行,然后將該字符串中的值提取到變量和中。一旦這些是數(shù)值,就可以對它們執(zhí)行算術(shù)運(yùn)算,例如將它們相乘以獲得總價(jià)。
@Neng