如何使用while循环提供用户提示?

时间:2014-09-02 21:17:57

标签: c

我制作了一个简单的程序来制作一个半角三角形代表#一切正常但唯一的事情是我做的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;
}

2 个答案:

答案 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()可能不会刷新输出。
  • 如果循环读数为23或更大,循环将立即终止。
  • 因为您没有检查scanf()的返回值,如果输入在读取数字23或更大之前结束,则循环将无限地继续。测试scanf()的结果通过在无法读取输入的情况下终止循环来解决此问题。

答案 1 :(得分:0)

如果你问我认为你在问什么......

标准输出行缓冲,意味着输出不会出现在控制台上,直到缓冲区已满您发送换行符或< / em>您手动刷新fflush()

尝试以下方法:

printf("enter a non negitive number less than equal to 23: ");
fflush( stdout );
scanf("%d",&n);

fflush的调用将强制输出显示在您的控制台上。