在 C 中打印特定符号的矩形时出现问题

Problem when printing a rectangle of a particular symbol in C

最近在钻研C语言,决定尝试做一个矩形程序。 但是,我遇到了一个问题,似乎无法找到它存在的原因。

每次我输入一些行数、列数和一个符号时,它总是打印出 10 列具有正确的符号和行数。

这是我的代码。

#include <stdio.h>

int main()
{

int rows;
int columns;
char symbol;

printf("\nEnter # of rows: ");
scanf("%d", &rows);

printf("Enter # of columns: ");
scanf("%d", &columns);

scanf("%c");

printf("Enter a symbol: ");
scanf("%c", &symbol);

for(int i = 1; i <= rows; i++)
{
    for(int j = 1; j <= columns; j++)
    {
        printf("%c", symbol);    
    }
    printf("\n");
}

return 0;
}

这是输出。

PS D:\CFolder\NestedLoops> cd "d:\CFolder\NestedLoops\" ; if ($?) { gcc NestedLoops.c -o 
NestedLoops } ; if ($?) { .\NestedLoops }

Enter # of rows: 3
Enter # of columns: 5
Enter a symbol: $
$$$$$$$$$$
$$$$$$$$$$
$$$$$$$$$$
PS D:\CFolder\NestedLoops> 

无论我输入多少列,它总是打印 10 列。

附带说明一下,当我尝试 运行 该程序但删除符号输入时它工作正常。

问题出在这里:

scanf("%c");

scanf 需要使用一个参数,因为您没有提供任何参数,我的猜测是 scanf 正在用上一次调用 scanf 留下的换行符 (ASCII 10) 的值,这就是它总是打印 10 列的原因。

要使用尾随换行符,而不是空 scanf,请在格式说明符前使用 space:

scanf(" %c", &symbol);

现在应该可以了。