為什麼在使用scanf 函式讀取十六進位制數時,不要輸入ox字首?有什麼影響嗎

時間 2021-08-11 17:34:59

1樓:匿名使用者

0x之類的字首不只是給人看的,另一個作用是告訴編譯器這是什麼進位制的數,因為十進位制的123和十六進位制的123(用十進位制表示就是291)看起來是一模一樣的,但是由於scanf()函式已經知道了輸入的是十六進位制數,就不用再告訴它一遍了……

2樓:匿名使用者

我認為字首只是給人看的,方便閱讀者識別資料而機器中儲存的資料,不管是什麼進位制資料,其本質儲存都是該數的二進位制形式(補碼)

而scanf()函式讀取資料時,是將輸入的資訊直接儲存到相應的變數中,而不會進行判斷哪兒是字首哪兒是資料。因此,輸入時不能再有字首了。

只要格式為%x 資料就按16進位制解釋儲存。

%d按10進位制解釋儲存。

%o按8進位制解釋儲存。

3樓:陽光跑墨

你只注意到不用輸入0x字首,這個是有前提的!其呼叫格式為: scanf("《格式化字串》",《地址表》);

那是因為有格式化字串的限制

scanf("%x",&x);輸入十六進位制數不用字首可以輸入 輸入字首0x反而是錯的

scanf("%d", &b);這個是輸入十進位制的,輸入十六進位制即使不帶0x也是錯的(但必須是a~f開頭的十六進位制),不然會認為是十進位制的數字而可以輸入

4樓:匿名使用者

沒有什麼影響,就和輸入一個整數一樣,只是你用16進位制的來輸(可以用a到f的字母)

5樓:匿名使用者

scanf("%x",&x);輸入十六進位制數a83e即可,輸入0xa83e則錯誤。

請問什麼情況下要在十六進位制數前面加ox?不加可不可以?

c語言中用scanf函式輸入字元時,為什麼要在輸入控制符%c前面加空格?用scanf還有哪些要注意?

6樓:愛佳佳的恐龍

如果scanf中%d是連著寫的如“%d%d%d”,在輸入資料時,資料之間不可以用逗號分隔,只能用空白字元(空格或tab鍵或者回車鍵)分隔。

“2 (空格)3(tab) 4” 或 “2(tab)3(回車)4”等。若是“%d,%d,%d”,則在輸入資料時需要加“,”,如“2,3,4”。

比如scanf(" %c" ,&c);

你輸入了' a'(a前面有個空格),a就能被c接受。但控制符前如果沒空格,那c就接受了空格,明白了沒?這個可以防止誤操作,忽略空格輸入,接受第一個非空格輸入。

7樓:黑白say晚安

加空格遮蔽了空白字元。

%c前沒空格,scanf()將讀取標準輸入流中的第一個字元,%c前有空格,scanf()則讀取標準輸入流中第一個非空白字元。

使用scanf函式時應該注意的問題:

scan:掃描       f :format,格式1、整數和小數分別使用使用控制符%d %lf 表示(float除外,用%f)。

2、引數前面使用&符號,&號前要空格。

3、scanf輸入語句中替換符後不能加空格,也不能加\n。

4、scanf()中的變數必須使用地址。

5、scanf()的格式控制串可以使用空白字元或其它非空白字元,使用空白字元會使scanf()函式在讀操作中略去輸入中的一個或多個空白字元。使用非空白字元會使scanf()函式在讀入時剔除掉與這個非空白字元相同的字元。

6、在用"%c"輸入時,空格和“轉義字元”均作為有效字元。

8樓:匿名使用者

%c前面的空格就是用來遮蔽空白符的,

首先必須要知道c語言 scanf() 函式的特性,以及scanf()與緩衝區、標準輸入流之間的聯絡。在此之前,先介紹兩個專業術語。

1.緩衝區

緩衝區是一塊存放臨時輸入資料的記憶體,我們在鍵盤上輸入資料之所以不會馬上顯示,就是因為資料存放在了緩衝區,在上面例子中,當我們按下回車鍵後,緩衝區的資料會傳送到標準輸入流。

2.標準輸入流

標準輸入流(stdin)是檔案指標,scanf()就是從標準輸入流或許資料。

以上面**為例,當執行到scanf()時,

電腦開始執行以下操作:

開始等待使用者輸入

2.當我們輸入資料,在按下回車鍵前會把資料儲存在緩衝區,按下回車鍵後,會把資料以及換行符(\n)一起傳送到標準輸入流(stdin)中,

scanf()就是從標準輸入流中或許資料,上面第一個scanf()要讀入一個整數,它從標準輸入流中查詢,跳過空白符(空格、換行符、製表符)

3.如果遇到數字,則開始讀入,直到遇到非數字的字元結束,最後計算讀取到的數值,儲存到相關變數中。

使用scanf注意事項

1.引數的個數一定要對應

2.輸入的資料型別一定要和所需要的資料型別一致

3.每次呼叫完scanf後,記得呼叫一個getchar()函式

擴充套件資料

1.函式 scanf() 是從標準輸入流stdio (標準輸入裝置,一般指向鍵盤)中讀內容的通用子程式,可以說明的格式讀入多個字元,並儲存在對應地址的變數中。

2.函式的第一個引數是格式字串,它指定了輸入的格式,並按照格式說明符解析輸入對應位置的資訊並儲存於可變引數列表中對應的指標所指位置。

每一個指標要求非空,並且與字串中的格式符一一順次對應。

參考資料

網頁連結

9樓:西西哩的小馬甲

空格確實不是必須的,但有了空格就可以忽略你輸入的空格。

例如:scanf(" %c" ,&c),你輸入了' a'(a前面有個空格),a就能被c接受。

