C - 基于输入使用 * 特殊字符绘制矩形For 循环

问题描述

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

因此程序必须接受用户输入,矩形的长度和宽度,然后根据参数长度和宽度使用星星 * 绘制矩形。我必须使用 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>
  • sideAsideB 应定​​义为 int
  • scanf("%f",&sideA); 应为 scanf("%d",&sideA);sideB 应相同。此外,您应该测试输入失败:scanf() 返回成功转换的次数,在本例中必须为 1
  • 您对坐标有一个简单的困惑:i 应该与 sizeA 进行比较,jsizeB 进行比较。
  • 换行符应该在内循环之外打印:

这是一个更正的版本:

#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;
}
,

这段代码有两个问题:

  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。