【问题标题】:Return string instead of int返回字符串而不是 int
【发布时间】:2019-09-15 04:08:47
【问题描述】:

当我打印出一个金字塔时,金字塔的最后一行或底部会打印出一个整数,它表示有多少哈希,而不是一串哈希。

像这样:

身高:3

#
##
3

当它应该是:

Height 3:

#
##
###

我应该根据用户的输入打印出一个高度的金字塔,但不是将基数打印为字符串,而是打印出基数应该有多少哈希值的整数。我知道这是因为我要返回 n,但我不知道如何以它仍然返回循环的方式进行处理。

我尝试将类更改为 void 而不是 int,但这会引发错误,因为它是冲突的类型。我在想我应该打印出一个空字符串,但它与我的界限混淆了。

#include <cs50.h>
#include <stdio.h>

int get_height(string prompt);

int main(void)
{

    int ask = get_height("Height: ");
    printf("%i\n", ask);

}

int get_height(string prompt) {

    int n;
    do {
        n = get_int("%s", prompt);
    }
    while (n < 1 || n > 8);
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < i; j++) {
            printf("#");
        }
        printf("\n");
    }
    return n; 
}

【问题讨论】:

  • get_height 所做的不仅仅是增加身高。也许保持简单,并在您的程序中的某处 else 实际打印金字塔。如果数字打印的来源不明显,您可能需要查看课堂笔记,因为高度是数字打印在此代码中的一个位置。
  • 一般来说,如果你的程序做的第一件事是提示输入一个参数,考虑改为将该参数作为参数传递。 (不要只考虑它;做它。我正在尝试外交。)考虑一下grep 如果提示您匹配模式,或者ls 如果提示您输入目录,那么它会有多笨拙。
  • 还要注意while (n &lt; 1 || n &gt; 8);这行的意思是“如果用户输入了一个超出范围的数字,就坐在一个无限循环中什么都不做”。也许不是你想要的?
  • while (n &lt; 1 || n &gt; 8); 如果 n 不在 [1,8] 中,则为无限循环

标签: c return return-value return-type cs50


【解决方案1】:

输出的最后一行是高度,因为这是在您的 main 函数中打印的最后一件事:

printf("%i\n", ask);

get_height 实际上只会打印n-1 行,因为跳过了第一次迭代 (i=0,j=0)。

【讨论】:

    【解决方案2】:

    应该输出 3

    问题出在这句话上;

    for (int j = 0; j < i; j++) {
    

    过早停止。建议:

    for (int j = i; j >=0; j--) {
    

    进行上述更改后的输出:

    #
    ##
    ###
    3
    

    【讨论】:

      猜你喜欢
      • 2022-01-12
      • 1970-01-01
      • 1970-01-01
      • 2017-08-09
      • 2020-10-15
      • 2014-07-28
      • 2019-02-04
      • 1970-01-01
      相关资源
      最近更新 更多