c - for循环不终止
问题描述
我试图弄清楚为什么我最里面的for
循环没有中断。
我已经为数组的“列表”实现了凯撒密码。char
void caesar(char **list, size_t listsize, unsigned int offset) {
for (size_t i = 0; i < listsize; i++) {
for (size_t j = 0; list[i] != NULL && j < sizeof(list[i]); j++) {
for (unsigned int k = 0; k < offset && (list[i][j] >= 65 && list[i][j] <= 90) || (list[i][j] >= 97 && list[i][j] <= 122); k++) {
if(list[i][j] == 122)
list[i][j] = 97;
else if(list[i][j] == 90)
list[i][j] = 65;
else
list[i][j]++;
//works with the break condition
/* if(k == offset - 1)
break;*/
}
}
}
}
所以如果没有最后一条break
语句,我会得到一个无限循环,即使我的循环break
头部有一个条件for
。
有人有想法吗?
解决方案
for (unsigned int k = 0; k < offset && (list[i][j] >= 65 && list[i][j] <= 90) || (list[i][j] >= 97 && list[i][j] <= 122); k++)
使用一些占位符标识符,循环条件以 形式编写a && b || c
,由于运算符优先级,它被解析为(a && b) || c
而不是a && (b || c)
您想要的。您可以添加一些括号来修复它:
for (unsigned int k = 0; k < offset && ((list[i][j] >= 65 && list[i][j] <= 90) || (list[i][j] >= 97 && list[i][j] <= 122)); k++)
// ^ ^
推荐阅读
- java - Redis:获取 JedisConnectionException:连接远程服务器时无法从池中获取资源
- css - 我如何响应绝对位置的任何内容?
- node.js - Firebase Cloud Function 仅适用于 console.log()
- html - 嵌套表结构不正确
- javascript - 为什么我不能通过使用 ctx.globalCompositeOperation = "xor"; 绘制两次来删除虚线圆(弧)?
- java - 如何创建一个新线程,Android Studio?
- c# - 当列为空时,Linq 连接错误
- python - 这个多元线性回归我做错了什么
- neo4j - 每个顶点有 100 多条边的图
- group-by - Power BI:无代码的表可视化中的 GroupBy 列