天天看點

關于在字元數組中利用scanf函數輸入空格等問題關于在字元數組中利用scanf函數輸入空格等問題

關于在字元數組中利用scanf函數輸入空格等問題

控制串/數組 中的空白符使 scanf() 在輸入流中跳過一個或多個空白行。空白符可以是空格(space)、制表符(tab)和新行符(newline)。 本質上,控制串中的空白符使 scanf() 在輸入流中讀,但不儲存結果,直到發現非空白字元為止

ANSI C 标準向 scanf() 增加了一種新特性,稱為掃描集(scanset)。 掃描集定義一個字元集合,可由 scanf() 讀入其中允許的字元并賦給對應字元數組。 掃描集合由一對方括号中的一串字元定義,左方括号前必須綴以百分号。 例如,以下的掃描集使 scanf() 讀入字元 A、B 和 C:

1.使用掃描集

%[ABC]

使用掃描集時,scanf() 連續吃進集合中的字元并放入對應的字元數組,直到發現不在集合中的字元為止(即掃描集僅讀比對的字元)。傳回時,數組中放置以 null 結尾、由讀入字元組成的字元串。

2.使用補集^

用字元 ^ 可以說明補集。把 ^ 字元放為掃描集的第一字元時,構成其它字元組成的指令的補集合,訓示 scanf() 隻接受未說明的其它字元。

對于許多實作來說,用連字元可以說明一個範圍(ISO C99标準沒有規定)。例如,以下掃描集使 scanf() 接受字母 A 到 Z:

**

利用掃描集 在字元數組中輸出空格

**

scanf(“%[^\n]”,str); //str是數組首位址

scanf("%[^\n]",str); []中式正規表達式中的内容,^表示相反的情況,即 [\n]表示隻接受\n [^\n]表示除了\n都接受,即也包括接受空格。

char string[31];
for( int i=0;i<30;i++)
    {
        scanf("%[^\n]",&string[i]);
    }
    //輸入asdfa fasdf  dsafe
for(i=0;i<30;i++)
    {     
         printf("%c\n\n",string[i]);
    }
    //輸出為asdfa fasdf  dsafe
           

若非利用掃描集則會與到空格符時就停止了輸入

char string[31];
for( int i=0;i<30;i++)
    {
        scanf("%c",&string[i]);
    }
    //輸入asdfa fasdf  dsafe
for(i=0;i<30;i++)
    {     
         printf("%c\n\n",string[i]);
    }
           

此時的輸出為asdfa,而空格及空格之後的字元串沒有被輸入

繼續閱讀