但控制符前如果沒空格,那c就接受了空格,這個可以防止誤操作,忽略空格輸入,接受第一個非空格輸入。

注意事項:

對於scanf()而言,%c是個較為特殊的說明符。 %c前沒空格,scanf()將讀取標準輸入流中的第一個字元,%c前有空格,scanf()則讀取標準輸入流中第一個非空白字元,遮蔽了空白字元。

10樓:圈圈叉叉叉叉圈

這絕對不是為了美觀,1樓不要誤人子弟。

空格確實不是必須的,但有了空格就可以忽略你輸入的空格,懂我的意思嗎?

比如scanf(" %c" ,&c);

你輸入了' a'(a前面有個空格),a就能被c接受。但控制符前如果沒空格,那c就接受了空格,明白了沒?這個可以防止誤操作,忽略空格輸入,接受第一個非空格輸入!

11樓:夏天很冷

空格不是必須的,scanf("%c %c",a,b)只是提示在輸入時兩個字元必須有空格間開。如果是scanf("%c%c",a,b)那沒兩個輸入字元不要有空格,不過程式設計時最好加上空格,這算一個書寫規範吧,要不然如果你scanf("%s%s",a,b)系統可能區分不了你的字串何時結束。

12樓:湮魂

不是必須加空格,這並不能防止誤輸入的,這種**寫出來,用的人肯定只能是熟知**如何編寫的人,有無空格分隔使用者會根據其格式使用,個人感覺就是為了能讓別人看清楚

13樓:我要度百

空格不是必須的吧,我們是感覺看起來美觀一些而加入的呀

十六進位制數必須有字首ox或者字尾h嗎

14樓:匿名使用者

是 0x 開頭 零不是 o;

h字尾是彙編的寫法,c/c++不支援。

15樓:匿名使用者

十六進位制數,十進位制只是 一個數在程式設計時的表現形式, 在記憶體中都是二進位制方式儲存的。

c/c++/c# 中用 0x 字首表示, 0x11 表示 1x16 +1 = 17 十進位制17

vb中用 &h 字首表示

為什麼十六進位制數前面要加0x 5

16樓:哇哎西西

0x的目的是為了表示後面的數是十六進位制,在程式設計裡面一般都要加入,用來區別十進位制數。

計算機中資料都是用二進位制儲存,而八進位制與十六進位制可以比十進位制更方便的表示二進位制。

16進位制即逢16進1,每一位上可以是從小到大為0、1、2、3、4、5、6、7、8、9、a、b、c、d、e、f共16個大小不同的數。16進位制轉換即16進位制與其他不同進位制之間的換算轉換,常見如2進位制、8進位制等進位制。

十六進位制數的第0位的權值為16的0次方,第1位的權值為16的1次方,第2位的權值為16的2次方。

17樓:匿名使用者

首先你得明白,

0b表示二進位制,因為二進位制binary的首字母是b然後得知道,十六進位制hexadecimal,可以縮寫為hex然後你就可以瞎jb猜了:

0x表示十六進位制,因為十六進位制hex的首字母h和b過於相似,寫程式的天天盯著螢幕看,容易看花眼睛分不清到底是二進位制還是16進位制,所以用它的最後一個字母x

18樓:麥秀麗禮爽

為了區分不是其他禁止人們做的規定

整型常量

整型常量有3種表示方式:

①十進位制整數。例如,123、一456、0。

②八進位制整數。以0開頭的整數是八進位制數。例如,0123表示8進位制數123<8),等於十進位制數83。

③十六進位制整數。以ox或0x開頭的整數是十六進位制數。例如,0x1.23或0xl

23表示十六進位制數123…),等於十進位制數291。

如果在整型常量後面加上字母u或u,則表示無符號整數(unsignedint)。例如,123u或123u是unsignedint型的。如果在整型常量後面加上一個字母l或l,則表示長整數(10ngint)。

例如,123[.或123l是long

int型的。

19樓:生活的樂趣是

也許是表示數字加字母?

十六進位制數前為什麼加ox?麻煩告訴我

20樓:手機使用者

規定再十六進位制的前面加上ox也就是以ox開頭

例如再八進位制前面必須加上0 以0開頭

VLOOKUP函式,查詢出錯,為什麼我在使用VLOOKUP函式時會出現錯誤,同樣乙個公式,卻查不到值,而且要查詢的內容也完全相同。

vlookup函式要查詢的資料第一列一定要是你用來查詢的資料在裡面有的,比如你想用工號來找姓名,那麼黃色格仔裡你選擇的範圍第一列必須是工號 你的查詢範圍就不能是o2 q4,不能從o2開始,只能從q列開始,你想解決問題就把黃色格仔裡的工號列調到姓名前面,公式就能過了。 來自朱家尖積極進取的大平原狼 這...

為什麼在c語言中,字元型不能用scanf輸入,而是用getc

樓主你好,關於你問的這個問題在我初學c語言的時候也遇到過,不僅是乙個人遇到,這是很多初學者都會遇到的問題 當然,我不是說樓主大哥你是初學者 呵呵 這個問題曾經麻痺了很多人,開始我也是不知道是什麼原因,直到一次偶然的機會我才知道問題的所在 出錯原因如下 當你輸入資料後 回車,資料才被函式 scanf ...

怎麼在ecel中使用lookup函式

輕煙談生活 在excel中使用lookup函式的具體操作步驟如下 1 首先我們開啟電腦上的excel軟體開啟如圖所示的 要在資訊表中找出指定員工的部門,而且查詢方式為從右向左。2 我們用到函式lookup,常規用法 lookup 1,0 條件區域 指定條件 要返回的區域 3 我們在要存放的單元格里輸...