1. 程式人生 > >cin scanf cin.getline() cin.get() gets() getchar() get.line() 字串基礎簡單輸入。

cin scanf cin.getline() cin.get() gets() getchar() get.line() 字串基礎簡單輸入。

1. cin 和 scanf :

只能接收一字串遇到,空格,Tab,回車都結束

#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
	char str[20];
	cin >> str;
	cout << str;
	return 0;
}
#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
	char str[20];
	scanf("%s" ,&str);
	printf("%s",str);
	return 0;
}

輸入:    Hello world!

輸出: Hello

2. cin.get()

用法一: 只用來接收一個字元 可以接收空格和Tab 但是不接受回車

#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
	char str;
	cin.get(str); //cin.get()
	cout << str << endl;
	return 0;
}

輸入    Hello world!

輸出    H

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

這個裡面我也有個疑問,某位大佬看到是否能解惑呢

#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
	char str[20];
	cin.get(str,20);
	cout << str << endl;
	return 0;
}

輸入: Hello world!

輸出 :Hello world!

輸入: qwerqwerqwerqwerqwerqwer   輸入大於 20 個時

輸出:qewrqewrqwerqwerqwe +'\0'   只能讀取 19 個 最後一個存為‘\0’

#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
	char str[20];
	cin.get(str,5);
	cout << str << endl;
	return 0;
}

傳遞的引數小於陣列的長度,是可以的這時是(4個字元+'\0');

傳遞的引數大於陣列的長度時,但是應用就會出問題(我試了一下,是可以輸入輸出的,但是計算機跑的速度明顯下降)原理我也不知道所以大家儘量不要這樣用 可以讀取 (49個字元+'\0')但是速度變慢了

#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
	char str[20];
	cin.get(str,50);
	cout << str << endl;
	return 0;
}

用法三:cin.get(無引數),和getchar()都可以 用於捨棄輸入流中的不需要的字元,或者捨棄回車,彌補cin.get(字元陣列名,接收字元數目)的不足.

還有一個就是 可以輸出二維陣列

#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
	char str[2][5];
	
	for(int i = 0; i < 2; i++)
	cin.get(str[i],5);
	
	for(int i = 0; i < 2; i++)
	for(int j = 0; j < 5; j++) 
	cout << str[i][j];
	return 0;
}

輸入:12345678

學了cin.get() 想一下 會輸出什麼呢?

3. cin.getline():

cin.getline與cin.get的區別:cin.get( , , )遇到終止字元停止讀取後,指標不向後移動;(把回車留在了緩衝區)

cin.getline( , , )遇到終止字元結束後,指標移到終止字元後。(把回車從緩衝區拿走)。

下面給出兩個程式 你們跑一下就理解了

#include<iostream>
#include<stdio.h>
#include<string>
using namespace std;
int main()
{
	char str[5];
	char s[5];
	cin.getline(s,5);
	cin.get(str,5);
	cout << str;
	cout << s;
	return 0;
}

這個是先 cin.getline() 再cin.get()

輸入:1234

           5678

輸出:12345678

#include<iostream>
#include<stdio.h>
#include<string>
using namespace std;
int main()
{
	char str[5];
	char s[5];
	cin.get(str,5);
	cin.getline(s,5);

	cout << str;
	cout << s;
	return 0;
}

這個先輸入 cin.get(),然後cin.getline()

輸入 1234

直接就是輸出了,因為get把換行符留在了緩衝區,而cin.getline()遇到換行吃掉然後結束。

其他用法與cin.get() 類似。

注意 : cin.get() 和cin.getline()其實都是傳遞3個引數,

cin.getline(字元陣列(或指標),字元個數n,終止字元)

cin.get(字元陣列,字元個數n,終止字元)

4、getline()     // 接受一個字串,可以接收空格並輸出,需包含“#include<string>”

#include<iostream> 
#include<string> 
using namespace std; 
main () 
{ 
	string str; 
	getline(cin,str); 
	cout<<str<<endl; 
	
}

和cin.getline()類似,但是cin.getline()屬於istream流,而getline()屬於string流,是不一樣的兩個函式

5.getchar()

吃回車   吃空格   吃Tab(讀走緩衝區的字元) 一次只能讀取一個。 一般有多餘的空格過著回車 都用getchar 吃掉就行了。

#include<iostream> 
#include<string> 
#include<stdio.h>
using namespace std; 
main () 
{ 
	string str; 
	getchar();
	cin >> str; 
	cout<<str<<endl; 
	
}

輸入:空格 1234

輸出 :1234;

6.gets()

需要標頭檔案 #include<stdio.h>

gets()  和  puts()  輸入輸出一次只能輸入一個字串,

吃空格吃Tab 不吃回車(遇到回車結束)

#include<iostream> 
#include<string> 
#include<stdio.h>
using namespace std; 
main () 
{ 
	char str[20]; 
	gets(str);
	cout << str << endl;
}

puts()輸出的字串中可以包含轉義符

#include<iostream> 
#include<string> 
#include<stdio.h>
using namespace std; 
main () 
{ 
	char str[] = "China\nBeijing"; 
	puts(str);
}

輸出 :China

         Beijing.