2

我对编程很陌生,我有一个我无法移动的任务。

所以程序必须接受用户输入,矩形的长度和宽度,然后*根据参数长度和宽度使用星号绘制矩形。我必须使用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");
        }
    }
}

非常感谢提前

4

2 回答 2

1

有多个问题:

  • 你应该包括<stdio.h>
  • sideA并且sideB应该定义为int
  • scanf("%f", &sideA);应该scanf("%d", &sideA);和相同sideB。此外,您应该测试输入失败:scanf()返回成功转换的数量,在这种情况下必须1如此。
  • 您对坐标有一个简单的困惑:i应该将其与sizeAj进行比较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;
}
于 2021-01-02T18:53:29.020 回答
0

这段代码有两个问题:

  1. 您正在为每个字符而不是每一行打印换行符。
  2. 您在“*”测试中有错误的方法ij

将换行符移到外循环,交换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
}

或者“不那么聪明”并将其分解为:

  1. 打印一width行星号 ( '*'),后跟换行符。
  2. 打印length - 2以 开头的行'*',后跟width - 2空格,然后是 '*' + 换行符。
  3. 重复 1。
于 2021-01-02T19:07:54.737 回答