мой код повторяется, а не для ввода пользователя - PullRequest
0 голосов
/ 06 апреля 2019

эй, я написал код c, который включает в себя различные функции, однако у меня возникают проблемы в конце моего кода. это основная функция моего кода

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;
}

У меня проблемы с последней частью



 /*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 голосов
/ 06 апреля 2019

Проблема, с которой вы сталкиваетесь, заключается в том, что вы не очистили буфер ввода.

Поэтому, когда вы использовали scanf("%c", &ch);, он получал не только что набранный вами ключ, но ключ, который вы набирали до этого.

Эта клавиша может вводиться в последний раз, когда вы проверяли, хотят ли они продолжить программу или в одной из ваших функций.

В любом случае, решение состоит в том, чтобы написать fflush(stdin);, прежде чем вы получите ввод.

Кроме того, вы заметили, что ваша скобка в конце вашего оператора if не совпадает?Это не будет соответствовать вашей проблеме, поэтому я просто предположил, что это было ошибкой, когда вы задали вопрос.

И ваши отступы действительно раздражают, мне потребовалось слишком много времени, чтобы понять ваш код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...