用户使用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;
}
我迷失了方向,我应该将整数转换为字符还是?
答案 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", '*')
进行迭代,而你实际上正在这样做。*
的值必须打印stars
次0
并且您使用其他循环执行此操作时,就像您已经完成的那样,然后打印一个新的在该循环中每次迭代结束时的行。答案 2 :(得分:0)
就我所见,你遇到了一些问题:
stars = (char) st;
行创建一排“星”,但这不是那样的:您在那里做的是分配星的ASCII值(是42)到stars
变量。while
循环永远不会完成,因为在每次迭代时,即使您从42减去1,也会将42重新分配给stars
变量。st
变量,而不是打印stars
变量(星号),我相信您应该使用这个变量来计算尚未打印的星数。 " \n"
,而不是将所有星星保持在同一行。您可以通过从现有print语句中删除这些字符并在循环结束时使用另一个print语句来解决此问题(或者暂时将其保留,直到您完成剩下的工作)。我希望这有所帮助,如果您需要更多信息,请告诉我。
修改强>
为了帮助您调试程序,您可以在其他语句之间添加一些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
。
就是这样。:)