多个printf / scanf影响输出

时间:2016-01-29 02:57:12

标签: c printf scanf

我有一个简单的程序,由两部分组成。

一部分要求您最喜欢的号码,然后返回您最喜欢的号码。

另一部分询问你最喜欢的字母是什么,并返回该字符的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;
}

为什么这个订单会影响输出?

2 个答案:

答案 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

更烦人的部分之一