为什么第二次扫描在我的程序中不起作用?

scanf(“%d%c”,&size,&chara); 但是单独的scanf用于字符输入不起作用。 我在代码中显示了这些内容。 这是为什么?

void squareCustomFill(int size, char chara); int main(void) { int size,i,k; char chara; printf("Enter size of square: "); //This works scanf("%d %c",&size,&chara); //printf("Enter fill character: "); BUT WHY DOES NOT THIS WORK?? //scanf("%c",&chara); squareCustomFill(size,chara); return 0; } void squareCustomFill(int size, char chara){ int i,k; for (k=1;k<=size;k++){ for(i=1;i<=size;i++) printf("%c",chara); printf("\n"); } } 

Scanf没有消耗第一次scanf调用中留在缓冲区中的\n字符。

所以第二次scanf调用了。

您必须在再次阅读之前清除标准输入或者只是删除换行符。

第二个电话应该是

 scanf(" %c",&chara); ^ this space this will read whitespace charaters( what newline also is) until it finds a single char 

是的,我相信阿明是正确的。 scanf将以空格(空格键,换行符等)读取。 当您在单击空格键或在第一个scanf之后立即输入值时,第二个scanf将读入该值(空格,换行符等)。 所以你用scanf(“%d%c”,&size,&chara)修复了它,因为%d和%c之间有一个空格。 如果你想让它们分开,只需按照Armin的建议:scanf(“%c”,&chara)。

在它们之间抛出一个getchar() ,然后啜饮那个多余的换行符。