?? 第8章 順序流程.htm
字號:
<P>cout << he;</P>
<P>這樣寫也把計算結果輸出了,但可能會被人說成“用戶界面不友好”噢。</P>
<P> </P>
<P>來看看我們程序運行時的某種結果。我決定讓它計算:2002 + 1973。你要讓它算什么?你自已試吧。</P>
<P><IMG height=142 src="第8章 順序流程.files/ls08.h3.jpg" width=281
border=0></P>
<P> </P>
<P>雖然是個很不起眼的小程序,雖然只是一道小學低年級的算術題,可是必竟我們親手證明了我們的愛機具有計算能力。得意5秒鐘,我們來繼續(xù)我們的課程。我將通過<B>單步運行</B>來親眼程序是如何一步一步地按順序運行的。</P>
<P>如果你在還在運行著程序,回車鍵關掉那個黑色窗口。</P>
<P>切換回C++ Builder的代碼窗口。</P>
<P> </P>
<P>單步運行是一種最必要的調試方法(其它眾多調試方法幾乎都基于該方法),它可以讓程序按代碼行一步步運行。</P>
<P> </P>
<P>在CB中,通過按F7或F8鍵,可以實現單步運行一個完整的代碼行(不一定是物理上的一行代碼)。F7和F8的功能區(qū)別現暫不必理。本章中,我們使用F8。對應的功能菜單為:</P>
<P><IMG height=234 src="第8章 順序流程.files/ls08.h4.jpg" width=417
border=0></P>
<P>從菜單中看到,F8對應的功能名稱為:Step Over (單步越過)。</P>
<P>按下F8后, 程序開始運行,但并沒有直接出現結果窗口。相反,代碼窗口出現了變化:</P>
<P><IMG height=380 src="第8章 順序流程.files/ls08.h5.gif" width=492
border=0></P>
<P>左邊欄上的 <IMG height=19 src="第8章 順序流程.files/ls08.h6.gif" width=13
border=0> 表示該行是一可以單步中斷的代碼行,而<IMG height=19
src="第8章 順序流程.files/ls08.h7.gif" width=18
border=0>則指示了當前正要運行的代碼行,注意,是正要運行,而不是正在運行。</P>
<P>現在讓我們再按一次F8(在代碼窗口里),可以看到程序往下走到第二個可中斷行。</P>
<P><IMG height=120 src="第8章 順序流程.files/ls08.h8.gif" width=414
border=0></P>
<P> </P>
<P>再按一次F8,程序又往下走了一行(為了方便觀察,我將輸出窗口拉近了一并抓下圖)。</P>
<P><IMG height=109 src="第8章 順序流程.files/ls08.h10.jpg" width=374
border=0></P>
<P>輸出窗口(DOS窗口)有出輸出,并且有光標閃爍,但你可以試著在輸出窗口里敲敲鍵盤,會發(fā)現你并不能在這一步輸入加數1,因為此時程序運行到 cin
>>
js1,但并未執(zhí)行這一行。只有我們再按一下F8(記得在CB的代碼窗口里,而不是在DOS窗口里),程序將要求并允許我們輸入加數1。如果你還沒有再按一次F8,現在按一下。結果如下:</P>
<P><IMG height=137 src="第8章 順序流程.files/ls08.h12.gif" width=306
border=0></P>
<P>我們發(fā)現代碼窗口里暫時沒有<IMG height=19 src="第8章 順序流程.files/ls08.h7.gif" width=18
border=0>了,因為<B>控制權已暫時移交到我們程序</B>,它現在可以輸入了。我們輸入2002,然后回車,<IMG height=19
src="第8章 順序流程.files/ls08.h7.gif" width=18 border=0>很快又出現在代碼窗口里,并且,已經越過 cin
>> js1這一行。</P>
<P> </P>
<P><IMG height=165 src="第8章 順序流程.files/ls08.h9.gif" width=345
border=0></P>
<P> </P>
<P>接下來是提示輸入第二個加數,大同小異。只要你記得當控制權轉到程序時,你需要切換到輸出窗口輸入第二個數。
注意了:最后當程序運行:getchar(),需要我們輸入一個回車時,控制權也會移到程序。由于是在單步運行,所以當我們在輸出窗口最后敲一個回車時,程序同樣不會直接運行到結束。所以你仍得到CB的代碼窗口里按F8。</P>
<P><IMG height=87 src="第8章 順序流程.files/ls08.h14.gif" width=448
border=0></P>
<P>getchar() 以后,程序仍將在return 0; 和最后的一個 ‘}' 上作單步運行兩次才退出。</P>
<P><B>如果你懶得這樣一步步運行到結束,想結束單步運行,可以直接按F9,程序將恢復全速運行,直接運行到結束。</B></P>
<P> </P>
<P>就這樣,我們一步一步地運行完這個程序。我們學會了如何通過F8來單步運行程序,我們也理解了什么叫順序流程。這個程序中每一個可中斷點(事實上也是可執(zhí)行點),在程序運行時,被依照其先后次序,一一執(zhí)行。</P>
<P>如果你還是不理解什么叫“順序”,那就從椅子上站起來,然后雙眼直直地瞄住一面墻(挑結實一點的),然后直直地走過去,聽到“砰”的一聲后,你一定會開竅。</P>
<P>(一般不傳之秘笈:當程序員覺得被眼前的代碼弄得頭暈腦脹的時候,大多數人都會起來走走,下樓抽顆煙,或者只是坐坐,吹吹風……最佳方法是挪到不遠處某漂亮的女測試員的桌邊胡說八道幾句,再挪回電腦前,往往發(fā)現問題的答案很簡單?。?lt;BR></P>
<H4><A name=8.1.2>8.1.2</A> 加法計算器(WIN版)</H4>
<P> </P>
<P>我們一直在寫DOS下的程序(控制臺程序)。趁今天的課程知識點不多,我們來寫一個正宗的Windows應用程序。它還是實現一個加法計算器。</P>
<P> </P>
<P>不要做得太順手了!聽我說,如果剛才那個DOS版你還沒保存,請先 Shift + Ctrl + S
保存全部。接著,最好執(zhí)行一下這個菜單命令:File | Close All。如圖:</P>
<P><IMG height=305 src="第8章 順序流程.files/ls08.h15.gif" width=133
border=0></P>
<P> </P>
<P>然后,我們重復一下如何建立一個空白的Windows應用程序工程,我們在以前的課程中曾經做過一次,在作業(yè)里也考過一次。</P>
<P>其實很簡單。菜單: File | New Applicaton (如果是CB6,可能略有不同)。也可以按工具欄上的這個圖標:</P>
<P><IMG height=32 src="第8章 順序流程.files/ls08.h16.gif" width=123
border=0></P>
<P>然后選擇:Application。</P>
<P> </P>
<P>新的空白工程建成以后。我們需要來設計程序界面--畢竟,這是一個有圖形用戶界面(GUI)的Windows程序。</P>
<P>其實很簡單,我們需要兩個編輯框,讓用戶輸入兩個加數。再來一個編輯框用于顯示和。還要一個按鈕,當用戶按下時,加法運算才開始。當然還需要一些標簽用于顯示提示文字。</P>
<P>下面先把要用到三種控件在控件欄位置說一下:</P>
<P><IMG height=78 src="第8章 順序流程.files/ls08.h17.gif" width=258
border=0></P>
<P>這三個控件都在控件欄的Standard頁上。上圖中,</P>
<P>①:標簽控件(TLabel);②:編輯框控件(TEdit);③:按鈕控件(TButton)。</P>
<P> </P>
<P>先在表單上放三個標簽,三個編輯框:(在控件欄上按下控件圖標,然后在表單上單擊)</P>
<P><IMG height=207 src="第8章 順序流程.files/ls08.h18.gif" width=296
border=0></P>
<P>然后,用鼠標單擊表單上的 Label1,如果你看不到下面這個窗口(屬性檢視器),請按F11。</P>
<P><IMG height=237 src="第8章 順序流程.files/ls08.h19.jpg" width=385
border=0></P>
<P>將其Caption(標題)屬性,由原來默認的Label1改為:“請輸入第一個加數:”如圖:</P>
<P><IMG height=239 src="第8章 順序流程.files/ls08.h20.jpg" width=409
border=0></P>
<P>同樣的方法,修改Label2,Label3的標題,分別為:“請輸入第二個加數”和“和”。</P>
<P> </P>
<P>三個編輯框中默認的文本“Edit1”、“Edit2”、“Edit3”我們都不要。編輯框中的文字屬于TEdit的Text屬性。讓我們一起將它們清除:</P>
<P>首先拉動鼠標,一起選中三個編輯框:</P>
<P><IMG height=225 src="第8章 順序流程.files/ls08.h21.gif" width=324
border=0></P>
<P>將上圖中Text屬性的值:Edit1清空。</P>
<P>現在,設計結果如圖:</P>
<P> </P>
<P><IMG height=207 src="第8章 順序流程.files/ls08.h22.gif" width=296
border=0></P>
<P>前兩個編輯框我們準備讓用戶輸入加數,最后一個編輯框要用來顯示相加結果(和),所以最后一個編輯框不能讓用戶修改。編輯框(TEdit)有一個屬性名為ReadOnly(只讀),當它被設置為真(true)時,編輯框的內容不能手工修改。</P>
<P><IMG height=191 src="第8章 順序流程.files/ls08.h24.gif" width=264
border=0></P>
<P>如上圖,將Edit3的ReadOnly屬性改為true(原來默認為false)。修改ReadOnly的結果并不能直接在設計期間看出。</P>
<P> </P>
<P>最后,讓我們再加上一個按鈕(TButton),并改變其Caption屬性為:“加(&A)”</P>
<P><IMG height=182 src="第8章 順序流程.files/ls08.h23.gif" width=296
border=0></P>
<P> </P>
<P>界面設計完成。下面開始代碼設計。</P>
<P>雙擊 “加”按鈕,CB將自動切換到代碼窗口,并且自動生成以下代碼:</P>
<P>void __fastcall TForm1::Button1Click(TObject *Sender)</P>
<P>{</P>
<P> </P>
<P>}</P>
<P>//---------------------------------------------------------------------------</P>
<P> </P>
<P>請加入以下黑體部分的代碼:</P>
<P>void __fastcall TForm1::Button1Click(TObject *Sender)</P>
<P>{</P>
<P><B> int js1,js2;</B></P>
<P><B> int he;</B></P>
<P><B> </B></P>
<P><B> js1 = Edit1->Text.ToIntDef(0);</B></P>
<P><B> js2 = Edit2->Text.ToIntDef(0);</B></P>
<P><B> </B></P>
<P><B> he = js1 + js2;</B></P>
<P><B> Edit3->Text = IntToStr(he);</B></P>
<P>}</P>
<P>//---------------------------------------------------------------------------</P>
<P>js1 =
Edit1->Text.ToIntDef(0);用來得到用戶輸入到Edit1里的數值,你現在可能看不懂,可以不必理會。只要你能看出 js1 =
...這是一句賦值語句。</P>
<P>保存,運行這個程序。我們可以反復輸入不同數讓程序運算。當然,每次運算前,需正確輸入合適的加數,然后按那個按鈕。如果你沒有輸入加數,或者輸入的是非法的字符,如:"ABC"、"-2-3"等無法轉換為數值的內容,則該加數將被當成0。</P>
<P>以下是運行時的一個界面:</P>
<P><IMG height=182 src="第8章 順序流程.files/ls08.h25.jpg" width=296
border=0></P>
<P>你還可以試著在第三個編輯框里敲敲鍵盤,會發(fā)現的確無法改變其內容。</P>
<P> </P>
<P>很開心的一章:我們終于能做些有點意義的小程序了。從身邊找一個會電腦,但沒有學習編程的家伙,我們大可用這個程序小小的炫耀一番。</P>
<P>不過,現在你也應該能理解,為什么我們在學習C,C++語言時,我們?yōu)槭裁创蠖鄷捎肈OS下程序來作為例子,因為若使用Windows程序,它的界面設計很容易讓我們分心。并且,我們還必須面對如Edit2->Text.ToIntDef(0)這些后面才學到的內容。</P>
<P> </P></TD></TR></TBODY></TABLE></CENTER>
<P align=center>[<A
href="http://www.d2school.com/bcyl/bhcpp/newls/ls08.htm#頁首">到頁首</A>]</P></BODY></HTML>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -