一.競賽程式碼要求main()函式前面必須有返回值int,結尾必須有return 0;否則程式碼0分!
cin cout輸入輸出較簡潔,缺點是效率低
cin接受一個字串,遇“空格”、“TAB”、“回車”都結束
--------------------------------------------------------------------------------------------------------------------------------------------------------
二.scanf() #include <cstdio>//c語言中的<stdio.h>就是c++語言中的<cstdio>
我們從鍵盤上讀取的資訊都是字元型別(char),而將它們轉換成int型別或者double型別,就是scanf()函式的工作
scanf()函式使用規則:
如果用scanf()讀入基本變數型別的值,在變數名前加一個&
如果用scanf()把字串讀入字元陣列中,不要使用&(其中&為取地址符,故名思意就是用來取變數的儲存地址)
eg1 例如scanf("%d%d",&n,&m);
eg2 例如scanf("%d,%d",&n,&m); scanf()函式將其解釋成:使用者將輸入一個數字、一個逗號,然後再輸入一個數字。也就是說使用者必須像下面這樣輸入兩個整數:88,121
如果一個字串中包含空格,那scanf()是隻能讀取空格之前的字元,例如“hello world”,scanf("%s",str);只能讀取到hello。解決這個問題的方法是使用gets。
--------------------------------------------------------------------------------------------------------------------------------------------------------
三.gets() #include<string>
gets可以接收空格,而scanf遇到空格、回車和Tab鍵都會認為輸入結束,所以它不能接收空格。
用法:gets(字元陣列名或指標);
char a[15];
gets(a); /*遇到回車認為輸入結束*/
scanf("%s",a); /*遇到空格、回車、Tab鍵認為輸入結束*/
scanf不能接受空格、製表符Tab、回車等;對末尾回車符的處理:把回車符保留在快取中。
gets能夠接受空格、製表符Tab、回車等;對末尾回車符的處理:接收回車,但把回車替換為\0.
$ gets()和scanf()相同點:字串接受結束後自動加'\0'。
$ gets()和scanf()不同點:scanf() :當遇到回車,空格和tab鍵會自動在字串後面新增'\0',但是回車,空格和tab鍵仍會留在輸入的緩衝區中。
gets():可接受Enter鍵之前輸入的所有字元,並用'\0'替代'\n' .Enter鍵不會留在輸入緩衝區中
scanf()可以讀取所有型別的變數
gets()用到讀取字串,用回車結束輸入
1 例1: 2 #include <cstdio> 3 int main(){ 4 char ch1[10],ch2[10]; 5 scanf("%s",ch1); 6 gets(ch2); 7 return 0; 8 } 9 依次鍵入asd空格fg回車,asd空格fg回車,則ch1="asd\0",ch2="asd fg\0"。 10 例2: 11 #include <stdio.h> 12 int main(){ 13 char ch1[10],ch2[10],c1,c2; 14 scanf("%s",ch1); 15 c1=getchar(); 16 gets(ch2); 17 c2=getchar(); 18 } 19 依次鍵入asdfg回車,asdfg回車,則ch1="asdfg\0",c1='\n',ch2="asdfg\0",c2需輸入。
-----------------------------------------------------------------------------------------------------------------------------------------------------------
四.getline() #include <string>
istream& getline ( istream &is , string &str , char delim )
其中,istream&is表示一個輸入流,譬如cin;
string&str表示把從輸入流讀入的字串存放在這個字串中(可以自己隨便命名,str什麼的都可以);
char delim表示遇到這個字元停止讀入,在不設定的情況下系統預設該字元為'\n',也就是回車換行符(遇到回車停止讀入)。
eg1: getline(cin,line,'#');
那麼當我輸入"You are the #best!" 的時候,輸入流實際上只讀入了"You are the ",#後面的並沒有存放到line中(應該是在緩衝區裡吧)。
eg2: while(getline(cin,line))語句 注意這裡預設回車符停止讀入,鍵入Ctrl+Z按回車即可退出迴圈。
-----------------------------------------------------------------------------------------------------------------------------------------------------------
五.cin.getline() #include<iostream>
此函式會一次讀取多個字元(包括空白字元)可以接受空格 它以指定的地址為存放第一個讀取的字元的位置,依次向後存放讀取的字元,直到讀滿N-1個,或者遇到指定的結束符為止。
若不指定結束符,則預設結束符為'\n'。
其語法為: cin.getline(字元指標(char*),字元個數N(int),結束符(char));
1 eg1: cin.getline(m,5,'a');當輸入jlkjkljkl時輸出jklj,輸入jkaljkljkl時,輸出jk 2 eg2: 3 #include<iostream> 4 using namespace std; 5 int main(){ 6 char a[30]; 7 cout << "請輸入一個字串:" << endl; 8 cin.getline(a, 10);//第10位存放字串結束符'\0' 9 for (int i = 0; i<10; i++) 10 cout << "第"<<i+1<<"個值為:"<<a[i] << endl; 11 return 0; 12 } 13 請輸入一個字串: 14 abcdefghij 15 第1個值為:a 16 第2個值為:b 17 第3個值為:c 18 第4個值為:d 19 第5個值為:e 20 第6個值為:f 21 第7個值為:g 22 第8個值為:h 23 第9個值為:i 24 第10個值為: //第10位存放字串結束符'\0'
-----------------------------------------------------------------------------------------------------------------------------------------------------------
六.cin.get()
1 用法1: cin.get(字元變數名)可以用來接收字元 2 #include <iostream> 3 using namespace std; 4 int main (){ 5 char ch; 6 ch=cin.get(); //或者cin.get(ch); 7 cout<<ch<<endl; 8 } 9 輸入:jljkljkl 10 輸出:j 11 用法2:cin.get(字元陣列名,接收字元數目)用來接收一行字串,可以接收空格 12 #include <iostream> 13 using namespace std; 14 int main (){ 15 char a[20]; 16 cin.get(a,20); 17 cout<<a<<endl; 18 } 19 輸入:jkl jkl jkl 20 輸出:jkl jkl jkl 21 輸入:abcdeabcdeabcdeabcdeabcde (輸入25個字元) 22 輸出:abcdeabcdeabcdeabcd (接收19個字元+1個'\0')
--------------------------------------------------------------------------------------------------------------------------------------------------------------
七.getchar() //接受一個字元,需包含#include<cstdio>
getchar()是C語言的函式,C++也可以相容,但是儘量不用或少用;
getchar()的返回值是使用者輸入的字元的ASCⅡ碼,如出錯返回-1
1 #include<cstdio> 2 using namespace std; 3 int main (){ 4 char ch; 5 ch=getchar(); //不能寫成getchar(ch); 6 cout<<ch<<endl; 7 } 8 //輸入:jkljkljkl 9 //輸出:j
-------------------------------------------------------------------------------------------------------------------------------------------------------------