1. 程式人生 > >C/C++輸入函式 scanf() gets() getline() cin.getline() cin.get() getchar()

C/C++輸入函式 scanf() gets() getline() cin.getline() cin.get() getchar()

一.競賽程式碼要求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():可接受回車鍵之前輸入的所有字元,並用'\0'替代'\n' .回車鍵不會留在輸入緩衝區中
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

---------------------------------------------------------------------------------------------------------------------------------------------------------