影响输出的多个printf/scanf
我有一个由两部分组成的简单程序 一部分询问您最喜欢的号码,然后返回您最喜欢的号码 另一部分询问您最喜欢的字母是什么,并返回该字符的ASCII码 每一部分都独立于另一部分工作,当代码中最喜欢的字母部分位于代码中最喜欢的数字部分之前时,这两部分都会按顺序正确执行 但是,当我修改代码的顺序,使最喜欢的数字部分位于最喜欢的字母部分之前时,我遇到了一个问题。输出允许我输入我最喜欢的号码,然后扫描并返回。然后它只打印程序的其余部分,而不让我有机会输入我最喜欢的字母 正确工作的代码:影响输出的多个printf/scanf,c,printf,scanf,C,Printf,Scanf,我有一个由两部分组成的简单程序 一部分询问您最喜欢的号码,然后返回您最喜欢的号码 另一部分询问您最喜欢的字母是什么,并返回该字符的ASCII码 每一部分都独立于另一部分工作,当代码中最喜欢的字母部分位于代码中最喜欢的数字部分之前时,这两部分都会按顺序正确执行 但是,当我修改代码的顺序,使最喜欢的数字部分位于最喜欢的字母部分之前时,我遇到了一个问题。输出允许我输入我最喜欢的号码,然后扫描并返回。然后它只打印程序的其余部分,而不让我有机会输入我最喜欢的字母 正确工作的代码: #include <
#include <stdio.h>
int main() {
int favorite_number;
char favorite_letter;
int favorite_letter_code;
/* FAVORITE LETTER */
printf("Enter your favorite letter> \n");
scanf("%c", &favorite_letter);
favorite_letter_code = (int)favorite_letter;
printf("The ASCII code for your favorite letter is is %d\n",
favorite_letter_code);
/* FAVORITE NUMBER */
printf("Enter your favorite number> \n");
scanf("%d", &favorite_number);
printf("Your favorite number is %d!\n", favorite_number);
return 0;
}
#包括
int main(){
整数;
最喜欢的字母;
int收藏夹字母代码;
/*最喜欢的信*/
printf(“输入您最喜爱的字母>\n”);
scanf(“%c”和最喜欢的字母);
收藏夹字母代码=(int)收藏夹字母;
printf(“您最喜欢的字母的ASCII码是%d\n”,
常用字母(代码);
/*最喜欢的号码*/
printf(“输入您最喜爱的号码>\n”);
scanf(“%d”&最喜爱的号码);
printf(“您最喜欢的号码是%d!\n”,最喜欢的号码);
返回0;
}
工作不正确的代码(只需切换收藏夹字母和收藏夹数字部分):
#包括
int main(){
整数;
最喜欢的字母;
int收藏夹字母代码;
/*最喜欢的号码*/
printf(“输入您最喜爱的号码>\n”);
scanf(“%d”&最喜爱的号码);
printf(“您最喜欢的号码是%d!\n”,最喜欢的号码);
/*最喜欢的信*/
printf(“输入您最喜爱的字母>\n”);
scanf(“%c”和最喜欢的字母);
收藏夹字母代码=(int)收藏夹字母;
printf(“您最喜欢的字母的ASCII码是%d\n”,
常用字母(代码);
返回0;
}
为什么此顺序会影响输出?使用
scanf
读取favorite\u编号
后,您键入的换行符仍在stdin
中挂起,您在读取favorite\u字母
时应忽略空格,以便跳过它:
scanf(" %c", &favorite_letter);
注意
%c
前面的空格,它告诉scanf
忽略任何空格。当您执行scanf(“%d”,…)
时,它读取一个整数。在控制台上输入文本时,输入一个整数,然后按enter键。该scanf
调用不使用回车键生成的换行符(它保留在输入缓冲区中)。当您执行scanf(“%c”,…)
时,它会看到缓冲区(换行符)中已经存在一个字符,并将其读入,而不是您所期望的内容。您需要明确说明该换行符。这是使用scanf最烦人的部分之一,你试过检查scanf的返回码吗?
scanf(" %c", &favorite_letter);