Мой цикл scanf не останавливается; пока условие не работает - PullRequest
0 голосов
/ 25 марта 2019

Я должен был выполнить это упражнение: написать программу на C, чтобы напечатать диаграмму частот на экране. Вход и выход: программа получает на вход последовательность троек (число, частота, символ). Для каждой последовательности следует напечатать косую черту, создав график, как в примере ниже.

Пример Для ввода

(5,12, -) (4,17, -) (2,1, -) (1,19, +)

программа должна напечатать

  5 | ------------ 12
  4 | ----------------- 17
  2 | -
  1 | +++++++++++++++++++ 19

Я понимаю, что, если я помещаю пробел перед предложением в функции scanf, это работает очень хорошо, но программа не завершается, когда это ожидалось

int main()
{
    int x, b, i, u;
    char n;

    do{
        u = scanf(" (%d,%d,%c)", &x, &b, &n);
        printf("%d |", x);
        for (i = 0; i < b; i++){
            printf("%c", n);
        }
        printf(" %d\n", b);
    }while(u == 3);
}

Ожидалось, что, когда scanf не прочитает 3 вещи, которые он должен был сделать, цикл while заканчивается, и программа завершается. Но, когда это произойдет, он все еще ждет нового ввода. Как мне это исправить?

1 Ответ

1 голос
/ 25 марта 2019

просто проверьте возвращаемое значение u, а затем используйте условие if. Это должно остановить цикл while и выйти из программы

int main()
{
int x, b, i, u;
char n;


do{
    u = scanf(" (%d,%d,%c)", &x, &b, &n);
    if(u == 3){
        printf("%d |", x);
        for (i = 0; i < b; i++){
            printf("%c", n);
        }
        printf(" %d\n", b);
    }

}while(u == 3);
...