有人知道如何处理吗?

时间:2019-06-16 15:25:38

标签: c

我是编程的新手,我已经开始自己学习C语言。尽管以下屏幕截图存在问题,但我无法理解其逻辑。具体来说,我不知道为什么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 个答案:

答案 0 :(得分:3)

您在main()中扫描了一个数字。 ENTER保留在输入缓冲区中,由函数内部的scanf读取。

要求scanf忽略空格(与"%c"不同,"%d"已经自己忽略了空格)

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

更好。仅将 fgets()用于用户输入。这是一种安全的选择,具有良好的错误报告和恢复功能。