我是编程的新手,我已经开始自己学习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);
}
答案 0 :(得分:3)
您在main()中扫描了一个数字。 ENTER保留在输入缓冲区中,由函数内部的scanf读取。
要求scanf忽略空格(与"%c"
不同,"%d"
已经自己忽略了空格)
scanf(" %c", ...);
// ^ ignore whitespace
更好。仅将 fgets()
用于用户输入。这是一种安全的选择,具有良好的错误报告和恢复功能。