關於swich語句

  • 作者:由 匿名使用者 發表于 詩詞
  • 2022-07-26

關於swich語句匿名使用者2022.04.14 回答

嘻嘻,我給您解釋一下~

事情是這樣的~

這得從scanf特點說起。

它與其它函式不同,它從標準輸入流中順序地取得資訊。

scanf每讀取一個資訊,輸入流會改變(去掉輸入流中被scanf讀取的資訊)

例如:

輸入流為:1 2 3 4 a b c

當執行到scanf(%d, &i)時,

1被讀取到變數i中,

此時,輸入流變為:2 3 4 a b c

如果此時遇到scanf(%c, &a);此函式準備讀取輸入流中的資訊,但輸入流中第一個資訊是數字2,此時,scanf(%c, &a)無法讀取輸入流中的資訊,所以輸入流仍然為:2 3 4 a b c

這樣,再來您的這段程式碼來說:

當您輸入字母時,例如輸入的是 b,

那麼此時輸入流為:b

當執行到scanf(“%d”, &c);時,而scanf(“%d”,。。。)是讀取數字資訊的,此函式未能讀取字元資訊,所以輸入流仍然是:b。此時整形變數c的值未被改變。

當程式執行一個迴圈後又到了scanf(“%d”, &c);時,因為輸入流為: b,所以仍然無法讀取,輸入流仍然是:b。就這麼無限迴圈下去了。

如果希望輸入字母程式能夠不進入死迴圈,可以在迴圈裡寫一個類似:scanf(“%c”, &a)這樣的語句,這樣,如果在輸入流中遇到的是字母,這個函式會把字母取出來,你的這段程式碼就不會死迴圈下去啦~~~~~~~~~~~~~~~~~~~

~~~~~~~~~~~~~~~~~~~

==================================

補充,樓上的朋友你們為什麼不仔細看呀,

問題裡面已經含有這個語句了:“……(中間語句省略)”

說明樓主的程式碼裡已經有跳出迴圈的語句,

比如:

case 6:

return 0;

其實樓主所要解決的問題是為什麼輸入字元後看起來程式不受控制了,這是關鍵的地方,樓主如果真要把問題弄得明明白白,那您就要仔細看一下標準輸入流那個地方,它是一個緩衝區,應該說是一個佇列。

關於swich語句靜守ゝ納斷情2019.01.09 回答

switch(表示式)

{ case 常量表達式1:語句1

case 常量表達式2:語句2

… …

case 常量表達式n:語句n

default:語句n+1

其流程為:先計算表示式的值,然後順序地與case子句中所列出的各個常量進行比較,若表示式的值與常量中的值相等,就開始進入相應的case語句執行程式,遇到case和default也不再進行判斷,直至switch語句結束。如果要使其在執行完相應的語句後中止執行下一語句,可以在語句後加break。

注意:

1、switch與if不同,它僅能判斷一種邏輯關係,即表示式是否等於指定的常量,而 if 可以計算並判斷各種表示式。

2、case子句後必須為常量,常常是整型和字元型。

3、default可以省略,這時,不滿足條件什麼也不執行。

switch(grade)

{ case ‘a’:cout<<“100~85\n”; break;

case ‘b’:cout<<“84~70\n”; break;

case ‘c’:cout<<“69~60\n”; break;

case ‘d’:cout<<“no pass\n”; break;

default:cout<<“error\n”;

關於swich語句匿名使用者2007.02.01 回答

這段程式碼肯定是自迴圈的,因為沒有退出的條件,switch裡頭的“break”只是跳出switch{}而已,並不是跳出while{};

所以可以這樣改:

int quit = 0;

while(1)

{

//。。。

switch(c)

{

case 1:

quit = 1;//==========================這句是關鍵

……(中間語句省略)

default:

printf(“請在1-6中輸入選擇\n”);

break;

}

if(quit == 1)//======================這裡也是關鍵

break;

}

或者這樣:

bool quit = false;

while(!quit)//===========================!!!

{

//。。。

switch(c)

{

case 1:

quit = true;//==========================!!!

……(中間語句省略)

default:

printf(“請在1-6中輸入選擇\n”);

break;

}

};

關於swich語句匿名使用者2006.11.17 回答

不要用 scanf() 的辦法,這個肯定要出問題的。

請用 getch(),然後再轉換。

關於swich語句匿名使用者2006.11.17 回答

顯而易見,你的兩個迴圈都有問題!

首先是WHILE迴圈肯定是真,永遠不會退出,你要考慮給while的條件必須為變數,可以在while裡面修改,這樣才有可能選擇退出。

其次,你的switch語句只有最後一個有break退出,這樣的話,就存在隱患,如果執行其它的話,肯定不會退出了!

必須每個case後,最後都加上break語句

我剛建了一個程式設計群,22453400,希望大家能夠多討論討論。

Top