我有一个简单的程序,由两部分组成。
一部分要求您最喜欢的号码,然后返回您最喜欢的号码。
另一部分询问你最喜欢的字母是什么,并返回该字符的ASCII码。
每个部分独立工作,当代码中最喜欢的字母部分位于代码中最喜欢的数字部分前面时,两个部分按顺序正确执行。
但是,当我修改代码的顺序时,我遇到了问题,因此最喜欢的数字部分位于最喜欢的字母部分之前。输出允许我输入我最喜欢的数字,然后扫描并返回。然后它只打印程序的其余部分,而不允许我输入我最喜欢的字母。
正常运行的代码:
#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;
}
错误工作的代码(只需切换收藏的字母和喜欢的数字部分):
#include <stdio.h>
int main() {
int favorite_number;
char favorite_letter;
int favorite_letter_code;
/* FAVORITE NUMBER */
printf("Enter your favorite number> \n");
scanf("%d", &favorite_number);
printf("Your favorite number is %d!\n", favorite_number);
/* 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);
return 0;
}
为什么这个订单会影响输出?
答案 0 :(得分:1)
在使用favorite_number
阅读scanf
后,您输入的换行仍在stdin
中待处理,您应该在阅读favorite_letter
时忽略空格以便跳过它:< / p>
scanf(" %c", &favorite_letter);
请注意%c
前面的空格,它会告诉scanf
忽略任何空格。
答案 1 :(得分:1)
执行scanf("%d", ...)
时,它会读取整数。在控制台上输入文本时,输入一个整数,然后按Enter键。 scanf
调用不会消耗由enter键生成的换行符(它保留在输入缓冲区中)。当你执行scanf("%c", ...)
时,它会在缓冲区(换行符)中看到一个字符并将其读入而不是您期望的字符。您需要明确说明该换行符。这是使用scanf