为什么getchar()函数无法读取输入?
问题原因
当你用scanf("%lf", &balance)读取账户余额时,用户输入完余额后按下的回车键会转化为换行符(\n),并留在输入缓冲区中。后续调用getchar()时,它会直接读取这个残留的换行符,而非你输入的交易类型(w/d),这就导致getchar()拿到的不是预期字符,程序逻辑无法正常执行。
解决办法
- 在
scanf之后额外调用一次getchar(),手动吃掉缓冲区里的换行符:scanf("%lf",&balance); getchar(); // 清除残留的换行符 - 或者在
scanf的格式字符串末尾加一个空格,让scanf自动忽略输入后的所有空白字符(包括换行、空格、制表符):scanf("%lf ",&balance); // %lf后添加空格 - 更稳妥的方式是用
fgets读取整行输入,再通过sscanf解析出余额,彻底避免缓冲区残留问题:char input_buf[100]; printf("Enter the balance: "); fgets(input_buf, sizeof(input_buf), stdin); sscanf(input_buf, "%lf", &balance);
内容的提问来源于stack exchange,提问作者Hasindu Dahanayake
相关产品推荐
相关产品推荐

