закрывается окно при выполнении программы

интересует с чем может быть связана эта проблема, когда запускаешь программу она выводит текс в консоли и предлагает ввести вес, но когда ты его ввел и нажал enter программа выполняет остальные части кода и закрывается. Пробовал подставлять getchar() перед return 0, не помогло.

#include <stdio.h>
int main(void)
{
    float weight;
    float value;

    printf("Want to know your rhodium equivalent ?\n");
    printf("Let's count.\n");
    printf("enter your weight in pounds:");
    `scanf("%f", &weight);`
    value = 770.0 * weight * 14.5833;
    printf("Your rhodium equivalent is $%.2f.\n", value);
    printf("You can easily become worthy of it! If the price of rhodium falls,\n");
    printf("eat more to maintain your value.\n");
   
    return 0;    
}

на выходе должно получиться вот это

Want to know your rhodium equivalent ?
Let's count.
enter your weight in pounds:150
Your rhodium equivalent is $1684371.12.
You can easily become worthy of it! If the price of rhodium falls,
eat more to maintain your value.

Ответы (1 шт):

Автор решения: Stanislav Volodarskiy

Надо сделать getchar() два раза:

#include <stdio.h>
int main(void)
{
    float weight;
    float value;

    printf("Want to know your rhodium equivalent ?\n");
    printf("Let's count.\n");
    printf("enter your weight in pounds:");
    scanf("%f", &weight);
    value = 770.0 * weight * 14.5833;
    printf("Your rhodium equivalent is $%.2f.\n", value);
    printf("You can easily become worthy of it! If the price of rhodium falls,\n");
    printf("eat more to maintain your value.\n");

    getchar();
    getchar();
   
    return 0;    
}

Ради простоты я всё предельно упрощаю, но scanf читает число до перевода строки после него. Этот перевод строки остаётся непрочитанным, но вы его уже ввели. Первый getchar его читает без остановки, потому что он уже введён. А второй getchar будет ждать следующий символ, то есть программа остановится из-за отсутствия данных. А это то что вам нужно.

Что происходит Буфер ввода
Программа доходит до scanf("%f", &weight); и останавливается: данных нет. ""
Пользователь видит приглашение и вводит 3, 3, <Enter>. Они попадают в буфер. "33\n"
Программа читает число 33 и продолжает работу. Перевод строки остался в буфере. "\n"
Программа доходит до getchar() и немедленно читает символ из буфера. ""
Если программа вызовет getchar() ещё раз, она остановится без данных. ""
Пользователь нажмёт <Enter>, если догадается, и он попадет в буфер. "\n"
Программа прочитает символ и завершит работу. ""

Но эта схема не очень надёжная. Если вы введёте число, пробел и нажмёте Enter, всё снова сломается, программа не остановится. Надо сделать функцию, которая пропускает все символы до конца строки. Если интересно, оставьте комментарий, я продолжу.

→ Ссылка