%c前面的空格就是用來屏蔽空白符的,
目前創(chuàng)新互聯(lián)公司已為千余家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)頁空間、網(wǎng)站托管、服務(wù)器租用、企業(yè)網(wǎng)站設(shè)計、齊河網(wǎng)站維護等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
首先必須要知道C語言 scanf()?函數(shù)的特性,以及scanf()與緩沖區(qū)、標準輸入流之間的聯(lián)系。在此之前,先介紹兩個專業(yè)術(shù)語。
1.緩沖區(qū)
緩沖區(qū)是一塊存放臨時輸入數(shù)據(jù)的內(nèi)存,我們在鍵盤上輸入數(shù)據(jù)之所以不會馬上顯示,就是因為數(shù)據(jù)存放在了緩沖區(qū),在上面例子中,當我們按下回車鍵后,緩沖區(qū)的數(shù)據(jù)會傳送到標準輸入流。
2.標準輸入流
標準輸入流(stdin)是文件指針,scanf()就是從標準輸入流或許數(shù)據(jù)。
以上面代碼為例,當執(zhí)行到scanf()時,
電腦開始執(zhí)行以下操作:
開始等待用戶輸入
2.當我們輸入數(shù)據(jù),在按下回車鍵前會把數(shù)據(jù)儲存在緩沖區(qū),按下回車鍵后,會把數(shù)據(jù)以及換行符(\n)一起傳送到標準輸入流(stdin)中,
scanf()就是從標準輸入流中或許數(shù)據(jù),上面第一個scanf()要讀入一個整數(shù),它從標準輸入流中查找,跳過空白符(空格、換行符、制表符)
3.如果遇到數(shù)字,則開始讀入,直到遇到非數(shù)字的字符結(jié)束,最后計算讀取到的數(shù)值,儲存到相關(guān)變量中。
使用scanf注意事項
1.參數(shù)的個數(shù)一定要對應(yīng)
2.輸入的數(shù)據(jù)類型一定要和所需要的數(shù)據(jù)類型一致
3.每次調(diào)用完scanf后,記得調(diào)用一個getchar()函數(shù)
擴展資料
1.函數(shù) scanf() 是從標準輸入流stdio (標準輸入設(shè)備,一般指向鍵盤)中讀內(nèi)容的通用子程序,可以說明的格式讀入多個字符,并保存在對應(yīng)地址的變量中。
2.函數(shù)的第一個參數(shù)是格式字符串,它指定了輸入的格式,并按照格式說明符解析輸入對應(yīng)位置的信息并存儲于可變參數(shù)列表中對應(yīng)的指針所指位置。
每一個指針要求非空,并且與字符串中的格式符一一順次對應(yīng)。
參考資料
網(wǎng)頁鏈接
scanf函數(shù)族在用%c接受輸入時要接收空格和回車。%s時接受空格。
getchar函數(shù)族接受所有字符包括回車。
要輸入帶空格的字符串,要用到一個格式字符:%[] -- 一個字符集。
“%[]”的作用是掃描字符集合:
例如:scanf(“%[^\n]”,str);
具體作用是:如果輸入的字符屬于方括號內(nèi)字符串中某個字符,那么就提取該字符;如果一經(jīng)發(fā)現(xiàn)不屬于就結(jié)束提取。該方法會自動加上一個'\0'到已經(jīng)提取的字符后面。
#include stdio.h
int main()
{
char str[81];
printf("Please input a string:\n");
scanf("%[^\n]",str);
printf("The string is:\n%s\n",str);
return 0;
}
擴展資料:
字符串函數(shù)應(yīng)用:
1. 連接運算 concat(s1,s2,s3…sn) 相當于s1+s2+s3+…+sn。
例:concat(‘11’,'aa’)='11aa’。
2. 求子串。 Copy(s,I,I) 從字符串s中截取第I個字符開始后的長度為l的子串。
例:copy(‘a(chǎn)bdag’,2,3)=’bda’。
3. 刪除子串。過程 Delete(s,I,l) 從字符串s中刪除第I個字符開始后的長度為l的子串。
例:s:=’abcde’;delete(s,2,3);結(jié)果s:=’ae’。
4. 插入子串。 過程Insert(s1,s2,I) 把s1插入到s2的第I個位置。
例:s:=abc;insert(‘12’,s,2);結(jié)果s:=’a12bc’。
5. 求字符串長度 length(s) 例:length(‘12abc’)=5。
在ASP中 求字符串長度用 len(s)例: len("abc12")=5。
參考資料:
百度百科-掃描集
C語言輸入一行有空格的字符串的方法:
1、對于char
char s[100];
cin.getline(s,1000);//第二個參數(shù)表示允許輸入的最大長度while(cin.getline(s,1000));
輸入輸出樣例
輸入:He llo
輸出:He llo
2、對于string
string s;
getline(cin,s);while(getline(cin,s));
輸入輸出樣例
輸入:He llo
輸出:He llo
擴展資料:
字符串主要用于編程,概念說明、函數(shù)解釋、用法詳述見正文,這里補充一點:字符串在存儲上類似字符數(shù)組,所以它每一位的單個元素都是可以提取的,如s=“abcdefghij”,則s[1]=“a”,s[10]="j",而字符串的零位正是它的長度。
這可以給我們提供很多方便,高精度運算時每一位都可以轉(zhuǎn)化為數(shù)字存入數(shù)組。
字符串或串(String)是由數(shù)字、字母、下劃線組成的一串字符。一般記為 s=“a1a2···an”(n=0)。它是編程語言中表示文本的數(shù)據(jù)類型。在程序設(shè)計中,字符串(string)為符號或數(shù)值的一個連續(xù)序列,如符號串(一串字符)或二進制數(shù)字串(一串二進制數(shù)字)。
通常以串的整體作為操作對象,如:在串中查找某個子串、求取一個子串、在串的某個位置上插入一個子串以及刪除一個子串等。
兩個字符串相等的充要條件是:長度相等,并且各個對應(yīng)位置上的字符都相等。設(shè)p、q是兩個串,求q在p中首次出現(xiàn)的位置的運算叫做模式匹配。串的兩種最基本的存儲方式是順序存儲方式和鏈接存儲方式。
參考資料:
百度百科-字符串
用gets()函數(shù);gets從標準輸入設(shè)備讀字符串函數(shù),其可以無限讀取,不會判斷上限,以回車結(jié)束讀取,所以程序員應(yīng)該確保buffer的空間足夠大,以便在執(zhí)行讀操作時不發(fā)生溢出。
功能
從stdin流中讀取字符串,直至接受到換行符或EOF時停止,并將讀取的結(jié)果存放在buffer指針所指向的字符數(shù)組中。換行符不作為讀取串的內(nèi)容,讀取的換行符被轉(zhuǎn)換為‘\0’空字符,并由此來結(jié)束字符串。
返回值
讀入成功,返回與參數(shù)buffer相同的指針;讀入過程中遇到EOF(End-of-File)或發(fā)生錯誤,返回NULL指針。所以在遇到返回值為NULL的情況,要用ferror或feof函數(shù)檢查是發(fā)生錯誤還是遇到EOF。
擴展資料:
gets()函數(shù)用法:
示例
1、C:
#include stdio.h? ? //這個頭文件包含gets()函數(shù),這個函數(shù)在ISO/IEC 9899 2011(C11)標準中被移除
int main(void)
{
char str1;? //不要char*p,然后gets(p),這是錯誤的,因為p沒有指向有效的內(nèi)存,它可能指向任何非法地址//地方的未知大小的內(nèi)存塊,這樣以來,就可能修改了不屬于本程序的內(nèi)存的內(nèi)容
gets(str1);
printf("%s\n", str1);
return 0;
}
#include stdio.h//gets_s()用法
#define CH 20
int main(void)
{
char ch[CH];
printf("請輸入你的名字:\n");
gets_s(ch,CH);? ? ? ? ? ? ?//這里不能用gets_s(ch);
printf("這是你的名字:%s\n", ch);
return 0;
}
2、C++:
#include iostream
#include cstdio
using namespace std;
int main()
{
char str[100];
gets(str);
coutstrendl;
return 0;
}
gets()函數(shù)用來從標準輸入設(shè)備(鍵盤)讀取字符串直到換行符結(jié)束,但換行符會被丟棄,然后在末尾添加'\0'字符。其調(diào)用格式為:
gets(s);其中s為字符串變量(字符串數(shù)組名或字符串指針)。
gets(s)函數(shù)與scanf("%s",s)相似,但不完全相同,使用scanf("%s",s) 函數(shù)輸入字符串時存在一個問題,就是如果輸入了空格會認為字符串結(jié)束,空格后的字符將作為下一個輸入項處理,但gets()函數(shù)將接收輸入的整個字符串直到遇到換行為止。
也就是說:gets()函數(shù)讀取到\n(我們輸入的回車)于是停止讀取,但是它不會把\n包含到字符串里面去。然而,和它配合使用的puts函數(shù),卻在輸出字符串的時候自動換行。
用gets()就可以。
gets()函數(shù)是以輸入的回車鍵為結(jié)束標志的。