scanf()读取空白字符问题求助:添加空格前缀仍无效
搞定scanf读取%c时的空白字符问题
嘿,先帮你把代码里的明显问题揪出来——这些语法错误会直接导致编译失败,得先修正才能继续排查scanf的问题:
unsigned short int;这行没写变量名啊兄弟,比如改成unsigned short int my_num;这样才对printf("%d...", ...);这里%d得对应一个整数参数,...是无效的,比如你要打印u的话,得写成printf("%d...", u);(不过u还没初始化,记得用之前给它赋值)- 还有
u、c、f这几个变量都没初始化就可能被用,这会触发未定义行为,搞不好程序直接崩,记得用前给个初始值。
回到你说的scanf读空白的问题:
一般来说,在%c前面加个空格scanf(" %c", &ch);确实能跳过所有前置的空白(空格、换行、制表符这些),但如果这招不管用,大概率是你的scanf调用还有其他细节没处理好,我给你列几个常见坑:
你没贴完整的scanf代码啊!
比如如果你的格式串里混了其他格式符(比如%d、%f),或者要读多个%c,可能藏着问题。举个例子:如果之前用scanf("%d", &num);读整数,输入完按的换行符会留在输入缓冲区,这时候直接用scanf("%c", &ch);就会读这个换行,但加空格应该能解决——要是还是不行,可能你空格加错位置了?输入缓冲区有残留垃圾
如果之前的输入操作失败了(比如输入了字母却要读整数),输入缓冲区里的内容没被清掉,这时候scanf会直接读这些残留的字符。这种情况可以用while(getchar() != '\n');先把缓冲区清空,再调用scanf试试。格式串里的其他符号搞事情
比如你的scanf格式串里写了逗号、冒号这些非格式符,但输入的时候没对应输入,也会导致scanf读取异常。比如scanf("%c,%c", &ch1, &ch2);,输入的时候就得写成a,b,不然第二个%c会读到逗号或者空白。
给你个正确的多字符读取示例参考:
#include <stdio.h> int main(void) { char ch1, ch2, ch3; // 加空格自动跳过空白,连续读三个字符 scanf(" %c %c %c", &ch1, &ch2, &ch3); printf("你输入的三个字符:%c, %c, %c\n", ch1, ch2, ch3); return 0; }
建议你把完整的scanf调用代码贴出来,这样能更精准地找到问题所在!
内容的提问来源于stack exchange,提问作者Pustafix
相关产品推荐
相关产品推荐

