一個簡單C語言編程問題?
老師給我們布置了一個作業,設計一個程序如下:
通過鍵盤輸入兩個數據,一個字元,
如果該字元是+,則執行兩個數據的加法運算;
如果該字元是-,則執行兩個數據的減法運算;
如果該字元是*,則執行兩個數據的乘法運算;
如果該字元是/,則執行兩個數據的除法運算;
然後輸出運算結果;
(若不是+,-,*,/字元,則原樣輸出該字元。)
以下是我寫的代碼,運行倒是可以,但是結果總是兩個數相加所得的結果!
#include&
int main()
{
double a,b,c;
char ch;
scanf("%lg%lg",a,b);
ch=getchar();
if (ch="+") c=a+b printf("%lg",c);
else if (ch="-") c=a-b printf("%lg",c);
else if (ch="*") c=a*b printf("%lg",c);
else if (ch="/") c=a/b printf("%lg",c);
else printf("%c",ch);
return 0;
}
希望大神可以幫我改正改正,謝謝了!
請複習"="和"=="的區別
不急。有心學就是好的。書讀百遍,其義自現。多debug。
首先。你要了解需求是什麼。如何實現功能。
需求:獲取兩個數,然後根據之後給出的命令做相應運算。
功能實現:
//獲取數據
double a,b,c;
char ch;
scanf("%lg%lg",a,b);
ch=getchar();
//根據命令執行運算並輸出結果,原答案是=搞錯,c語言裡面=是賦值,==是判斷是否相等,
if (ch=="+") c=a+b , printf("%lg",c);
else if (ch=="-") c=a-b , printf("%lg",c);
else if (ch=="*") c=a*b , printf("%lg",c);
else if (ch=="/") c=a/b , printf("%lg",c);
else printf("%c",ch);
看了注釋是不是就很清楚了。
1.注意寫注釋,寫的啰嗦不怕。重要的是寫的過程中你可以把流程理清楚
2.注意編碼規範這些可以慢慢學,平時寫的時候注意點,大家都是這樣來的(哪個敢說上學時變數用的不是abc的?)
3.多看書~~·
4.加油!未來的碼農!多debug!
同學,我只能說你的代碼風格相當糟糕,(估計譚浩強的書看多了!),其次我覺得你還是先看看書然後再作業吧!賦值符和邏輯判斷符都沒有分清楚。(不知道是你們老師沒教,還是上課夢遊去了)。
最後,請獨立完成作業。
==============================================================分割線
卧槽,真沒有想到題主真是我同學啊。orz..
看到同學的份上,將就你的代碼幫你改改。。。
#include&
int main()
{
double numberA, numberB, result;
//變數命名要清晰易懂,去查查各種命名法吧,比如匈牙利命名法什麼的
char ch;
scanf("%lf%lf", numberA, numberB);
//函數參數之間最好有空格,這樣看清更加清晰
getchar();
scanf("%c", ch);
// 像if,while後面連的括弧之間最好有空格,以便區分函數和關鍵字
if (ch == "+")
{
//每條語句後面都要加分號。Orz
result = numberA + numberB;
//運算符前後最好也有空格分開,這樣讓別人更好看清楚
printf("%lg", result);
//再有就是每個語句最好單獨一行,方便調試,也方便給人看,(少用逗號來分割語句)
}
else if (ch == "-")
{
result = numberA - numberB;
printf("%lg", result);
}
else if (ch == "*")
{
result = numberA * numberB;
printf("%lg", result);
}
else if (ch == "/")
{
result = numberA / numberB;
printf("%lg", result);
}
else
printf("error!");
/*
還有就是,善用空行,但是return語句之後不要有空行 if/else語句和{}之間不能有空行
空行的意義之一是用於區分不同功能的代碼段,並且還要同一段緊湊的代碼的賦值運算符儘可能保 持一致
*/
return 0;
}
還有就是,這段代碼還有很多可以優化的地方,比如可以用switch語句而不是if else(因為你這麼用if的話增加了判斷次數,降低了效率),還有就是沒有加入相應的異常處理機制(萬一除數是0怎麼辦?)。。等等。。
引用我以前在《黑客與畫家》上看到的一句話:程序寫出來是給人看的,附帶能在機器上運行。
建議以後多看點好的開源項目,就算看不懂,看看裡面的風格也是很好的
ps:不太會用知乎的代碼編輯器,有些地方沒有改好。嗚嗚::&>_&<::
#include&
int main()
{
double a,b,c;
char ch;
scanf("%lg%lg",a,b);
ch=getchar();
ch=getchar();
if (ch=="+") c=a+b , printf("%lg",c);
else if (ch=="-") c=a-b , printf("%lg",c);
else if (ch=="*") c=a*b , printf("%lg",c);
else if (ch=="/") c=a/b , printf("%lg",c);
else printf("%c",ch);
return 0;
}
為什麼要有2個getchar()呢?請溫故書上的內容,第一個getchar()是接收"
"也就是回車鍵的。如果覺得好請點贊~~
把 『==』 誤寫成 『=』 是很多程序員都會犯的錯誤,尤其剛剛入門。這種錯誤有一個很煩人的地方就是printf調試也不太容易發現。
有一種編程風格可以避免這種錯誤。就是把常量等寫在等號前面。
像這樣:
if (NULL == ptr) { do something; }
if ("+" == ch) { do something; }
這麼做的好處是編譯器會幫你指出錯誤。
雖然這種寫法也有一些缺點,(比如降低了程序的易讀性),但是對新手而言仍不失為一個有用的小trick。
coding入門會有些無聊,枯燥,甚至痛苦。但千萬不要失去信心,入門之後會發現編程特別好玩。
祝順利
你把這個代碼寫的我這個外行都實在是有點看不下去,多看書,多看書上例題…
1、上面的回答提到的=和==的區別使用,這區別很大的,看書搞明白
2、上面有回答給了個基本完整的答案,不過我覺得後面的判斷為什麼不用switch case語句,你不覺得if else這麼多很煩嗎?
你這代碼一看就是上課聽了個半懂,然後書一點沒看就自己在那編寫作業……有在這兒發帖的時間,多看看書,如果你們的教材不行可以去圖書館找別的書,我相信如果你認真看過書、練習運行過書上的例題,你肯定寫不出這樣的代碼……
c缺陷與陷阱和c專家編程。
你的問題書上有說,這兩本書你值得擁有。
為什麼要幫別人解決問題呢 尤其這種低級錯誤的問題 同學 你不讀書么?不思考么?不去理解基礎的C語言知識么? 不要妄想別人給你快捷的解決方案 或者答案 這個東西debug一會就知道 計算花個把小時也是值得 為嘛要來問呢?還在知乎上 #難道這是釣魚貼#
直白一點說吧,代碼寫的很爛。"="和"=="混淆,scanf後直接getchar會有一個換行符干擾。
好吧,今天的筆試就到這裡,請您回去等待通知
推薦閱讀:
※iOS程序員的第二門語言選什麼?
※目前有哪些計算機編程語言能(或者不能)自舉?
※R語言和D3可視化可以結合起來嗎?
※綠箭俠的編程水平屬於什麼級別?
※數學什麼程度適合學編程啊,自學幾個月編程,淺學html css js ,接觸了點PHP Python?