一、scanf()
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()
gets() #include<string>
gets可以接收空格,而scanf遇到空格、回車和Tab鍵都會認為輸入結束,是以它不能接收空格。
用法:gets(字元數組名或指針);
char a[15];
gets(a);
scanf("%s",a);
scanf不能接受空格、制表符Tab、回車等;對末尾回車符的處理:把回車符保留在緩存中。
gets能夠接受空格、制表符Tab、回車等;對末尾回車符的處理:接收回車,但把回車替換為0.
$ gets()和scanf()相同點:字元串接受結束後自動加'0'。
$ gets()和scanf()不同點:scanf() :當遇到回車,空格和tab鍵會自動在字元串後面添加'0',但是回車,空格和tab鍵仍會留在輸入的緩沖區中。
gets():可接受Enter鍵之前輸入的所有字元,并用'0'替代'n' .Enter鍵不會留在輸入緩沖區中
scanf()可以讀取所有類型的變量
gets()用到讀取字元串,用回車結束輸入
三、getline()
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()
cin.getline() #include<iostream>
此函數會一次讀取多個字元(包括空白字元)可以接受空格 它以指定的位址為存放第一個讀取的字元的位置,依次向後存放讀取的字元,直到讀滿N-1個,或者遇到指定的結束符為止。
若不指定結束符,則預設結束符為'n'。
其文法為: cin.getline(字元指針(char*),字元個數N(int),結束符(char));
五、cin.get()
六、getchar()
getchar() //接受一個字元,需包含#include<cstdio>
getchar()是C語言的函數,C++也可以相容,但是盡量不用或少用;
getchar()的傳回值是使用者輸入的字元的ASCⅡ碼,如出錯傳回-1