scanf中的%[^\n]%*c格式
scanf?
語(yǔ)法:?
??#include <stdio.h>
??int scanf( const char *format, ... );
?類(lèi)似函數(shù)有
???????int scanf(const char *format, ...);
???????int fscanf(FILE *stream, const char *format, ...);//指定輸入流
???????int sscanf(const char *str, const char *format, ...);//指定緩存區(qū)
scanf()函數(shù)根據(jù)由format(格式)指定的格式從stdin(標(biāo)準(zhǔn)輸入)讀取,并保存數(shù)據(jù)到其它參數(shù). 它和printf()有點(diǎn)類(lèi)似. format(格式)字符串由控制字符,空白字符和非空白字符組成. 控制字符以一個(gè)%符號(hào)開(kāi)始,如下:
控制字符 說(shuō)明?
%c 一個(gè)單一的字符?
%d 一個(gè)十進(jìn)制整數(shù)?
%i 一個(gè)整數(shù)?
%e, %f, %g 一個(gè)浮點(diǎn)數(shù)?
%o 一個(gè)八進(jìn)制數(shù)?
%s 一個(gè)字符串?
%x 一個(gè)十六進(jìn)制數(shù)?
%p 一個(gè)指針?
%n 一個(gè)等于讀取字符數(shù)量的整數(shù)?
%u 一個(gè)無(wú)符號(hào)整數(shù)?
%[] 一個(gè)字符集?
%% 一個(gè)精度符號(hào)
1.scanf()讀取匹配format(格式)字符串的輸入. 當(dāng)讀取到一個(gè)控制字符, 它把值放置到下一個(gè)變量. 空白(tabs, 空格等等)會(huì)跳過(guò). 非空白字符和輸入匹配, 然后丟棄. 如果是一個(gè)在%符號(hào)和控制符間的數(shù)量, 那么只有指定數(shù)量的字符轉(zhuǎn)換到變量中. 如果scanf()遇到一個(gè)字符集(用%[]控制字符表示), 那么在括號(hào)中的任意字符都會(huì)讀取到變量中. scanf()的返回值是成功賦值的變量數(shù)量, 發(fā)生錯(cuò)誤時(shí)返回EOF.?
2.scanf()函數(shù)的一般格式為:scanf("格式字符串",輸入項(xiàng)首地址表)
3.scanf的格式控制的一般形式為:%[*][寬度][F|N][h|l]類(lèi)型字符
[]中的控制字符為可選項(xiàng)?
4."*"表示該輸入項(xiàng)讀入后不賦予任何變量,即跳過(guò)該輸入值。
5."寬度"表示輸入讀入字符的長(zhǎng)度,對(duì)于整型表示截取相應(yīng)寬度的數(shù)字賦給后面列表中的相應(yīng)變量;對(duì)于字符型表示讀入相應(yīng)長(zhǎng)度的字符后把第一個(gè)字符賦給相應(yīng)的變量,其余的自動(dòng)舍棄。例如scanf("-=",&a, &b);如果輸入為12345則將12賦給a,將45賦給b;scanf(",<",&a, &b);如果輸入為12345則將'1'賦給a,將'3'賦給b .
"%s" 整個(gè)輸入作為一個(gè)串,并設(shè)置末尾的'\0'
"%ns",n為整數(shù),讀入的串最長(zhǎng)不超過(guò)n,然后在末尾補(bǔ)'\0'
%nf 讀入的浮點(diǎn)數(shù)最多有n位整數(shù),位數(shù)多于n,會(huì)截?cái)唷?/span>
"%n[a-z]" 讀入最多n個(gè)字符,如果遇到非a-z的字符,停止
"%[^=]" 讀入任意多的字符,直到遇到"="停止
"%n[^=]" 讀入"="號(hào)前的至多n 個(gè)字符
6.F 、N、h、l分別表示遠(yuǎn)指針、近指針、短整和長(zhǎng)整型。
7.對(duì)于輸入字符串還有一些比較有用的控制。
????例如經(jīng)常需要讀入一行字符串,而這串字符里面可能有空格、制表符等空白字符,如果直接用%s是不可以的,于是有些人就想到用gets(),當(dāng)然這也是一種選擇,但是懂C的人基本上都知道gets()是一個(gè)很危險(xiǎn)的函數(shù),而且很難控制,特別是與scanf()交替使用時(shí)前者的劣勢(shì)更是一覽無(wú)余,所以gets()一般是不推薦用的,其實(shí)用%[^\n]就可以很好的解決這個(gè)問(wèn)題了,^表示"非",即讀入其后面的字符就結(jié)束讀入。這樣想讀入一行字符串直接用scanf("%[^\n]%*c",str);就可以了,
%*c的作用是讀入\n,否則后面讀入的將一直是\n。
所有對(duì)%s起作用的控制都可以用%[],比如%[0-9]表示只讀入'0'到'9'之間的字符,%[a-zA-Z]表示只讀入字母,
'-'是范圍連接符,當(dāng)然也可以直接列出你需要讀入的字符。
如果你只需要讀"abc"里面的字符就可以用%[abc] (或者%[cab]、%[acb]、%[a-c]、%[c-a].....),
如果想讀入某個(gè)范圍之外的字符串就在前面加一個(gè)'^',如:%[^a-z]就表示讀入小寫(xiě)字母之外的字符。
例如從鍵盤(pán)輸入的"1235ab86"中讀取1235、86給n,有如下方法:
#include <stdio.h>
bool skip(){
?????scanf("%*[^0-9]");
?????return true;
}
void main()
{
??????int n;
??????while(skip() && scanf("%d", &n)!=EOF)
????????printf("%d\n", n);
}
輸出為:1235
????????86
總結(jié)
以上是生活随笔為你收集整理的scanf中的%[^\n]%*c格式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C语言中输入输出格式控制
- 下一篇: vim基本设置