如何在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
相关产品推荐
相关产品推荐

