C++程序循环执行时额外输出两行空行问题求助
问题原因与修复方案
出现额外空行的核心原因有两个:
- 输入字符后按回车,输入流里会同时存着你输入的字符和换行符
\n,std::cin.get()每次只读取一个字符,第二次循环会读到这个换行符,输出换行符再加上std::endl自带的换行,就会多出空行。 - 代码里的
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
相关产品推荐
相关产品推荐

