在下面的代码中,在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;
}
答案 0 :(得分:1)
将%c
令牌与scanf
一起使用时,不会消耗任何额外的换行符空格。因此,按Enter键后的换行符将保留在输入缓冲区中,然后由以下gets
调用消耗。
答案 1 :(得分:0)
使用这种流行的方法在下一个换行符之前清除输入:
int c;
while ((c = getchar()) != '\n' && c != EOF);