《C語言及程式設計》實踐參考 總是多一次?

2021-09-23 17:45:45 字數 1373 閱讀 3404

返回:賀老師課程教學鏈結

專案要求

【專案2-總是多一次?】

先閱讀下面的程式。這樣的結構,經常用於重複性工作。執行一次程式要完成的工作後,由操作人員選擇,決定是否還來一遍。

#includevoid dosomething(int *p);

int main( )

return 0;

}void dosomething(int *p) //完成特定的業務

通過單步的方式,找出問題的原因,並自行查詢資料,找出解決的辦法。

[參考解答]

1. 斷點設定在第7行,要在每次執行中,觀察這個choice是怎麼搞的,連個'n'者找不准?

2. 執行到了第11行,scanf處輸入y

3. 繼續next line,發現choice挺乖的,值為'y『。當然,while迴圈得以進入,現在已經要再來一次scanf了,期望再次從鍵盤上輸入你的選擇……

4. next line後,你失望了,程式沒有停下來讓你輸入,而是再次到了第7行的while語句。這時,看chioce的值!沒錯,ascii值為10,對應的是'\n'。

5. 想想,剛才輸入完了y後,還輸入了乙個回車。系統當你輸入了兩個符號,乙個y,另乙個就是回車。上一次迴圈,用y,這一次,用回車。(原理:在輸入輸出時,系統分配一段記憶體區域,稱作為「快取區」,將用於輸入輸出的內容就放在這段區域中。現在說輸入的問題。當快取區空了後,會等待使用者從鍵盤輸入,而如果快取區中「有貨」,就直接用了。對於本文中的問題,輸入的y和回車放在快取區中,取出了y,但回車還在,下一次時,就直接拿出回車來用了。)至此,問題已經大白於天下。

如何改程式?

希望快取區中剩餘的回車不要影響下一次,於是,要在下一次執行scanf前,將快取區里的「殘存物」(這個壞蛋!)清理掉。用fflush(stdin);,fflush是用於清空快取區的函式,stdin代表標準輸入(鍵盤),清除的是鍵盤快取區。

為找感覺,執行程式要求你輸入時,隨便多輸入幾個符號,你看到的是

(你可以思考了。)

修改後的main函式是:

int main( )

return 0;

}

《C語言及程式設計》實踐參考 查成績

返回 賀老師課程教學鏈結 專案要求 專案4 查成績 1 score1.txt提供了某大學兩個班某次測驗的資料,包括每位同學的學號及成績。請程式設計序,輸入學號,查詢出該同學的成績。提示1 可以定義兩個int型陣列,其中乙個n存放學號,另乙個s存放成績,可以保證兩個陣列中,元素下標相同,對應的是同一位...

《C語言及程式設計》實踐參考 隨便改

返回 賀老師課程教學鏈結 專案3 隨便改 保持下面程式主體for迴圈部分不變,用你能想到的辦法修改程式,使下面程式的輸出的a每次都能變化,輸出1 2 3 4 include void change int a int main return 0 include int a 0 void change...

《C語言及程式設計》實踐參考 正差值

返回 賀老師課程教學鏈結 c語言及程式設計初步 專案要求 專案1 正差值 給定兩個正整數,求出兩數的正差值並輸出。樣例輸入 樣例輸出 7 10 3 12 7 5 解答一 根據比較結果,直接輸出大值減小值的差 include int main else printf n return 0 解答二 用另...