一.scanf函數(shù)
int main()
{
char arr[50] = { 0 };
scanf("%s", arr);
printf("%s", arr);
return 0;
}
這種方法可以輸入字符串,但是只能輸入一個(gè)詞,遇到空格就結(jié)束了。,空格之后的字符,會留在緩沖區(qū),等待下次讀入。
如果我們要使用scanf函數(shù)來輸入的話,有沒有辦法呢?
答案:有的。
1.掃描集
除了轉(zhuǎn)換修飾符 s 以外,也可以使用“掃描集”(scanset)修飾符來讀取字符串,它由方括號所包含的一串無序字符組成([scanset])。scanf()函數(shù)接著讀取所有字符,然后將它們存儲為一個(gè)字符串(帶有字符串終止符),直到遇到不匹配掃描集中任一字符時(shí)才停止。
int main()
{
char arr[50] = { 0 };
scanf("%[123456789]", arr);
printf("%s", arr);
return 0;
}
此時(shí)我們會發(fā)現(xiàn)一個(gè)問題,就是掃描集只能識別掃描集里面的字符。
不過沒關(guān)系,我們只需要改動一點(diǎn)點(diǎn)就行,這樣不行的話,我們就反著來。
2.逆向使用掃描集
逆向使用轉(zhuǎn)換掃描集(也就是說,除掃描集中的字符外,其他都符合),做法是在掃描集的左括號后面加上一個(gè)插入號(^)。
int main()
{
char arr[50] = { 0 };
// \n是按下回車后輸入的,[^\n] 的意思是 除了\n之外的字符
scanf("%[^\n]", arr); //字符串末尾有\(zhòng)0
printf("%s", arr);
return 0;
}
使用scanf時(shí),最后的\n(按下回車時(shí)輸入的)會遺留在緩沖區(qū)中,如果使用scanf,則需要使用gerchar()將緩沖區(qū)的Enter吃掉
二.gets函數(shù)
char arr[50] = { 0 };
gets(arr); //末尾有\(zhòng)0
puts(arr);
使用 gets() 時(shí),系統(tǒng)會將最后“敲”(Enter)的換行符從緩沖區(qū)中取出來,然后丟棄,所以緩沖區(qū)中不會遺留換行符文章來源:http://www.zghlxwxcb.cn/news/detail-443055.html
總結(jié):
1 .我個(gè)人認(rèn)為使用gets()函數(shù)比較方便,同時(shí)緩沖區(qū)中還不會遺留數(shù)據(jù)。
2.如果要使用scanf()函數(shù),那么使用逆行掃描集會好很多,同時(shí)也需要注意緩沖區(qū)中的\n文章來源地址http://www.zghlxwxcb.cn/news/detail-443055.html
到了這里,關(guān)于字符串輸入的2種常用方法詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!