C/C++輸入函數(shù) scanf() gets() getline() cin.getline() cin.get() getchar()

一.競賽代碼要求main()函數(shù)前面必須有返回值int,結(jié)尾必須有return 0;否則代碼0分!

cin cout輸入輸出較簡潔,缺點是效率低

cin接受一個字符串,遇“空格”、“TAB”、“回車”都結(jié)束

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

二.scanf() #include <cstdio>//c語言中的<stdio.h>就是c++語言中的<cstdio>

我們從鍵盤上讀取的信息都是字符類型(char),而將它們轉(zhuǎn)換成int類型或者double類型,就是scanf()函數(shù)的工作

scanf()函數(shù)使用規(guī)則:

如果用scanf()讀入基本變量類型的值,在變量名前加一個&

如果用scanf()把字符串讀入字符數(shù)組中,不要使用&(其中&為取地址符,故名思意就是用來取變量的存儲地址)

eg1 例如scanf("%d%d",&n,&m);

eg2 例如scanf("%d,%d",&n,&m); scanf()函數(shù)將其解釋成:用戶將輸入一個數(shù)字、一個逗號,然后再輸入一個數(shù)字。也就是說用戶必須像下面這樣輸入兩個整數(shù):88,121

如果一個字符串中包含空格,那scanf()是只能讀取空格之前的字符,例如“hello world”,scanf("%s",str);只能讀取到hello。解決這個問題的方法是使用gets。

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

三.gets() #include<string>

gets可以接收空格,而scanf遇到空格、回車和Tab鍵都會認為輸入結(jié)束,所以它不能接收空格。

用法:gets(字符數(shù)組名或指針);

char a[15];

gets(a); /*遇到回車認為輸入結(jié)束*/

scanf("%s",a); /*遇到空格、回車、Tab鍵認為輸入結(jié)束*/

scanf不能接受空格、制表符Tab、回車等;對末尾回車符的處理:把回車符保留在緩存中。

gets能夠接受空格、制表符Tab、回車等;對末尾回車符的處理:接收回車,但把回車替換為\0.

$ gets()和scanf()相同點:字符串接受結(jié)束后自動加'\0'。

$ gets()和scanf()不同點:scanf() :當遇到回車,空格和tab鍵會自動在字符串后面添加'\0',但是回車,空格和tab鍵仍會留在輸入的緩沖區(qū)中。

gets():可接受回車鍵之前輸入的所有字符,并用'\0'替代'\n' .回車鍵不會留在輸入緩沖區(qū)中

scanf()可以讀取所有類型的變量

gets()用到讀取字符串,用回車結(jié)束輸入

1例1:2#include<cstdio>3intmain(){4charch1[10],ch2[10];5scanf("%s",ch1);6gets(ch2);7return0;8}9依次鍵入asd空格fg回車,asd空格fg回車,則ch1="asd\0",ch2="asd fg\0"。10例2:11#include 12intmain(){13charch1[10],ch2[10],c1,c2;14scanf("%s",ch1);15c1=getchar();16gets(ch2);17c2=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表示遇到這個字符停止讀入,在不設(shè)置的情況下系統(tǒng)默認該字符為'\n',也就是回車換行符(遇到回車停止讀入)。

eg1: getline(cin,line,'#');

那么當我輸入"You are the #best!" 的時候,輸入流實際上只讀入了"You are the ",#后面的并沒有存放到line中(應(yīng)該是在緩沖區(qū)里吧)。

eg2: while(getline(cin,line))語句 注意這里默認回車符停止讀入,鍵入Ctrl+Z按回車即可退出循環(huán)。

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

五.cin.getline() #include<iostream>

此函數(shù)會一次讀取多個字符(包括空白字符)可以接受空格 它以指定的地址為存放第一個讀取的字符的位置,依次向后存放讀取的字符,直到讀滿N-1個,或者遇到指定的結(jié)束符為止。

若不指定結(jié)束符,則默認結(jié)束符為'\n'。

其語法為: cin.getline(字符指針(char*),字符個數(shù)N(int),結(jié)束符(char));

1eg1:cin.getline(m,5,'a');當輸入jlkjkljkl時輸出jklj,輸入jkaljkljkl時,輸出jk2eg2:3#include<iostream>4usingnamespacestd;5intmain(){6chara[30];7cout<<"請輸入一個字符串:"<

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

六.cin.get()

1用法1:cin.get(字符變量名)可以用來接收字符2#include<iostream>3usingnamespacestd;4intmain(){5charch;6ch=cin.get();//或者cin.get(ch);7cout<

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

七.getchar() //接受一個字符,需包含#include<cstdio>

getchar()是C語言的函數(shù),C++也可以兼容,但是盡量不用或少用;

getchar()的返回值是用戶輸入的字符的ASCⅡ碼,如出錯返回-1

1#include<cstdio>2usingnamespacestd;3intmain(){4charch;5ch=getchar();//不能寫成getchar(ch);6cout<

看我主頁簡介免費C++學習資源,視頻教程、職業(yè)規(guī)劃、面試詳解、學習路線、開發(fā)工具

每晚8點直播講解C++編程技術(shù)。非常感謝大家的關(guān)注,讓小編更有動力寫文。比心。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容