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

时间:2013-04-13 22:54:33

标签: c scanf

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");

 }
}

3 个答案:

答案 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(),然后啜饮那个多余的换行符。