C/C++ scanf 函数中%s 和%c 的简单差别
首先聲明:在鍵盤中敲入字符后,字符會首先保存在鍵盤緩沖區中供scanf函數讀取(scanf。getchar等函數是讀取緩沖區,getch函數是讀取的控制臺信息,即為直接從鍵盤讀取)。另外特別注意鍵盤上敲入回車實際為“\r\n”,但存儲到緩沖區時候會舍棄‘\r’而僅僅存儲\n.比如我們敲入字符“12345回車”。緩沖區內存儲的為“12345\n”.
文章中“_”代表空格
代碼:
char *s;
scanf("%s",s);
printf("%s\n",s);
scanf("%s",s);
printf("%s\n",s);
例:
輸入:123_345回車 ? ? ? ? ? ?“_”代表空格
輸出:123
? ? ? ? ? ?345
分析:對于scanf以%s格式輸入時候。“空格、換行符、TAB”等是作為兩個數據的分隔符存在的。即分隔符前后是兩個數據,讀入時候分隔符不讀入。
例:
輸入:123回車
? ? ? ? 456回車
輸出:123
? ? ? ? ? ?456
原因:如事例1,輸入123回車后。緩沖區內存的是123\n。第一次讀入后,緩沖區內僅僅剩余了\n,當第二次讀入時候。\n是以分隔符存在的。不讀入第二次的是。故緩沖區中是沒有數據存在的,所以須要繼續輸入數據。
例:
輸入:_回車 ? ? ? ? ? ? ? ? ? ??“_”代表空格
這樣的輸入會要求一直輸入,這是由于空格和\n都是分隔符。沒有數據。所以沒辦法讀入。
相同直接輸入回車也是一直要求輸入
代碼:
char *s;
scanf("%s",s);
printf("%s\n",s);
scanf("%c",s);
printf("%d\n",*s);
例:
輸入:1234_12回車 ? ? ? ? ? ? ? ? ? ??“_”代表空格
輸出:1234
? ? ? ? ? ?32(空格的ASCII為32)
原因:對于第一個%s讀入時遇到分隔符“空格”就停止,可是空格還是保存在緩沖區的。對于%c讀入時候,“空格、\n、TAB”等是正常字符,所以第二次讀入時候讀取緩沖中的第一個字符“空格”。所以輸出的是32.
事例2:
輸入:123回車
輸出:123
? ? ? ? ? ?10(\n的ASCII為10)
原因:%s讀入后緩沖中指剩下了\n故第二次以%c讀入時候就讀入了\n。輸出為10.
轉載于:https://www.cnblogs.com/wzzkaifa/p/6911650.html
總結
以上是生活随笔為你收集整理的C/C++ scanf 函数中%s 和%c 的简单差别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux下使用iotop检测磁盘io使
- 下一篇: 链接服务器 因为它不存在或者您没有所需的