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.