为什么我的程序中第二个scanf不起作用?

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

 }
}
3个回答

9

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

因此,第二次调用scanf函数就读取了这个字符。

在再次读取之前,您必须清除stdin缓冲区或者直接去掉换行符。

第二次调用应该是:

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

1

我相信Armin是正确的。 scanf将读取空格(空格,换行符等)。 当您输入值时,如果在第一个scanf后单击空格键或输入回车键,则第二个scanf将读取该值(空格,换行符等)。 因此,您可以使用scanf(“%d%c”,&size,&chara)来修复它,因为%d和%c之间有一个空格。 如果您想要它们分开,请按照Armin建议的做法进行:scanf(“%c”,&chara)。


0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接