打印少一个" *"每行使用C中的while循环

时间:2016-11-15 23:31:44

标签: c loops while-loop

用户使用while循环指定初始编号后,每行打印少一颗星。

这是一个学校项目,所以我并没有要求你回答只需指向正确的方向。

int main() {
    int number;
    int stars;
    char st = '*'; //using char to setup the "*"

    printf("please enter a positive number:");
    scanf("%d", &stars);

    while (stars > 0) {
        stars = (char) st; //tryin to convert number eneter to a char
        stars = stars - 1;
        printf("%c \n", stars);
    }

    return 0;
}

我迷失了方向,我应该将整数转换为字符还是?

4 个答案:

答案 0 :(得分:2)

请按照以下步骤操作:

  • 从用户那里读到一串星星(你得到的几乎是正确的,你应该检查scanf()是否返回1.

  • 使用for循环并递减star并停在0

  • 在循环中,编写另一个循环,打印star*副本和换行符

  • 就是这样!返回0。

答案 1 :(得分:0)

您已经拥有的是while循环中您的变星正在减少......所以如果您输入10,变量stars将为10,{ {1}},9,...,直到它8 ...现在,当您的变量0等于{时,请仔细考虑{1}}你要打印十颗星,对吧?你怎么做呢? 答案是使用另一个循环,例如使用stars循环或其他10循环,就像您将变量星从用户输入迭代到{{1所以它基本上做了你已经做过的事情。

这里提示,而不是for(实际上打印的ASCII代码等于while 的字符),您应该0或直接printf("%c \n", stars),因为您需要打印字符stars,并且您应该在while循环printf("%c", st)次执行此操作,然后打印新行在那个循环结束时。

简而言之:

  • 你的第一步是对的,你必须通过用户输入到printf("%c", '*')进行迭代,而你实际上正在这样做。
  • *的值必须打印stars0并且您使用其他循环执行此操作时,就像您已经完成的那样,然后打印一个新的在该循环中每次迭代结束时的行。

答案 2 :(得分:0)

就我所见,你遇到了一些问题:

  1. 您似乎试图通过stars = (char) st;行创建一排“星”,但这不是那样的:您在那里做的是分配星的ASCII值(是42)到stars变量。
  2. 这会导致另一个问题,即您的while循环永远不会完成,因为在每次迭代时,即使您从42减去1,也会将42重新分配给stars变量。
  3. 您打印st变量,而不是打印stars变量(星号),我相信您应该使用这个变量来计算尚未打印的星数。
  4. 最后,您要在每个星星后打印空格和换行符" \n",而不是将所有星星保持在同一行。您可以通过从现有print语句中删除这些字符并在循环结束时使用另一个print语句来解决此问题(或者暂时将其保留,直到您完成剩下的工作)。
  5. 我希望这有所帮助,如果您需要更多信息,请告诉我。

    修改

    为了帮助您调试程序,您可以在其他语句之间添加一些print语句,以便在程序执行时查看变量的值是什么样的......然后可能会给出关于出错的提示。例如,要查看每个循环迭代中stars变量的变化情况,请在printf("stars = %d\n", stars);循环内使用while。当然,这会使你的星形打印变得越来越糟糕,但是一旦程序运行起来,就可以删除那些调试打印语句。

答案 3 :(得分:0)

您需要的是以下内容。删除这些陈述

   while (stars > 0) {
        stars = (char) st; //tryin to convert number eneter to a char
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        stars = stars - 1;
        printf("%c \n", stars);
        ^^^^^^^^^^^^^^^^^^^^^^^
    }

您必须输出字符st。变量starts用作循环迭代的计数。

在声明

之前的循环内
    stars = stars - 1;

放置一个for循环,输出的字符starts正好st次。

并删除此声明

int number;

因为代码中没有使用变量number

就是这样。:)