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

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

每次我输入大量的行、列和符号时,它总是打印10列,其中包含正确的符号和行数

这是我的密码

#包括<标准h>
int main()
{
int行;
int列;
字符符号;
printf(行中的“输入者”);
scanf(“d”行和“行”);
printf(“输入”列中的“输入”);
scanf(“d”列和“列”);
scanf(“c”);
printf(“输入符号:”);
scanf(“c”符号);
对于(int i=1;i<=行;i++)
{
对于(int j=1;j<=列;j++)
{
printf(“c”,符号);
}
printf(“\n”);
}
返回0;
}

这是输出

PS D:\CFolder\NestedLoops>cd"d:\CFolder\NestedLoops\"if($?){gcc NestedLoops.c-o
嵌套循环};如果($?){。\NestedLoops}
输入#行数:3
输入#个列:5
输入一个符号:$
$$$$$$$$$$
$$$$$$$$$$
$$$$$$$$$$
PS D:\CFolder\NestedLoops>

不管我输入的列数是多少,它总是打印10列

作为补充说明,当我尝试运行程序,但删除符号输入时,效果很好

问题在于:

scanf("%c");

scanf需要使用一个参数,因为您没有提供任何参数,我猜scanf将堆栈的顶部值(cols)替换为上一次调用scanf留下的换行符(ASCII 10)的值,这就是为什么它总是打印10列

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

scanf(“c”和“符号”);

现在应该可以了

发表评论