C语言控制台程序出现多余换行问题求解
解决C语言控制台多余换行的问题
嘿,这个问题我之前写猜数字程序时也碰到过!咱们来拆解下根源,然后搞定它:
首先,问题出在两个地方:
- 你输入数字后按回车,终端会自动把光标移到下一行(这是终端的默认行为),同时这个回车的
\n字符会留在输入缓冲区里,没被scanf("%f")吃掉; - 你当前代码里每次循环开头的
printf("\nGissning: ")自带了前置换行,这直接导致新的输入提示跑到了新行。
修正后的代码方案
咱们调整输出格式,再正确清空缓冲区,代码改成这样:
// 第一次启动时可以加个换行,后续循环直接延续同一行 printf("\nGissning: "); scanf("%f", &gissning); // 关键:清空输入缓冲区里的回车和多余字符 int c; while ((c = getchar()) != '\n' && c != EOF); if (gissning < RandomTal) { printf(" Du gissade för lågt, försök igen! Gissning: "); } else if (gissning > RandomTal) { printf(" Du gissade för högt, försök igen! Gissning: "); } else { // 猜对的情况单独处理换行 printf(" Grattis, du gissade rätt!\n"); }
为什么你之前的while(getchar()!='\n');没生效?
大概率是你把这句放错位置啦!必须把它放在scanf之后,这样才能捕捉到输入数字后留下的回车符。如果放在scanf之前,缓冲区里还没内容,自然起不到作用。另外我加了c != EOF的判断,是为了避免输入流结束(比如按Ctrl+D/Ctrl+Z)时出现死循环,让代码更稳。
效果说明
虽然终端输入回车后还是会自动换行(这个是终端的默认行为,没法完全消除),但程序输出的提示和下一个输入框会紧跟在同一行,最终效果会和你期望的一致:
Gissning: 56 Du gissade för lågt, försök igen! Gissning:
内容的提问来源于stack exchange,提问作者J. Doe
相关产品推荐
相关产品推荐

