有關scanf和cin輸入字符的問題, 還有gets()和getline()(總結一下scanf和cin使用時需要注意的事項)


今天刷題遇到的問題:定義一個6*5的字符數組,用scanf一個一個的輸入字符。

for(int i = 0; i < 6; i++)

    for(int j = 0; j < 5; j++){

        scanf("%c", &a[i][j]);

    }

在界面上可以看到,當輸入了5*5時,就結束了,原來回車的換行符也被“吃”了,

同樣定義一個一維字符數組,如果用scanf,當輸入完之后,如果按回車,換行符也會被“吃”。。。。很容易出現問題。

 

 

總結:

(1)

     1.1  scanf 輸入字符時,會將'\n'吸收

     1.2  scanf 輸入字符串時,遇到空格或者回車就代表結束

            輸入一個字符串,如果在這之前有空格或回車,空格和回車不會給字符串。遇到下一個空格或回車才代表結束

     1.3  讀一行字符,可以用gets();

 

(2)

    cin用法很簡單,如果輸入的是一個字符,那么,'\n'不會被吸收, 其他的情況和scanf差不多

 

(3)如果用gets()或者getline(),那么它一遇到'\n'就結束,比如定義 char c; char s[10]; scanf("%c", &c);gets(s);printf("%c\n", c);printf("%s",s);

     如果一輸入一個字符想給c,然后回車在下一行輸入一行字符串給s;那么輸出的時候會發現,第一行是字符c,第二行是個空行, 光標在第三行;

分析:輸入的第一個字符給了c,然后回車'\n',這個回車代表了s是個空串(很神奇),同時,如果在輸入一個字符c之后,按兩個空格再加一個字符a再回車,那么s包含的就是兩個空格字符加字符a,在結束

    還發現,如果定義 char c[10]; char s[10]; scanf("%s", c);gets(s);printf("%s\n", c);printf("%s",s);

輸入asd  SS

結果輸出的是

asd

__SS(前面有有兩個空格)

表明輸入asd加個空格表示c字符串結束時,這個空格同時給了字符串s。。。

 

(4)如果定義的是字符數組 char c[10],那么讀入一行只能用gets(),不能用getline();可以用cout輸出字符數組,也可以用printf()輸出;

如果定義string s;

輸入不能用gets(),只能用getline();

輸出不能用printf(),只能用cout;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM