C语言编程中如何忽略输入字符之间的空格?
C语言scanf读取字符时忽略空格的解决方法
首先需要纠正一个常见语法错误:你示例中的scanf("%c", c)属于非法用法,%c格式符要求传入字符变量的指针,正确写法为scanf("%c", &c),否则会触发内存访问异常等未定义行为。
以下是忽略输入中空格的几种常用方案:
- 方案1:格式串中
%c前加空格(最推荐)
把调用语句改为scanf(" %c", &c)即可。scanf格式串中的任意空白字符(空格、换行、制表符)都会匹配输入中0个或多个连续的空白字符,加在%c前会先清空输入缓冲区中所有前置空白,再读取第一个非空白字符存入目标变量。
例如输入序列为a b c时,连续调用三次scanf(" %c", &c),依次读取到的字符为a、b、c,自动跳过所有间隔的空格。 - 方案2:手动循环跳过空白字符
如果需要自定义控制跳过的字符范围,可以先循环读取并丢弃所有空白,再取目标字符:char c; // 跳过所有空格、换行、制表符 do { c = getchar(); } while (c == ' ' || c == '\n' || c == '\t'); // 此时c即为第一个非空白的目标字符 - 方案3:用
%1s格式符读取单个字符%s格式符默认会跳过所有前置空白,限定长度为1时只会读取1个非空白字符:
该方案不需要额外处理空白,但仅适用于只需要读取非空白字符的场景。char c; scanf("%1s", &c);
额外提示:如果你混合使用
%d/%f等数值格式符和%c,必须在%c前加空格,因为数值格式符读取完成后会在输入缓冲区留下末尾的换行符,不加前置空格的话%c会直接读到这个空白换行符。
内容的提问来源于stack exchange,提问作者jacky.h
相关产品推荐
相关产品推荐

