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

