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

C语言do-while循环条件错误,无法筛选指定字符求助

问题分析与修正

你的循环条件逻辑存在致命错误,导致无法实现需求:

  • ch < 'A' && ch > 'Z' 和 ch < 'a' && ch > 'z' 这两个表达式永远为假,因为一个字符不可能同时小于字母区间的最小值、又大于最大值。
  • 原条件最终等价于 ch != '.',所以只有输入.时才会退出循环,大小写字母都会被强制重新输入,完全违背了你的需求。

正确逻辑

循环需要在输入不满足合法条件时持续执行,合法条件是:字符为大写字母(A-Z)、小写字母(a-z)或.。所以循环条件应该是「字符既不是大写字母,也不是小写字母,还不是.」。

修正后的代码

写法一:对合法条件取反

char ch;
do
{
    printf("Digite aqui um caractere: ");
    scanf(" %c", &ch);
} while (!( (ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z') || ch == '.' ));
return ch;

写法二:直接写非法条件(逻辑与)

char ch;
do
{
    printf("Digite aqui um caractere: ");
    scanf(" %c", &ch);
} while ( (ch < 'A' || ch > 'Z') && (ch < 'a' || ch > 'z') && ch != '.' );
return ch;

两种写法效果完全一致,都会在输入合法字符时退出循环,返回该字符。

内容的提问来源于stack exchange,提问作者Manuel Johnny Tap Andr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 01:50:35