Программа не возвращает отсканированный символ

#c #char #scanf

#c #символ #scanf

Вопрос:

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

Я попытался создать этот пример кода, но он работает не так, как я надеялся.

 #include <stdio.h>     

char readCharacter();

int main(){
    char x;

    x = readCharacter();

    printf("You inputted %c", x);

    return 0;
}

char readCharacter(){
    char z;
    printf("Input charactern");

    scanf("% c", amp;z);

    return z;
}
 

Я ввожу символ, я решил ввести w, и программа сказала мне, что символ был каким-то странным шрифтом.

Фактический код из моего домашнего задания, или, скорее, фрагмент из него, выглядит следующим образом:

 #include <stdio.h>     // needed by printf, scanf()
#include <ctype.h>     // needed by tolower()
#include <stdlib.h>    // for exit()


double readNumber(char *prompt) {
    double val;

    printf("%s", prompt);

    scanf("% lf", amp;val);

    //if input is not a number, exit program
    if (scanf("%lf", amp;val) != 1) {
        printf("Invalid input.n");
        exit(1);
    }

    return val;
}


char readYesOrNo(char* prompt) {
    char yn;

    printf("%sn", prompt);

    scanf("% c", amp;yn);

    return yn;
}



int main() {

    double bonus;
    char yesNo;



    yesNo = readYesOrNo("Did the worker get a bonus ? (y/n) ");

    if (yesNo == 'y' || yesNo == 'Y') {
        bonus = readNumber("Enter bonus: ");
    }
    else {
        bonus = 0;
    }


return 0;
}
 

В фактическом домашнем коде функция readYesOrNo даже не ждет, пока я что-либо введу, она просто отображает приглашение с запросом ответа y / n, затем переходит к следующей строке кода, не дожидаясь ввода пользователем и предполагая отсутствие ответа.

Я понятия не имею, почему это не работает.

Комментарии:

1. Не ставьте пробел между% и c.

2. Вы вводите случайные пробелы повсюду. Почему?

Ответ №1:

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

Эта строка:

 scanf("% c", amp;z);
 

Должно быть так:

 scanf("%c", amp;z);
 

Комментарии:

1. Это устранило проблему в моем примере кода и в фрагменте, который я опубликовал, но когда я попытался применить это изменение к моему фактическому домашнему коду, код не позволил мне ничего вводить, вместо этого просто разместив приглашение, не позволяя мне ничего вводить. Мой исходный пост был отредактирован, чтобы включить мой код домашней работы.

2. Прошу прощения, вместо того, чтобы программирование просто пропускало ввод, оно на самом деле просто вылетает.

3. Я полагаю, вы scanf("% lf", amp;val); также исправили строку, верно?

4. Кроме того, ваша readNumber функция вызывается scanf дважды. Поэтому я должен ввести число дважды, чтобы вернуть эту функцию.