jiangganjun 发表于 2023-6-24 12:03:59

本主题需向作者支付 10 鱼币 才能浏览 购买主题

isdkz 发表于 2023-6-24 12:04:15

你的代码有一个小错误。在你的输入语句中,你使用了 %s 来读取字符,但实际上应该使用 %c 来读取字符。所以你需要将代码中的 %s 改为 %c 。

修正后的代码如下:

#include <cstdio>
using namespace std;
int main()
{
    int m, n, k;
    char a;
    scanf("%d%d %c%d", &m, &n, &a, &k);
    for (int j = 1; j <= m; j++) //控制行数
    {
      for (int i = 1; i <= n; i++) //控制列数
      {
            switch (k) //1是实心,0是空心
            {
                case 1:
                  printf("%c", a); //实心
                  break;
                case 0: //空心
                  if ((i >= 2) && (i <= n - 1) && (j >= 2) && (j <= m - 1)) // 在非行、列的首位输出空字符
                        printf("%c", ' ');
                  else
                        printf("%c", a);
            }
      }
      printf("\n");
    }
    return 0;
}


这样修改后,你的代码就能够正确运行了。

sfqxx 发表于 2023-6-24 12:04:47

isdkz 发表于 2023-6-24 12:04
你的代码有一个小错误。在你的输入语句中,你使用了 %s 来读取字符,但实际上应该使用 %c 来读取字符。所以 ...

16秒????

isdkz 发表于 2023-6-24 12:05:04

sfqxx 发表于 2023-6-24 12:04
16秒????

{:10_256:}

陶远航 发表于 2023-6-24 12:05:21

第一次见求助帖要鱼币@sfqxx @liuhongrun2022 @歌者文明清理员 @isdkz

sfqxx 发表于 2023-6-24 12:08:35

在读入第三个参数时应该使用 `%c` 而不是 `%s`,因为矩形符号只有一个字符。所以修改读入部分为:


scanf("%d%d %c%d", &m, &n, &a, &k);

另外在代码中统一缩进的方式也需要统一一下,可以按照较为常用的方式,即每个缩进为4个空格。

调整了以后的完整代码为:


#include <cstdio>
using namespace std;

int main() {
    int m, n, k;
    char a;
    scanf("%d%d %c%d", &m, &n, &a, &k);
    for (int j = 1; j <= m; j++) {
      for (int i = 1; i <= n; i++) {
            switch (k) {
                case 1: printf("%c", a); break;
                case 0:
                  if (i >= 2 && i <= n - 1 && j >= 2 && j <= m - 1) {
                        printf("%c", ' ');
                  } else {
                        printf("%c", a);
                  }
            }
      }
      printf("\n");
    }
    return 0;
}

注意这里把多行注释合并成了单行注释,以简化排版。
求最佳答案{:10_254:}

jiangganjun 发表于 2023-6-24 12:16:47

isdkz 发表于 2023-6-24 12:04
你的代码有一个小错误。在你的输入语句中,你使用了 %s 来读取字符,但实际上应该使用 %c 来读取字符。所以 ...

改为%c后,无法输出。

jiangganjun 发表于 2023-6-24 12:21:03

sfqxx 发表于 2023-6-24 12:08
在读入第三个参数时应该使用 `%c` 而不是 `%s`,因为矩形符号只有一个字符。所以修改读入部分为:




scanf("%d%d %c%d", &m, &n, &a, &k);
这个%c前为什么要留一个空格?
改成C后,留一个空格可以运行,不留空格无法运行。

isdkz 发表于 2023-6-24 12:22:33

jiangganjun 发表于 2023-6-24 12:16
改为%c后,无法输出。

你是不是没有重新编译?

jiangganjun 发表于 2023-6-24 12:24:30

isdkz 发表于 2023-6-24 12:22
你是不是没有重新编译?

%c前增加了一个空格。。。不增家空格无法运行。

isdkz 发表于 2023-6-24 12:25:49

jiangganjun 发表于 2023-6-24 12:24
%c前增加了一个空格。。。不增家空格无法运行。

好吧,看来你不是直接复制我的代码过去的,我给出的代码是有空格的

jiangganjun 发表于 2023-6-24 12:27:24

isdkz 发表于 2023-6-24 12:25
好吧,看来你不是直接复制我的代码过去的,我给出的代码是有空格的

为什么%c前要增加空格,而%d前不要增加空格呢

isdkz 发表于 2023-6-24 12:31:05

jiangganjun 发表于 2023-6-24 12:27
为什么%c前要增加空格,而%d前不要增加空格呢

在 scanf 函数中,"%c"与大多数其他格式符有所不同。当使用"%c"时, scanf 会读取并返回下一个字符,即使这个字符是空格或换行符。因此,如果你的输入有空格(例如,在一个数字和一个字符之间),那么 scanf 会把这个空格读入到字符变量中,而你可能期望的是读入的是后面的字符。

在 scanf 语句中增加空格,意味着 scanf 会跳过所有的空白字符(包括空格、制表符和换行符),直到读到一个非空白字符。这样可以确保字符变量读入的是你想要的字符,而不是一个空格。

相反,"%d"会自动跳过所有空白字符,直到找到第一个数字或者符号(例如负号)。因此,在"%d"前面不需要加空格。

zhangjinxuan 发表于 2023-6-24 12:31:45

isdkz 发表于 2023-6-24 12:05


你可能会有什么“转人工”的机制{:10_256:}

当chatgpt解决失败,就“转人工”{:10_256:}

isdkz 发表于 2023-6-24 12:44:33

zhangjinxuan 发表于 2023-6-24 12:31
你可能会有什么“转人工”的机制

当chatgpt解决失败,就“转人工”

{:10_256:}

歌者文明清理员 发表于 2023-6-24 14:48:59

zhangjinxuan 发表于 2023-6-24 12:31
你可能会有什么“转人工”的机制

当chatgpt解决失败,就“转人工”

{:10_256:}
页: [1]
查看完整版本: 画矩形 题目OJ判错,DEV c++通过