Программа C завершает работу перед тем, как принять ввод функции scanf () - PullRequest
0 голосов
/ 01 октября 2019

Хотя я понимаю, что макет этой программы странный, я думаю, что моя программа испытывает проблемы, когда дело доходит до строки scanf(). По какой-то причине после ввода функции metricConversion(). Строка scanf() печатается, но программа завершает работу и завершает работу перед тем, как вводить данные ... Я не понимаю, почему это происходит ...

#include <stdio.h>

char inputtedChar;
int inputtedInt;

int metricConversion(){
    scanf("Press K for conversion from Kelvin to Celsius %c", &inputtedChar);

    if(inputtedChar == 'K'){
        //do Something
    } else { return 0; }
}

int main() {
    printf("Press 0 to enter conversion function!");
    scanf("%d", &inputtedInt);

    if (inputtedInt == 0) {
        metricConversion();
    }
}

Более важно, может кто-то объяснить, почему scanf()работает так, как работает? И каковы лучшие альтернативы, чтобы я не столкнулся с этим снова?

1 Ответ

3 голосов
/ 01 октября 2019

Измените scanf("Press K for conversion from Kelvin to Celsius %c", &inputtedChar); на:

printf("Press K for conversion from Kelvin to Celsius ");
fflush(stdout);
scanf(" %c", &inputtedChar);
/*     ^                    */
/*   this space             */

Было 2 проблемы. Используйте printf для подсказки. И вам нужно использовать пробел в scanf, чтобы игнорировать пробелы перед преобразованием %c, %[…] (набор сканирования) или %n. Использование fflush гарантирует, что приглашение будет напечатано на экране до его ожидания ввода.

Рекомендуется также использовать функцию fflush перед scanf в main, если только вы не хотите прекратить печать. строка с '\n'.


Что означает scanf("Press K for conversion from Kelvin to Celsius %c", &inputtedChar);?

Это ничего не печатает. Это означает, что программа ожидает точного ввода Press K for conversion from Kelvin to Celsius <SOME_CHAR> и читает <SOME_CHAR> на входе. Для более подробной информации вам нужно понять регулярное выражение.

...