關於c語言scanf工作原理的問題

2021-12-28 03:27:22 字數 2589 閱讀 2762

1樓:壤駟新之空錕

第一個問題,因為你的scanf函式使用了域寬來指定讀入的格式。所謂域寬,就是說讀入的時候把某個寬度內的值付給某變數。那麼。

你第一個引數讀入規則是%3c,意思是設定域寬為3,讀入一個char型資料。你輸入的是abcde。那麼前面的abc將作為第一個引數給一個char型資料。

而char型資料只需要一個字元,所以a就給了c1,其間的bc被忽略。後面同理了。第二個問題,樓上大致說明白了。

不解釋。

2樓:weida愛問

您好!!對於scanf的工作原理,你可以參考下scanf函式的使用說明。對於任何不按照scanf函式格式進行輸入的情況,都會導致得不到正確結果!

why??為什呢??對於這個問題,我是不推薦初學者去深究的,因為沒有意義!

scanf這個函式是一個庫函式,用於按照指定格式從鍵盤讀取資料,內部實現機理是較為複雜的,如果可以您可以去檢視下scanf函式的實現原始碼,但沒有必要深究!

3樓:一騎當後

函式名: scanf;

功 能: 執行格式化輸入;

用 法: int scanf(char *format[,argument,...]);

scanf()函式是通用終端格式化輸入函式,它從標準輸入裝置(鍵盤) 讀取輸入的資訊,可以讀入任何固有型別的資料並自動把數值變換成適當的機內格式。

簡單來說scanf這個函式是一個庫函式,用於按照指定格式從鍵盤讀取資料。

其呼叫格式為:

scanf("《格式化字串》",《地址表》);

scanf()函式返回成功賦值的資料項數,出錯時則返回eof。

4樓:匿名使用者

scanf("%d,%d", &a, &b);

如果a和b都被成功讀入,那麼scanf的返回值就是2如果只有a被成功讀入,返回值為1

如果a和b都未被成功讀入,返回值為0

如果遇到錯誤或遇到end of file,返回值為eof。

且返回值為int型.

5樓:匿名使用者

這個你得搞清楚scanf函式的特點了當你輸入資料時,資料是以資料流的形式與你輸入的數進行匹配。也就是說你輸入一串資料後,系統就和你"%d %d"進行型別匹配,那些不能匹配的資料還在資料流裡。

輸入99pp66時,不是截掉了pp而是pp與你的%d%d資料型別不匹配,所以pp還是會在資料流裡。

輸入99 66pp後就會和你的%d%d型別匹配,但pp不匹配,所以還會留在資料流裡。

這個問題,你查下scanf函式的特點你就知道了,也是比較容易出錯的函式啦。

希望幫到你了。

關於c語言的scanf函式的逗號問題!!

6樓:匿名使用者

對於scanf()函式,如果格式控制串裡有逗號(或其他非格式符號),鍵盤輸入時,必須嚴格按照控制串的內容鍵入,不能隨意輸入。如scanf("a=%d,b=%d",&a,&b);響應輸入是a=xx,b=xx(xx是整形數)。scanf()函式還有一個特點較為常用,該函式會將白字元(空格、、)作為資料間的分隔符,比如scanf("%d%s%d",&a,str,&b);,響應輸入是:

12 asder334 35,此後,12賦給a,"asder334 "拷貝到str陣列,35賦給b,且各個資料之間的空白符可以是一個,也可以是多個。

#include

int main() student1,student2;

if(student1.score > student2.score)

printf("%d,%s,%f\n",student1.num,student1.name,student1.score);

else if(student1.score < student2.score)

printf("%d,%s,%f\n",student2.num,student2.name,student2.score);

else

return 0;}

7樓:匿名使用者

輸入字元wang,89時候這整個應該被預設為字串存入了student1.name

c語言中關於scanf的問題:scanf("%d,%d\n",&a,&b);執行時為什麼會要求輸入兩次?

8樓:馮虛御風

scanf("%d %d",&a,&b);由於兩個%d之間有空格所以輸入時可以在兩個輸入字元間輸入多個空格

同理scanf("%d%d\n",&a,&b);由於兩個%d之後有換行符所以輸入時換行即回車被忽略了

9樓:我想**你姐

你有換行符,所以需要有三個輸入

10樓:在那鄉間小路上

這句scanf("%d,%d\n",&a,&b); 多了一個\n.

scanf函式c的問題,c語言scanf函式格式問題

首先scanf應該這樣用 scanf 格式化字串 變數地址 你的用法是錯誤的 c 只從輸入緩衝裡讀一個字元,但是你在輸入的時候不只一個字元,剩下的字元 包括回車 就留給第二個 c 了 解決方法 printf y or n?scanf c n a fflush stdin printf y or n?...

為什麼C語言中要用「scanf」

要耐心看啊!別看字多,容易讀的!要分成3段讀,不要一口氣看完!1.scanf就是輸入一個數然後回車結束。聽不懂不好意思 別理他 舉個例子 int i 定義i 然後我們提示使用者輸入,printf 請輸入一個數 接著,我們使用scanf d i 輸入完數後,我們跟使用者說聲你剛才輸的數 printf ...

c語言中scanf和fputc不能同時用在for迴圈中

你確定這個程式能跑起來?c根本就是沒有宣告的變數。用c語言進行程式時同時使用for迴圈和scanf輸入多個結構體資料時一直出問題 附上兩張圖 5 for和scanf有直接的關係嗎?用不用迴圈,你需要的輸入的資料量都不會改變?c語言中for語句中的表示式一能不能寫scanf語句呢?for scanf ...