You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++程序循环执行时额外输出两行空行问题求助

问题原因与修复方案

出现额外空行的核心原因有两个:

  1. 输入字符后按回车,输入流里会同时存着你输入的字符和换行符\n,std::cin.get()每次只读取一个字符,第二次循环会读到这个换行符,输出换行符再加上std::endl自带的换行,就会多出空行。
  2. 代码里的last_inp未初始化,第一次循环输出的是随机垃圾值,也会导致异常输出。

修复方法1:跳过换行符,处理有效输入

调整循环逻辑,先读取字符,遇到换行就跳过,再输出内容,同时保证第一次循环先等待输入而非输出垃圾值:

#include <iostream>
#include <unistd.h> // sleep 所需头文件

int main() {
    char last_inp;
    while (true) {
        last_inp = std::cin.get();
        // 跳过输入后的换行符,只处理有效字符
        if (last_inp == '\n') {
            continue;
        }
        std::cout << last_inp << std::endl;
        sleep(1);
    }
    return 0;
}

修复方法2:清空输入缓冲区(处理多字符输入)

如果一次输入多个字符(比如输入abc再回车),想只取第一个有效字符并清空后续内容,避免后续循环读到多余字符,可以用std::cin.ignore()清除缓冲区:

#include <iostream>
#include <unistd.h>
#include <limits> // std::numeric_limits 所需头文件

int main() {
    char last_inp;
    while (true) {
        last_inp = std::cin.get();
        if (last_inp == '\n') {
            continue;
        }
        std::cout << last_inp << std::endl;
        // 清除输入缓冲区中剩余的所有字符,直到遇到换行
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
        sleep(1);
    }
    return 0;
}

内容的提问来源于stack exchange,提问作者Lordcode

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 20:22:17