我制作了一个简单的程序来制作一个半角三角形代表#一切正常但唯一的事情是我做的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;
}
答案 0 :(得分:2)
正如评论中所述,你的问题是,即使输入的数字超过23,它也会打印输出。(我正在重复这一点,因为问题本身并不存在此信息。)
这是因为在do ... while
循环的 end 处评估了条件。如果要在读取数字后立即退出,则需要在读取输入后立即测试条件。
尝试在函数中封装打印和读取逻辑;这样可以更容易地用作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()
的结果通过在无法读取输入的情况下终止循环来解决此问题。答案 1 :(得分:0)
如果你问我认为你在问什么......
标准输出行缓冲,意味着输出不会出现在控制台上,直到缓冲区已满或您发送换行符或< / em>您手动刷新fflush()
。
尝试以下方法:
printf("enter a non negitive number less than equal to 23: ");
fflush( stdout );
scanf("%d",&n);
对fflush
的调用将强制输出显示在您的控制台上。