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");
}
}
答案 0 :(得分:9)
Scanf没有使用第一次scanf调用中保留在缓冲区中的\n
字符。
所以第二个scanf调用了。
你必须在再次阅读之前清除标准输入或者只是删除换行符。
第二个电话应该是
scanf(" %c",&chara);
^ this space this will read whitespace charaters( what newline also is) until it finds a single char
答案 1 :(得分:1)
是的,我相信阿明是正确的。 scanf将以空格(空格键,换行符等)读取。如果单击空格键或在第一个scanf之后立即输入值,则输入值时,第二个scanf将读入该值(空格,换行符等)。所以你用scanf(“%d%c”,&amp; size,&amp; chara)修复了它,因为%d和%c之间有一个空格。如果你想让它们分开,只需按照Armin的建议:scanf(“%c”,&amp; chara)。
答案 2 :(得分:0)
在他们之间扔一个 getchar(),然后啜饮那个多余的换行符。