這個程式第十行,我設定的是首先判斷a的值是否大于1,是則直接輸出a作為b的值,否則再做一次判斷,即a的值是否大于等于0,是則輸出a的倒數作為b的值,否則輸出a的相反數作為b的值。如圖,輸入x=1,y=10,則運算a的值應為0.4<1,則輸出b應為a的倒數,即2.5。但是為什么在除錯時b的值直接輸出了a的值,而不是a的倒數?

uj5u.com熱心網友回復:
可以把你的代碼復制黏貼上來嗎?我得到2.5
uj5u.com熱心網友回復:
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int main()
{
double x, y, a , b;
printf("Input the value of x,y:");
scanf_s("%lf%lf", &x, &y);
a = (x * 2 + 2) / y;
b=(a >= 1 ? a : (a >= 0 && a < 1 ? 1 / a : -1 * a));
printf("%lf", b);
system("pause");
return 0;
}
uj5u.com熱心網友回復:
奇怪我用了你的代碼還是2.5
b = (a >= 1 ? a : (a >= 0 && a < 1 ? 1 / a : -1 * a));
改成
b = (a >= 1 ? a : (((a >= 0) && (a < 1)) ? (1 / a) : (-1 * a)));
試試呢
uj5u.com熱心網友回復:
還是不行,難不成是編譯器問題?

uj5u.com熱心網友回復:
vs嗎,我也是呀,2017的
按理說不可能呀
uj5u.com熱心網友回復:
a < 1這條件可以去掉uj5u.com熱心網友回復:
奇怪
我用了你的代碼還是2.5
b = (a >= 1 ? a : (a >= 0 && a < 1 ? 1 / a : -1 * a));
改成
b = (a >= 1 ? a : (((a >= 0) && (a < 1)) ? (1 / a) : (-1 * a)));
試試呢
還是不行,難不成是編譯器問題?
vs嗎,我也是呀,2017的
按理說不可能呀
啊這,果然編譯器有問題,我在虛擬機里跑XP,用VC++6.0最終得到了2.5.......


VS2019可能改了點我不知道的特性吧,我了解下
uj5u.com熱心網友回復:
a < 1這條件可以去掉
這樣也可以!了解了
VS2019還是0.4,怎么改都不行,我猜是編譯器出問題了
VC++6.0沒有問題,輸出2.5
我帶上a<1主要是因為避免和前邊a>1重疊。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/37729.html
標籤:C語言
上一篇:錯誤串列的問題怎么解決,求答案
下一篇:cpp中下劃線開頭的方法
