標準IO輸入流API

在輸入輸出流概念當中有一個非常重要的概念:緩衝區

讀和寫是站在應用程序的角度來說的。輸入的數據會先滯留到緩存區,有輸出命令時回去緩存區拿數據。

1、cin cout

能根據類型 獲取數據/輸入數據

注:cin當遇到結束符(Space、Tab、Enter)時,會停止接受輸入,結束符不會保存到數據中

int main()
{
	char mChar[10];
	int mInt;
	long mLong;
	double mDouble;
	float mFloat;

	cout << "輸入一個字符數組:";
	cin >> mChar;
	cout << "輸入一個int類型數據:";
	cin >> mInt;
	cout << "輸入一個long類型數據:";
	cin >> mLong;
	cout << "輸入一個double類型數據:";
	cin >> mDouble;
	cout << "輸出一個float類型數據:";
	cin >> mFloat;

	cout << "字符數組:" << mChar << endl;
	cout << "int:" << mInt << endl;
	cout << "long:" << mLong << endl;
	cout << "double:" << mDouble << endl;
	cout << "float:" << mFloat << endl;

	cout << "Hello world!" << endl;
	system("pause");
	return 0;
}

2、cin.get()

無參、一個參數、多個參數,不能接受空格,輸入結束條件是Enter鍵值

int main()
{
	char c;
	while ((c =cin.get()) != EOF)
	{
		cout << c << endl;
	}
	cout << "結束" << endl;
	system("pause");
	return 0;
}

//注:這裏會出現阻塞,因爲get()是一個字符一個字符讀取的,但是結束命令是EOF,當沒有接收到EOF命令時會一直等待讀取造成阻塞。
//ctr+z  會產生一個 EOF(-1)

int main()
{
	char a, b, c;
	cin.get(a);
	cin.get(b);
	cin.get(c);

	cout << a << b << c << endl;
	cout << "鏈式編程" << endl;
	cin.get(a).get(b).get(c);
	cout << a << b << c << endl;
	system("pause");
	return 0;
}

3、cin.getline()可以接受空格

int main()
{
	char buf1[1024];
	char buf2[1024];
	cout << "輸入帶空格的字符串:";
	cin.getline(buf1, 1024);
	cout << buf1 << endl;

	cout << "試着輸入代空格的字符串";
	cin >> buf2;
	cout << buf2 << endl;

	system("pause");
	return 0;
}

buf1和buf2的區別在於可不可以輸出代空格的字符串,buf2中流提取操作符遇見空格停止提取輸入流

4、cin.ignore() 跳過輸入流中n個字符

int main()
{
	char buf1[256];
	char buf2[256];
	cout << "假如輸入字符串aa  bbccdd:";
	cin >> buf1;
	cin.ignore(2);//忽略緩衝區中的兩個空格"\n"
	cin >> buf2;
	//cin.getline(buf2, 256);
	cout << "buf1:" << buf1 << "buf2:" << buf2 << endl;
	system("pause");
	return 0;
}

5、cin.peek()查看輸入流中的下一個字符

int main()
{
	int intchar;
	char buf1[256];
	char buf2[256];
	cout << "假如輸入字符串aa  bbccdd:";
	cin >> buf1;
	cin.ignore(2);//忽略緩衝區中的兩個空格"\n"
	int mInt = cin.peek();
	cout << "緩衝區若有數據,返回第一個數據的asc碼:"<<mInt << endl;
	//緩衝區沒有數據,就等待; 緩衝區如果有數據直接從緩衝區中拿走數據
	cin.getline(buf2, 256);
	cout << "buf1:" << buf1 << "buf2:" << buf2 << endl;

	intchar = cin.peek(); //沒有緩衝區 默認是阻塞模式 
	cout << "緩衝區若有數據,返回第一個數據的asc碼:" << intchar << endl;
	system("pause");
	return 0;
}

6、cin.putback ()

putback是將字符放回到輸入流中,一般輸入流中字符的長度是不變的。 putback會把cin剛剛“喫”進來的字符再“吐”回去,也就是說,下次cin的時候,剛剛得到的那個字符還會被輸入。

#pragma warning(disable : 4996)
#include <iostream>
#include<string>
using namespace std;

//案例:輸入的整數和字符串分開處理
int main()
{
	cout << "Please, enter a number or a word: ";
	char c = cin.get();

	if ((c >= '0') && (c <= '9')) //輸入的整數和字符串 分開處理
	{
		int n; //整數不可能 中間有空格 使用cin >>n
		cin.putback(c);
		cin >> n;
		cout << "You entered a number: " << n << '\n';
	}
	else
	{
		string str;
		cin.putback(c);
		getline(cin,str) //字符串 中間可能有空格 使用 cin.getline();
		cout << "You entered a word: " << str << '\n';
	}	
	system("pause");
	return 0;
}

 

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