《面向对象程序设计》课程作业二
github鏈接
作業(yè)鏈接
編寫一個程序,要求根據(jù)給定的圓的半徑求圓的面積,并將求得的結(jié)果打印出來。……建立一個工程,將程序?qū)懗蓛蓚€.cpp和一個.h的形式。
這個問題倒是沒什么難的,但對于同學(xué)們來說是一個上手模塊化的好開端。從現(xiàn)在開始,不是只為了AC而寫代碼,而是要寫“有質(zhì)量的代碼”、“讓別人看得懂的代碼”。在我看來,每行每業(yè)都有前人總結(jié)的“經(jīng)驗”。那“高內(nèi)聚低耦合”、“模塊化”,這兩條就是編程中很重要的兩條道理。第一個是問題的粒度,如果問題的規(guī)模很大,就應(yīng)該將其分模塊,然后逐個攻破。這樣子做代碼結(jié)構(gòu)、脈絡(luò)清晰,使得思路容易分析,然后方便debug、合作編程和迭代。電腦還是挺死板的,你怎么打代碼它就按照你的代碼做。但如果你只是為了AC寫代碼,寫出來的代碼雜亂、命名不規(guī)范、格式亂套、沒有分模塊……讓別人想看的欲望都沒有,那你就不適應(yīng)合作編程的要求。巨大的工程很難由一個人單獨完成,刷boss也得組幾個隊友對不對?
我之前的計算器作業(yè)中是有分多個文件的。但我在一個 .h 頭文件中同時包括了函數(shù)聲明和定義。這次的作業(yè)讓我學(xué)到了一個只將聲明放在 .h 中,而定義全放到新的 .cpp 文件中去。這樣子做,如果別人想看你的代碼能做到什么功能,只需看 .h 中的所有函數(shù)聲明即可。
cin輸入檢測
基于棟哥上課提出的問題:
int a, b; cin >> a >> b; cout<< a + b;/* 輸入 3a5輸出 3 (a = 3,b = 0) */下面節(jié)選自 人民郵電出版社《C++ Primer Plus》 第六版 第755頁內(nèi)容:
不同版本抽取運算符查看輸入流的方式是相同的。跳過空白(空格、換行、制表符),直到遇到非空白字符。…… >> 運算符將讀取一個指定類型的數(shù)據(jù)。
在上面這個例子中,輸入 3a5 那么 3 賦值給了變量a,輸入中的字符a會留在輸入流中等待下一條 cin 語句。輸入時沒有滿足程序期望的情況,例如上面的變量b,這種情況下,將不會改變變量b的值(因此,如果b有初始化的話,那么b會保持初始化的值)。cin中有一些狀態(tài),會設(shè)置為false。這個false的返回值可以讓if、while語句來判定輸入是否滿足要求。
C++ 的一個與 C 最大的區(qū)別就在于類。C語言中用 %d 、scanf 的返回值這樣的東西來檢測輸入。而 C++ 將其封裝成各種成員函數(shù)。詳細(xì)可以看看這兩篇博客:
cin.fail() 示例代碼簡潔易懂。
cin.get,cin.clear以及cin.sync 這篇比較詳細(xì)。
Something else
這個例子(輸入3a5)讓我想到了我之前的程序。我之前是寫了挺多的輸入檢測方面的函數(shù),比方說輸入題目數(shù)量時可以檢測出輸入字符串并報錯然后提示用戶重新輸入一遍。然后我猛地一想到好像類似于 3a5 的我沒辦法檢測出來。
如圖所示,在輸入題目數(shù)量時,輸入3a5。程序會認(rèn)為用戶輸入的題目數(shù)量為3,然后a5留在緩沖區(qū)中等待下一條輸入,并被檢測答案輸入的有效性的函數(shù)給擋住,并輸出錯誤提示。
這是我之前的檢測代碼:
while (scanf_s("%d", &input) != 1)//輸入的不是%d{while ((ch = getchar()) != '\n')putchar(ch);//如果用戶輸入了字符串,就顯示這個字符串,并且在顯示“不符合要求”}在這段之后再加上這一條
while((ch = getchar()) != '\n' && ch != EOF);//清空緩存區(qū)轉(zhuǎn)載于:https://www.cnblogs.com/ZCplayground/p/6774555.html
總結(jié)
以上是生活随笔為你收集整理的《面向对象程序设计》课程作业二的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python shutil.md
- 下一篇: 事务基本信息