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

2022-05-07 04:47:47 字數 4686 閱讀 9535

1樓:匿名使用者

首先scanf應該這樣用 scanf("格式化字串",變數地址)你的用法是錯誤的

"%c"只從輸入緩衝裡讀一個字元,但是你在輸入的時候不只一個字元,剩下的字元(包括回車)就留給第二個"%c"了

解決方法:

printf("y or n?");

scanf("%c\n",&a);

fflush(stdin);

printf("y or n?);

scanf("%c\n",&a);

fflush(stdin);

2樓:

%c 只取一個字元。scanf加 "\n" 或 調fflush(stdin); 清緩衝區。

printf("y or n?\n");

scanf("%c\n",&a);

printf("y or n?\n");

scanf("%c\n",&b);

3樓:不蘊逯平卉

那是什麼東東啊???

4樓:勤嬌太叔以柳

你給他了我就舉報你.

c語言scanf函式格式問題

5樓:寒寒家

首先明確

1. 對於%d的輸入,會忽略之前的空格

2. 對於%c的輸入則不會忽略。

3. 對於%d的輸入,會被字元截斷,這也就是 輸入"10a20b"的時候,也不會錯的原因了。

正確答案是a

x1接收了10, y1接收了字元a,之後是一個空格,而輸入的是%d,所以會忽略空格,所以x2接收了20,y2接收了字元b

分下下其它的選項

b, x1 接收了10, y1接收了空格,錯誤c 錯誤同b

d x1接收了10, y1接收了a,x2接收了20,y1接收了空格。

6樓:

scanf從緩衝區讀取的時候不是依據空格的,讀整數就取一個整數,讀字元就取一個字元

所以是a,比如c,讀取整數10之後讀到空格,會將空格當做字元放到y1中

最好的辦法就是寫程式跑一下,下面是程式和結果#include

#include

#include

#include

#include

using namespace std;

int main()

c語言,scanf()函式中的一些問題。

7樓:匿名使用者

注意一個地方,在輸入字元型資料時,你在之前為a輸入了一個整形數,後加了個' ' 字元,

所以ch=' '

你可以改成與%c之間加個空格

8樓:雲之逝殤

因為在c語言中空格也算是一種字元,當你輸入第一個正型後,空格一下,c語言就會識別你輸入的這個空格為你在正型後輸入的字元。

#include

int main()

你在scanf的%d後面加上一個空格就可以正常輸入輸出了!

c語言scanf函式問題

9樓:匿名使用者

首先開始是輸入一個字元給c,這邊不用空格分隔,因為就把第一個字元給了c,因此c是字元'1',然後再給i一個數字,這邊以空格為結束,因此把23給了i,下面s同理,以空格為結束,把456給了s

10樓:

你好,首先是三個變數的型別,第一是字元型陣列,第二個和第三個是整型。那麼scanf("%c",&c); 再接資料時只能接收到你輸入的第一字元「1」,「23」不能沒有接收就順推「i」接收,「456」s接收。

11樓:太平洋的巨古鯊

輸入123《空格》456《空格》789《回車》後,所有資訊存放在快取中"123 456 789",計算機開始判斷提取的資訊:第一個為%c,就是一個字元「1」;第二個為%d,就是一個十進位制數23,;第三個為%s(注意,%s是見到空格停止的),就是456,至於789那他就被截掉了。

c語言scanf函式的格式控制問題

12樓:匿名使用者

空格的ascii碼值為這樣輸入的話空格也會被當作輸入的值而被接收寫成這樣,則宣告輸入一個字元必須輸入空格隔開,所以空格沒有被當作輸入的值接收。

13樓:匿名使用者

scanf ( "%c%c",&ch1,&ch2 );

printf( "%c %c",ch1,ch2 );

表示你讀入的字元是連續讀入的,而:

scanf ( " %c %c",&ch1,&ch2 );

printf( "%c %c",ch1,ch2 );

則宣告瞭你在讀字元的時候會用一個空格隔開,所以空格沒有被讀入。

14樓:匿名使用者

不是吃掉回車和空格符,是它把空格符給當做%c給了ch1

c語言中scanf函式定義寬度的問題

15樓:

scanf("%4d",&a);表示若輸入小於或等於四位,則原樣輸出,若輸入大於四位,從左到右擷取你輸入的字元

scanf("%-4d",&a);表示若輸入小於或等於四位,則原樣輸出,若輸入大於四位,從右到坐擷取你輸入的字元

16樓:_殘陽_古道

這個問題問的好。

你問題的第二種情況是說如果輸入多個字元型別資料的情況。

如果是這樣,請注意,除非,如果scanf後面的格式是%c的,那麼它只能吸收你輸入的一個字元,後面的東西全部放在快取區。也就是說,你再接上一個scanf( "%c", &c),它會繼續吸收你前面沒有吸收到的字元。

如果下面語句段:

scanf( "%c", ch1 );

scanf( "%c", ch2 );

scanf( "%c", ch3 );

你輸入"ab"後按回車。那麼,a被ch1吸收,b被ch2吸收,ch3呢?你是不是以為沒有東西吸收?其實你輸入ab後按了回車,所以回車被ch3吸收了。這點一定要小心。

你的問題第一種情況就明顯很多了。

比如你的scanf語句吸收格式欄位是%4f,但是你輸入了3.1415926那麼,它只會吸收3.14,作為浮點型別。後面的15926以整型的方式存在於快取中。

學c語言一定要不停的去體悟它的輸入輸出,個人覺得它的重要性僅次於指標。

關於c語言scanf函式的一個問題

17樓:

其實很簡單:按scanf接收整數的規則,在%d加一個空格,那麼輸入時接收一個數字之後就要等待你輸入一個空格;但,%d的規則卻是跳過空格、回車、製表符來尋找數字——先是讓你輸入空格,可是一看是空格就等待其後的數字,這就一直停留在scanf函式上了,只有再輸入一個數字或其他字元才能往下走。

18樓:莊政警

%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()函式中使用%lf的問題

19樓:gta小雞

輸入e導致scanf讀取失敗,此時x的值是未定義的。

由於scanf讀入失敗,未能成功讀取的字元e被留在輸入緩衝區中;下次迴圈時,scanf又嘗試讀取輸入緩衝區中的e,自然再次讀取失敗,因而陷入無限迴圈。

20樓:反翽葚讛笀仕藖

不一樣的,這麼都是格式字元,意義如下:格式字元 意 義 d 以十進位制形式輸出帶符號整數(正數不輸出符號) o 以八進位制形式輸出無符號整數(不輸出字首0) x,x 以十六進位制形式輸出無符號整數(不輸出字首ox) u 以十進位制形式輸出無符號整數 f 以小數形式輸出單、雙精度實數 e,e 以指數形式輸出單、雙精度實數 g,g 以%f或%e中較短的輸出寬度輸出單、雙精度實數 c 輸出單個字元 s 輸出字串前面加個%,你自己對照下吧 長度:長度格式符為h,l兩種,h表示按短整型量輸出,l表示按長整型量輸出。

你這個「%lf」,是在定義輸入的型別為double(雙精度)是用的,不明白,你可以測試下: #include void main() 和 #include void main() 我這裡用了2個編譯器分別測試了下,一個如果定義double行,輸入的時候必須要用%lf,一個就不用了,用%f也行,但是精度還是有區別的,綜合以上,如果定義double型資料,輸入最好是用"%lf" .

c語言的函式問題,c語言函式呼叫問題

可以不寫,但是要把你的自定義函式寫在主函式前面才行。就是說把z的值返回到主函式,本例中就是把z的值返回給c。不能不寫的,否則當編譯器編譯到你main函式時,由於還沒編譯到下面的max定義。所以它找不到max到底是什麼符號。一般申明都寫在函式後面的,否則,出了main外,其他函式看不到max的申明的。...

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

第一個問題,因為你的scanf函式使用了域寬來指定讀入的格式。所謂域寬,就是說讀入的時候把某個寬度內的值付給某變數。那麼。你第一個引數讀入規則是 3c,意思是設定域寬為3,讀入一個char型資料。你輸入的是abcde。那麼前面的abc將作為第一個引數給一個char型資料。而char型資料只需要一個字...

c語言函式宣告的問題,C語言函式宣告的問題

我也來 說幾句。標準編譯器 對函式的呼叫 都要 先申明 才能 呼叫 生產的時候就這樣設定的 我推薦試用 大點的 vs2005,vc2000.小點的 dev cpp turboc 3.0 2.0 不支援滑鼠有點 麻煩 這裡 就涉及 申明和定義之間的區別。申明 不開闢記憶體,僅僅告訴編譯器,申明的部分存...