c - 我的 CS50 mario 不太舒服的代码有什么问题?
问题描述
这是我的代码的副本:
#include <cs50.h>
#include <stdio.h>
int main(void)
{
int height = get_int("Please enter a height between 1 and 8 (inclusive)\nHeight: ");
if(0 < height && height < 9)
for(int i = 0; i <= height; i++)
{
for(int s = (height - 1); s >= 1; s--)
{
printf("a");
}
for(int h = 1; h <= i; h++)
{
printf("#");
}
printf("\n");
}
else
printf("Please try again.\n"),
main();
}
我似乎无法正确打印的部分是打印正确数量的空格,因为它似乎没有在每个循环之后减少变量“s”。(我已经用字母“a”替换了空格,这样我就可以看到代码哪里出错了。)代码的目的是打印一个右对齐的#金字塔。我在这里哪里出错了?
例如,如果用户输入高度为 3,则输出将是:
aa
aa#
aa##
aa###
但是,我希望输出为:
aa#
a##
###
解决方案
主要问题是打印“a”时代码中的第二个 for 循环。每次你在这个特定的循环中,你基本上打印(高度 - 1)乘以“a”。事实上,你应该每次少一个“a”(多一个哈希)就打印出来。为此,我们需要调整 s 的条件。而不是这个
int s = height - 1; s >= 1
用这个
int s = height - i; s > 1
由于您的主循环有迭代器i
,我们可以在这里使用它。
第二个问题是,根据 CS50 问题集描述,您实际上应该打印" "
(空格),而不是"a"
. 为此,您应该替换"a"
为" "
.
第三个问题是您的代码在开头打印了一个充满空间的额外行。您需要使用此条件调整主 for 循环以删除额外的一行。
i < height
在打印符号的 for 循环中#
,您需要从零开始迭代器 h,以便它立即打印第一行。
int h = 0
推荐阅读
- java - 使用 FasterXML 解析 Json 以获取通用元素
- python - 根据python中的正则表达式匹配提取字符串之前和之后的字符串
- c# - 如何从 .NET Framework 4.6 迁移到 .NET Core 3.1
- powershell - 数组中数组的迭代导致完全限定错误Id:NullArray
- c# - 在一个项目中使用同一个 nuget 的两个不同版本来构建两个不同的应用程序?
- python - 将 n 行乘以 m 行,然后将它们加在一起
- xaml - Xaml 字符串格式货币负数转正数
- c# - 运行 Web 作业在启动时会出现 ArgumentNullException
- logging - Wildfly 18 日志策略不尊重 max-backup-index 并保留所有 server.log 文件
- xamarin - 刷新选择器的项目 xamarin 表单时出现问题