C语言do-while循环重复打印输入提示问题及代码修正咨询
问题分析与解决
你的代码核心逻辑没问题,但输入1-8以外的数值时提示语不重复显示,大概率是标准输出缓冲区未及时刷新导致的——默认情况下,stdout是行缓冲模式,只有遇到换行符\n时才会把缓冲区内容输出到屏幕。你的提示语末尾没有换行,所以内容可能卡在缓冲区里,没有立即显示。
修正后的代码
#include <stdio.h> #include <cs50.h> // 使用get_int需包含CS50头文件 int main(void) { int h; do{ printf("Height(a number from 1 to 8): "); fflush(stdout); // 强制刷新输出缓冲区,确保提示语立刻显示 h = get_int(""); } while((h < 1) || (h > 8)); // 生成#三角形 for(int i = 0; i < h; i++){ for(int j = 0; j <= i; j++){ printf("#"); } printf("\n"); } return 0; }
关键修正点
- 添加
fflush(stdout);:在打印提示语后强制刷新输出缓冲区,避免提示语因行缓冲规则延迟显示。 - 补充
#include <cs50.h>:使用CS50库的get_int函数必须包含对应头文件,否则无法编译。 - 整理代码结构:移除
while循环后多余的独立代码块括号,让逻辑更清晰。
效果验证
输入9、0等超出范围的整数时,程序会重复打印提示语;输入非整数内容时,get_int会自动要求重新输入整数,直到你输入1-8范围内的数值,程序才会生成对应的#三角形。
内容的提问来源于stack exchange,提问作者zzeynepstnd
相关产品推荐
相关产品推荐

