作者PanYX (Panpeter)
看板C_and_CPP
標題[問題] C語言變數宣告問題
時間Wed Jan 2 23:34:59 2019
開發平台(Platform): (Ex: Win10, Linux, ...)
Win10
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
DEV-C++
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
問題(Question):
目前已知a,b,c變數宣告為單精度浮點數float答案是正確的
可是為什麼不能把a,b,c變數宣告為double倍精度浮點數?
餵入的資料(Input):
a=1,b=6,c=2
預期的正確結果(Expected Output):
此方程式有兩個實根:x=-0.354248762,x=-5.645751
錯誤結果(Wrong Output):
沒有實根
程式碼(Code):(請善用置底文網頁, 記得排版,禁止使用圖檔)
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main (void)
{
double a,b,c;
double value,r1,r2;
printf("請輸入a,b,c的值:");
scanf("%f,%f,%f",&a,&b,&c);
value = b*b-4*a*c;
r1=(-b+(float)(sqrt(b*b-4*a*c)))/(2*a);
r2=(-b-(float)(sqrt(b*b-4*a*c)))/(2*a);
if(value>0)
{
printf("此方程式有兩個實根:x=%f,x=%f\n",r1,r2);
}
else if(value==0)
{
r1=(-b)/(2*a);
printf("此方程式有兩個相等實根:x=%f\n",r1);
}
else
{
printf("沒有實根\n");
}
system("pause");
return 0;
}
補充說明(Supplement):
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.205.139.5
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1546443301.A.A8D.html
→ Schottky: scanf 寫錯了,double float 要用 %lf 01/03 00:08
→ Schottky: 我記得這樣寫會有Warning? 01/03 00:09
→ PanYX: 因為我是使用dev-c++沒測試過其他編譯器,他是沒有警告的 01/03 00:26
→ PanYX: 所以以後如果是double就要用%lf這樣資料比較不會出錯嗎? 01/03 00:28
→ Schottky: 可能要開 -Wall 選項吧,我習慣Warning全開所以不太確定 01/03 00:34
→ Schottky: 你可以讀一下 scanf 的 man page 或說明網頁 01/03 00:34
→ PanYX: 好的 我再去看看資料 謝謝S大 01/03 00:42
推 KALR: 題外話,double 或 float 變數不要跟0做比較 01/03 02:33
→ Schottky: 應該說不要做 float == 0 的判斷,比大小是可以的 01/03 03:14
→ PanYX: 又學到了一課 謝謝 01/03 04:06
→ Gway: 推文講的好! 01/09 07:15