日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C/C++ scanf 函数中%s 和%c 的简单差别

發(fā)布時間:2024/7/19 c/c++ 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C/C++ scanf 函数中%s 和%c 的简单差别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

首先聲明:在鍵盤中敲入字符后,字符會首先保存在鍵盤緩沖區(qū)中供scanf函數讀取(scanf。getchar等函數是讀取緩沖區(qū),getch函數是讀取的控制臺信息,即為直接從鍵盤讀取)。另外特別注意鍵盤上敲入回車實際為“\r\n”,但存儲到緩沖區(qū)時候會舍棄‘\r’而僅僅存儲\n.比如我們敲入字符“12345回車”。緩沖區(qū)內存儲的為“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回車后。緩沖區(qū)內存的是123\n。第一次讀入后,緩沖區(qū)內僅僅剩余了\n,當第二次讀入時候。\n是以分隔符存在的。不讀入第二次的是。故緩沖區(qū)中是沒有數據存在的,所以須要繼續(xù)輸入數據。

例:

輸入:_回車 ? ? ? ? ? ? ? ? ? ??“_”代表空格

這樣的輸入會要求一直輸入,這是由于空格和\n都是分隔符。沒有數據。所以沒辦法讀入。

相同直接輸入回車也是一直要求輸入


代碼:

char *s;

scanf("%s",s);

printf("%s\n",s);

scanf("%c",s);

printf("%d\n",*s);

例:

輸入:1234_12回車 ? ? ? ? ? ? ? ? ? ??“_”代表空格

輸出:1234

? ? ? ? ? ?32(空格的ASCII為32)

原因:對于第一個%s讀入時遇到分隔符“空格”就停止,可是空格還是保存在緩沖區(qū)的。對于%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 的简单差别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。