嘿,我编写了一个包含各种功能的c代码,但是我在代码末尾遇到了问题。这是我的代码的函数主体
result = 8 - 4 ** 3 / 5 // 2 % 15 * 2
我在最后一部分上遇到问题
int main() {
do {
printf("-- Wind turbine power calculator -- \n");
/*defining variables for each function,
Cp = performance coefficient,
Ng = generator efficiency,
Nb = gearbox efficiency,
V = velocity,
hA = horizontal area,
vA = vertical area,
d = rotor diameter,
h = rotor height,
a = altitude,
t = type of turbine */
double t, V, Cp, Ng, Nb, p, Pwr, d, a, h, hA, vA, A;
char ch, n, y, N, Y;
t = getType();
d = getDiameter();
h = getHeight();
a = getAltitude();
V = getVelocity();
Cp = getPerformance();
Ng = getGenerator();
Nb = getGearbox();
p = density(a);
hA = hArea(d);
vA = vArea(d, h);
/*setting the area in the power equation to equal the calculated vertical or horizontal area depending on the input from user*/
if (t == 'v' || t == 'V') {
A = vA;
} else if (t == 'h' || t == 'H') {
A = hA;
}
/*calculating the power of the wind turbine calling on the functions within the code*/
Pwr = A * p * Cp * 0.5 * Ng * Nb * V * V * V;
printf("The turbine power is %0.0lf KW\n", Pwr);
/*asking the user if they want to continue the program, if not the program will end*/
printf("\nDo you want to continue (y/n):");
scanf("%c", & ch);
if (ch == 'n' || ch == 'N')
break;
printf("\nThe program has been terminated\n");
}while (1);
return 0;
}
当代码涉及到此部分时,它只会自动重复自身,并且不允许用户输入其输入,然后决定是否应该再次运行或终止。
有关如何解决此问题的任何想法?我认为一种方法可能与scanf属性有关,但我不确定100%。
谢谢您的帮助
答案 0 :(得分:0)
您遇到的问题是您尚未清除输入缓冲区。
因此,当您使用scanf("%c", &ch);
时,它不会获得您刚刚键入的密钥,而是得到您之前键入的密钥。
上次您检查他们是否要继续执行该程序时,或者在您的一项功能中,可能会键入此键。
无论如何,解决方案是在获得输入之前先写fflush(stdin);
。
还,您是否注意到if语句末尾的括号不匹配? 那与您的问题不符,因此我只是以为您提出问题时是一个错误。
您的缩进确实很烦人,花了我很长时间才能理解您的代码。