我制作了一个简单的程序,用#表示一个半三角形,一切正常,唯一的问题是我的while循环不起作用无法提示用户快速帮助?
#include<stdio.h>
int main() {
int n;
do {
printf("enter a non negitive number less than equal to 23");
scanf("%d\n",&n);
for(int i=0;i<n;i++)
{
for(int j=0;j<n+1;j++)
{
if(j <= n-(i+2) )
printf(" ");
else
printf("#");
}
printf("\n");
}
}
while(n < 23);
printf("thanks for using my program");
return 0;
}
如评论中所述,您的问题是,即使您输入的数字超过23,它也会打印输出。(我重复此操作是因为该信息本身不存在于问题中。)
这是因为条件是在循环结束时求值的do ... while
。如果要在读取数字后立即退出,则需要在读取输入后立即测试条件。
尝试将打印和读取逻辑封装在一个函数中;这将使它更容易在while
循环中用作条件。
int prompt_and_read(int * output) {
printf("enter a non negitive number less than equal to 23: ");
fflush(stdout);
return scanf("%d\n", output);
}
然后,您可以执行以下操作:
while (prompt_and_read(&n) && n < 23) {
....
}
这是多方面的改进:
printf()
在写换行符之前,可能不会刷新输出。scanf()
,如果输入在读取数字23或更大之前结束,则循环将无限继续。scanf()
如果无法读取任何输入,则通过终止循环来测试修复结果。本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句