如何实现输入循环直到用户连续按下两次回车键?
解决连续两次回车终止输入循环的问题
嗨,我来帮你搞定这个连续两次回车终止循环的需求~你的核心问题是需要检测连续两个回车键输入(也就是连续的'\n'字符),但当前代码只检查了单次输入,没有记录上一次的状态,所以没法判断是否连续触发。
核心思路
我们需要一个额外变量来保存上一次读取到的字符,每次读取新字符后,判断当前字符和上一次字符是否都是'\n'——如果满足这个条件,就终止循环。
修改后的代码实现
#include <stdio.h> int main() { char ch; char prev_ch = 0; // 初始化前一个字符为非换行值,避免初始误触发 while (1) { scanf("%c", &ch); // 判断连续两次输入回车,终止循环 if (ch == '\n' && prev_ch == '\n') { break; } prev_ch = ch; // 更新前一个字符为当前字符,用于下一次判断 } return 0; }
代码逻辑解释
- 状态记录:用
prev_ch存储上一次读取的字符,初始值设为0(肯定不是'\n',防止程序一开始就误终止)。 - 终止条件判断:每次读取新字符后,检查当前字符
ch和prev_ch是否都是'\n'——如果是,说明用户连续按了两次回车,直接跳出循环。 - 状态更新:如果不满足终止条件,就把当前字符赋值给
prev_ch,继续下一轮循环。
可选优化:用fgetc替代scanf
如果你想更好地处理输入流的特殊情况(比如用户输入EOF,即按Ctrl+D),可以用fgetc(stdin)代替scanf,代码如下:
#include <stdio.h> int main() { int ch; // 用int存储fgetc返回值,因为EOF是int类型 int prev_ch = 0; while (1) { ch = fgetc(stdin); if (ch == '\n' && prev_ch == '\n') { break; } prev_ch = ch; } return 0; }
注意点
你原来代码里的ch == ''是错误的写法:C语言中没有空字符串的字符表示,回车键对应的ASCII字符是'\n',我们需要判断的是这个字符。
内容的提问来源于stack exchange,提问作者Muhammad Waseem
相关产品推荐
相关产品推荐

