1樓:建芷若
『回車』也是一個字元,編譯器把『回車』賦給了x。(這也是使用字元特別之處要注意。另外編譯器有些智慧,先執行了scanf("%c",&x);,再執行printf("請輸入x");)
而scanf("%c",&x);放在後面,『回車』執行的是它原來特有的功能。
2樓:匿名使用者
在這個程式中的:
printf("請輸入a;");
scanf("%d",&a);
printf("請輸入x");
scanf("%c",&x);
printf("請輸入b;");
scanf("%d",&b);
**的意思是輸入變數int a,char x,int b的值,你的問題就出在這啦
1、當你輸入完變數a的值後,是以 enter鍵結束吧,而你的x變數又是char型
所以程式就將你鍵入的 enter鍵的ascii碼存入了x變數所以讓你錯覺 scanf("%c",&x);沒有執行。
當你把scanf("%c",&x);放到scanf("%d",&a);的前面就可以正常就說明了上面的問題。
你不妨這樣試試:
#include "stdio.h"
main() {
int a,b;
char x;
printf("請依次輸入a,x,b的值:");
scanf("%d,%c,%d",&a,&x,&b);
3樓:挺進
空格和回車也是一個字元,你在輸入一個數後回車了一下,其實這時候你已經給x賦值了,就是回車符。所以他不會再讓你輸入了!
字元不一定就非得是個字母數字之類的,像tab,回車,空格這些都是字元。
4樓:匿名使用者
它把回車也當成一個字元啦,賦給了x
關於c語言scanf函式的一個問題
5樓:
其實很簡單:按scanf接收整數的規則,在%d加一個空格,那麼輸入時接收一個數字之後就要等待你輸入一個空格;但,%d的規則卻是跳過空格、回車、製表符來尋找數字——先是讓你輸入空格,可是一看是空格就等待其後的數字,這就一直停留在scanf函式上了,只有再輸入一個數字或其他字元才能往下走。
6樓:莊政警
%d後面的空格是用來匹配所有的連續空白字元的(空白字元包括空格 \t \n)直到碰到不是空白的字元。
這個用法主要是為了匹配輸入時的空白符,舉個例子:
int a;
char c;
scanf("%d",&a);
scanf("%c",&c);
上面這個輸入**裡,如果是分兩次輸入(用空白分割),那麼c是沒有機會輸入的,尤其是從檔案讀取的時候,會有很多的空白符,c會讀取到緩衝區的空白,一般解決這個問題是再用一句gtechar(), ,但如果有很多空白就比較麻煩(檔案裡這種情況很多),如果在%d後面加個空格,就可以吧剩下所有的空白符給吸收掉:
int a;
char c;
scanf("%d ",&a); //這樣可以把空白吸收掉scanf("%c",&c);
在你這個**裡,輸入全是%d格式,那這個空格就沒必要了,不如去掉
關於c語言scanf工作原理的問題
7樓:壤駟新之空錕
第一個問題,因為你的scanf函式使用了域寬來指定讀入的格式。所謂域寬,就是說讀入的時候把某個寬度內的值付給某變數。那麼。
你第一個引數讀入規則是%3c,意思是設定域寬為3,讀入一個char型資料。你輸入的是abcde。那麼前面的abc將作為第一個引數給一個char型資料。
而char型資料只需要一個字元,所以a就給了c1,其間的bc被忽略。後面同理了。第二個問題,樓上大致說明白了。
不解釋。
8樓:weida愛問
您好!!對於scanf的工作原理,你可以參考下scanf函式的使用說明。對於任何不按照scanf函式格式進行輸入的情況,都會導致得不到正確結果!
why??為什呢??對於這個問題,我是不推薦初學者去深究的,因為沒有意義!
scanf這個函式是一個庫函式,用於按照指定格式從鍵盤讀取資料,內部實現機理是較為複雜的,如果可以您可以去檢視下scanf函式的實現原始碼,但沒有必要深究!
9樓:一騎當後
函式名: scanf;
功 能: 執行格式化輸入;
用 法: int scanf(char *format[,argument,...]);
scanf()函式是通用終端格式化輸入函式,它從標準輸入裝置(鍵盤) 讀取輸入的資訊,可以讀入任何固有型別的資料並自動把數值變換成適當的機內格式。
簡單來說scanf這個函式是一個庫函式,用於按照指定格式從鍵盤讀取資料。
其呼叫格式為:
scanf("《格式化字串》",《地址表》);
scanf()函式返回成功賦值的資料項數,出錯時則返回eof。
10樓:匿名使用者
scanf("%d,%d", &a, &b);
如果a和b都被成功讀入,那麼scanf的返回值就是2如果只有a被成功讀入,返回值為1
如果a和b都未被成功讀入,返回值為0
如果遇到錯誤或遇到end of file,返回值為eof。
且返回值為int型.
c語言中利用scanf語句輸入多個值的問題
關於c語言中scanf的問題
11樓:匿名使用者
scanf是c語言中的一個輸入函式,與printf函式一樣,都被宣告在標頭檔案stdio.h裡,因此在使用scanf函式時要加上#include 。(在有一些實現中,printf函式與scanf函式在使用時可以不使用預編譯命令#include 。
)它是格式輸入函式,即按使用者指定的格式從鍵盤上把資料輸入到指定的變數之中。scanf函式返回成功讀入的資料項數,讀入資料時遇到了「檔案結束」則返回eof。
12樓:
你好樓主!
不知道你對正規表示式熟不熟悉?
首先,scanf,sscanf這類輸入函式是支援一些簡單的正規表示式。scanf("as%s",j); 的正規表示式就是"as%s",即限制輸入要從as開始匹配,如果匹配不了,則認為輸入錯誤,即相當於沒有輸入。如果匹配到as則後面的%s會把輸入存放到f這個陣列裡。
你可以試試這樣的輸入語句scanf("%*[^#]%s", j);它的作用是忽略#這個符號之前的輸入,把後面的輸入存放到j這個陣列裡。
其次,接下來的現象是因為j這個陣列沒有初始化,而當沒有有效輸入時,輸出就是隨機的字元。在windos系統下可能會輸出「燙燙?」這樣的字樣
13樓:五胡十六國
scanf("as%s",j); 輸入錯了教你兩個吧
gets(j);這個能讀空格和字串
scabf ("%s",j);你的修改只能讀字串,見空格就停了
14樓:匿名使用者
檢查scanf()函式的返回值就清楚了。輸入格式不正確導致未讀入字串,而字元陣列是未初始化的,所以會輸出圖示結果。
15樓:
你的scanf中首先是「as%s」所以你輸入值得時候,你剛開始的前兩個必須是as,要不然就會出錯
關於c語言中scanf的問題?
16樓:匿名使用者
scanf後面的%f格式,必須與輸入格式相一致
按您的輸入,中間用逗號,與scanf中%f之間格式不符,結果只接收了第1個變數,後面沒接收,因而是零(有的編譯器會是隨機數),正確寫法:
(1)如果:scanf中%f之間用空格,即:scanf("%f %f %f",&a,&b,&c);應該輸入1 2 3(中間有空格)
(2)如果:scanf中%f之間用逗號,即:scanf("%f,%f,%f",&a,&b,&c);應該輸入1,2,3(中間有,)
但不能沒有分隔符號,您的寫法,要求3個數連續輸入,這樣:人都沒辦法分辨,機器更沒法分了,如:你輸入12.345.67.89,是啥意思?
12.34 5.6 7.89?
12.3 45.6 7.89?
17樓:閃忠六衣
87和6543.000000;看到scanf()函式中的"%2d"沒有?在執行該函式時系統只讀入使用者輸入的前兩個數字並把其賦給a,當然在你輸入876543.
0時a=87,然後把剩下的數值賦給b;然後輸出a和b分別為87,6543.000000(float型預設輸出小數點後6位有效數字)。
18樓:匿名使用者
scanf中%f之間沒有空格,導致輸入資料,發生偏差,建議在%f之間用空格,然後用空格隔開輸入資料。
19樓:儀秀英紅亥
a=87
b=6543.0000
因為第一個百分位寬是2位所把87賦給a
後面6543.0是浮點數賦給b
20樓:匿名使用者
你輸入的 是什麼
追答: 輸入 1 2 3 試試看
c語言(scanf函式問題),c語言中scanf函式定義寬度的問題
搞不清楚你的問題是什麼意思,只能給你簡單的分析一下了scanf函式有輸入的功能,這是廢話了,一般來講我們輸入資料都有多個,很少會出現僅輸入一個的情況 多行輸入的情況除外 既然我們要輸入多個,就必須要用某些符號將它們分隔開 如 空格是最常見的,還有就是逗號 如果沒有分隔開,scanf d d a,b ...
關於C語言的問題,一個關於C語言的問題
123.456001 這你都發現了,了不起。計算機儲存是2進位制儲存。不要苛求保留幾位,這個在儲存方式上來說沒有意義在資料儲存中,除了2的幾次方分之幾外,如0.5,0.25,0.75,0.125等等也就是1 2,1 4,5 8等這些外 其他的都是近似儲存 舉個很簡單的例子,如0.1你可以手動算一下,...
關於C語言得問題,一個關於c語言的問題?
a b c 5是你說的意思。是邏輯運算子,它兩邊值相等則返回1,不等則返回0,且是左結合,即從左向右計算的。a b c 5用括號表示出來是 a b c 5 函式實參是可以是陣列,可實質上是指標的,例如 int a int a 的函式定義,它等價於int a int a 返回時也是同樣的,假設你在函式...