scanf()后跳过输入

时间:2018-02-24 02:06:27

标签: c

在下面的代码中,在scanf() newMIn之后,它会跳过gets() newLname。我已经尝试将其重新定位到其他部分,但它仍然会跳过,我也尝试使用getchar()代替scanf(),但它仍会跳过下一个立即函数。所有其他变量都是字符串,此函数是较大程序的一部分。

void getINF(char *newStID, char *newLname, char *newMIn,char *newFname, char *newHomeAdd, char *newCourse, char *newMumNam,char *newPopsNam  ){

    printf("Input Student ID:\n");
    gets(newStID);
    printf("Input First Name:\n");
    gets(newFname);
    printf("Input Middle Initial:\n");
    scanf(" %c", &newMIn);
    printf("Input Last Name:\n");
    gets(newLname); 
    printf("Input Home Address:\n");
    gets(newHomeAdd);
    printf("Input Course:\n");
    gets(newCourse);
    printf("Input Name of Mother:\n");
    gets(newMumNam);
    printf("Input Name of Father:\n");
    gets(newPopsNam);

    printf("\n\n%s\n",newStID);
    printf("%s\n",newFname);
    printf("%c\n",newMIn);
    printf("%s\n",newLname);
    printf("%s\n",newHomeAdd);
    printf("%s\n",newMumNam);
    printf("%s\n",newPopsNam);
    printf("%s\n",newCourse);

    return;
}

2 个答案:

答案 0 :(得分:1)

%c令牌与scanf一起使用时,不会消耗任何额外的换行符空格。因此,按Enter键后的换行符将保留在输入缓冲区中,然后由以下gets调用消耗。

答案 1 :(得分:0)

使用这种流行的方法在下一个换行符之前清除输入:

int c;
while ((c = getchar()) != '\n' && c != EOF);