c語言終極密碼

#include<stdio.h>

#include<stdlib.h>

int main (void)

{

int x=15,y,a=0,b=99; /*定義終極碼為15 變數為Y範圍為0~99*/

printf("終極密碼開始囉~\n輸入0~99的數字吧!!\n"); /*顯示*/

scanf("%d",&y); /*讀取Y為變數*/

while(y!=x) /*若Y不等於X程式繼續執行*/

{

if ((y>b) || (y<a) )

printf("輸入範圍錯誤");

else if((y<x) && (y>0)) a=y+1; /*如果Y小於X a+1*/

else if((y>x) && (y<99)) b=y-1; /*否則y-1*/

printf("錯錯錯 try again\n(RANGE %d 到 %d)\n",a,b); /*顯示" " 中的字 串與a b的範圍數*/

scanf("%d",&y); /*讀取y為變數*/

}

printf("終於答對了%d\n",y); /*顯示出" "中的字串*/

system("pause"); /*讓DOS停住*/

return 0;

}

為什麼我只要輸入數字超過0~99之間的範圍輸入範圍錯誤和錯錯錯 try again

兩個結果會同時出現 我只想讓範圍輸入錯誤printf我該怎麼修改

另外if else 該如何應用?

2 Answers

Rating
  • 9 years ago
    Favorite Answer

    你的程式目前是這樣跑

    圖片參考:https://lh5.googleusercontent.com/-ciuEwAMun30/Tp_...

    當它進入 if - else if 組成的紅色方框時

    第一個遇到的是

    if ((y>b) || (y

    printf("輸入範圍錯誤\n");

    由於我 y 輸入 100, 超出 0-99 的範圍

    (y>b) || (y

    於是它會進到 if 裡面,印出 "輸入範圍錯誤\n"

    然後紅色方框的部分就結束了

    離開方框後第一個遇到的是

    printf("錯錯錯 try again\n(RANGE %d 到 %d)\n",a,b);

    所以它又會印出 "錯錯錯 try again\n(RANGE %d 到 %d)\n"

    改的話, while() 裡面可以改成這樣

    while(y!=x) /*若Y不等於X程式繼續執行*/

    {

    if ((y>b) || (y

    printf("輸入範圍錯誤,重新輸入\n");

    else{

    if((y 0)) a=y+1; /*如果Y小於X a+1*/

    if((y>x) && (y<99)) b=y-1; /*否則y-1*/

    printf("錯錯錯 try again\n(RANGE %d 到 %d)\n",a,b);

    }

    scanf("%d",&y); /*讀取y為變數*/

    }

    應用的話... 你是要問用法嗎?

    if else 就是流程控制

    流程控制就是在說「接下來要跳到哪一行」

    若沒有流程控制的話,程式碼的執行方向只有一種

    一律都是由上往下一行一行執行

    這樣受限太多,以終極密碼來講可能就寫不出來了

    if( 判斷 ){

    ...

    }

    else{

    ...

    }

    這個的意思就是,用「判斷」來當依據

    如果「判斷」成立就跳到 { ... } 裡面

    反之則跳到 { ... } 裡面

    如果大括號內只有一個指令

    大括號可以省去

    若有兩個以上則不能省

    不然就分不清楚哪些指令在 if-else 內,哪些在外了

    以你這題原本的寫法來看

    因為 else if 都沒有加大括號

    printf("錯錯錯 try again\n(RANGE %d 到 %d)\n",a,b); 這行算在 if - else if 之外

    (if else 跟 if - else if 的括號省略規則是一樣的)

    其它參考:

    http://programming.im.ncnu.edu.tw/Chapter6.htm

    http://www.cmlab.csie.ntu.edu.tw/~perng/course/cha...

    第一則網址有 if else 的流程圖

    第二則網址介紹 if else 和 if - else if 的用法

    也有介紹巢狀結構,我覺得滿清楚的

    2011-10-20 20:12:41 補充:

    sorry, 我沒有注意到有少字!

    所有的 if ((y>b) || (y

    都要改為 if ((y>b) || (y<a))

    ps.

    大於小於符號,在意見區打半行會被砍掉

    我打全行,要複製的話記得自行轉換

    2011-10-20 20:15:34 補充:

    另外,附圖用的是偵錯裡面的「逐步執行」

    要找錯誤時很有用,可以試試看

    2011-10-20 20:19:47 補充:

    >由於我 y 輸入 100, 超出 0-99 的範圍

    >(y>b) || (y

    >於是它會進到 if 裡面,印出 "輸入範圍錯誤\\n"

    我原本要打這樣:

    由於我 y 輸入 100, 超出 0-99 的範圍

    ((y>b) || (y<a)) 理所當然為 true

    於是它會進到 if 裡面,印出 "輸入範圍錯誤\\n"

    Source(s): 印象稀薄
  • 恩恩我有發現 感謝感謝^^

Still have questions? Get your answers by asking now.