7

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

 }
}
4

3 回答 3

9

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

所以第二次 scanf 调用做到了。

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

第二个电话应该是

scanf(" %c",&chara);
       ^ this space this will read whitespace charaters( what newline also is) until it finds a single char
于 2013-04-13T22:56:07.580 回答
1

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

于 2013-04-13T23:06:41.010 回答
0

在它们之间扔一个getchar()并吞下那个无关的换行符。

于 2015-11-24T05:35:19.323 回答