Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
影响输出的多个printf/scanf_C_Printf_Scanf - Fatal编程技术网

影响输出的多个printf/scanf

影响输出的多个printf/scanf,c,printf,scanf,C,Printf,Scanf,我有一个由两部分组成的简单程序 一部分询问您最喜欢的号码,然后返回您最喜欢的号码 另一部分询问您最喜欢的字母是什么,并返回该字符的ASCII码 每一部分都独立于另一部分工作,当代码中最喜欢的字母部分位于代码中最喜欢的数字部分之前时,这两部分都会按顺序正确执行 但是,当我修改代码的顺序,使最喜欢的数字部分位于最喜欢的字母部分之前时,我遇到了一个问题。输出允许我输入我最喜欢的号码,然后扫描并返回。然后它只打印程序的其余部分,而不让我有机会输入我最喜欢的字母 正确工作的代码: #include <

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

一部分询问您最喜欢的号码,然后返回您最喜欢的号码

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