我的代码在重复自己,而不是允许用户输入

时间:2019-04-06 00:59:48

标签: c function

嘿,我编写了一个包含各种功能的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%。

谢谢您的帮助

1 个答案:

答案 0 :(得分:0)

您遇到的问题是您尚未清除输入缓冲区。

因此,当您使用scanf("%c", &ch);时,它不会获得您刚刚键入的密钥,而是得到您之前键入的密钥。

上次您检查他们是否要继续执行该程序时,或者在您的一项功能中,可能会键入此键。

无论如何,解决方案是在获得输入之前先写fflush(stdin);

还,您是否注意到if语句末尾的括号不匹配? 那与您的问题不符,因此我只是以为您提出问题时是一个错误。

您的缩进确实很烦人,花了我很长时间才能理解您的代码。