Кто-нибудь может знать, как с этим бороться? - PullRequest
0 голосов
/ 16 июня 2019

Я новичок в программировании, и я начал изучать язык Си самостоятельно.Хотя на следующем снимке экрана есть проблема, я не могу понять ее логику.В частности, я не знаю, почему C пропускает часть scanf в вызываемой функции.Имеет ли значение порядок звонков?Большое спасибо.

Вот скриншот: https://imgur.com/a/fnfm9al

#include <stdio.h>
void GiveLetter(); // function prototype #1
void GiveNumber(); // function prototype #2
int main ()
{
    int x;
    printf("Give me the first number:");
    scanf("%d",&x);
    printf("Your first number is: %d\n",x);
    printf("Hello Panos\n");
    GiveLetter();
    GiveNumber();
    return 0;

}
void  GiveLetter()
{
    char Letter;
    printf("Give a letter:\n");
    scanf("%c",&Letter);
    printf("Your letter is %c\n",Letter);
}
void GiveNumber()
{
    int Number;

    printf("Give the second number:");
    scanf("%d",&Number);
    printf("Your second number is %d\n",Number);
}

1 Ответ

3 голосов
/ 16 июня 2019

Вы сканируете число в main ().Это оставляет ENTER во входном буфере, который читается scanf внутри функции.

Попросить scanf игнорировать пробел (в отличие от "%c", "%d" уже игнорирует пробел самостоятельно)

scanf(" %c", ...);
//     ^ ignore whitespace

Еще лучше.Используйте только fgets() для ввода пользователя.Это безопасная альтернатива, с хорошим отчетом об ошибках и восстановлением.

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