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

如何在while循环中让scanf遇到特定字符时跳过对应执行逻辑?

问题解答:仅识别行首直接输入的回车触发输出

问题原因

你现有代码的判断逻辑仅检查当前读到的字符是否为换行符,没有判断该换行符是否为当前行的第一个字符,因此只要读取到换行就会触发打印,不管该行之前有没有输入空格等其他内容。

实现方案

新增一个行首标志位,记录当前读取位置是否处于新一行的开头,仅当在行首位置读取到换行符时才执行打印逻辑:

int i = 0;
char b = 32;
// 行首标志:1表示当前处于行首位置,0表示不在行首
int is_line_start = 1;

while (scanf("%c", &b) == 1) {
    if (is_line_start) {
        if (b == '\n') {
            // 仅行首读到换行才打印
            printf("r");
        } else {
            // 行首读到其他字符,标记为非行首
            is_line_start = 0;
        }
    } else {
        // 非行首读到换行,重置行首标志
        if (b == '\n') {
            is_line_start = 1;
        }
    }
    i++;  
}

效果说明

  • 直接按下回车:行首读到换行,输出r,标志位保持行首状态
  • 先按空格再按回车:行首先读到空格,标志位设为非行首,后续读到换行时仅重置标志位,不输出r,符合预期需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 07:09:03