今天刷題遇到的問題:定義一個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;