问题描述
因此程序必须接受用户输入,矩形的长度和宽度,然后根据参数长度和宽度使用星星 *
绘制矩形。我必须使用 for
循环,更准确地说是一个 for
循环在另一个循环中。
它不起作用,我坚持下去,所以如果有人愿意帮助我,我将不胜感激。
这是我得到的:
int main() {
printf("\n\n***Rectangle***");
printf("\n\n\nInsert side a: ");
scanf("%f",&sideA);
printf("\n\nInsert side b: ");
scanf("%f",&sideB);
printf("\n\nRectangle: \n\n");
for (int i = 0; i < sideA; i++) {
for (int j = 0; j < sideB; j++) {
if (i == 0 || i == sideB - 1 || j == 0 || j == sideA - 1) {
printf("*");
} else {
printf(" ");
}
printf("\n");
}
}
}
非常感谢
解决方法
存在多个问题:
- 你应该包括
<stdio.h>
-
sideA
和sideB
应定义为int
。 -
scanf("%f",&sideA);
应为scanf("%d",&sideA);
,sideB
应相同。此外,您应该测试输入失败:scanf()
返回成功转换的次数,在本例中必须为1
。 - 您对坐标有一个简单的困惑:
i
应该与sizeA
进行比较,j
与sizeB
进行比较。 - 换行符应该在内循环之外打印:
这是一个更正的版本:
#include <stdio.h>
int main() {
int sideA,sideB;
printf("\n\n***Rectangle***");
printf("\n\n\nInsert side a: ");
if (scanf("%d",&sideA) != 1)
return 1;
printf("\n\nInsert side b: ");
if (scanf("%d",&sideB) != 1)
return 1;
printf("\n\nRectangle: \n\n");
for (int i = 0; i < sideA; i++) {
for (int j = 0; j < sideB; j++) {
if (i == 0 || i == sideA - 1 || j == 0 || j == sideB - 1) {
printf("*");
} else {
printf(" ");
}
}
printf("\n");
}
return 0;
}
,
这段代码有两个问题:
- 您正在为每个字符而不是每一行打印换行符。
- 您在“*”测试中的
i
和j
错误。
将换行符移到外循环,在 if
条件中交换 'i' 和 'j':
for (int i = 0; i < sideA; i++)
{
for (int j = 0; j < sideB; j++)
{
if (j == 0 || j == sideB - 1 || i == 0 || i == sideA - 1 ) // MODIFIED
{
printf("*");
}
else
{
printf(" ");
}
}
printf("\n"); // MOVED
}
或者“不那么聪明”并将其分解如下:
- 打印一行
width
星号 ('*'
),后跟换行符。 - 打印从
length - 2
开始的'*'
行,后跟width - 2
空格,然后是 '*' + 换行符。 - 重复 1。