我有一个代码,可以根据数据库ID从数据库中提取数据。
当我对条件使用循环时,if条件被忽略,即使相等,代码也始终运行。
我制作了两个示例,显示了for的用法,另一个示例仅显示了check。
使用if仅检查,代码有效,但是我需要使用for,因为DB有很多条目。
数据库条目:
0,2115
1,604
2,254
3,425
4,321
5,98
6,15001
...
代码:
int use_sm(struct session *ss, int n) {
struct db_sm *sm = sm->database(ss->get_sm);
if (!sm)
return 1;
if (sm->enable && sm->count_db > 0) {
struct get_dfs *gf = ss->data[n];
if (gf) {
for (int i = 0; i < sm->count_db; i++) {
if(gf->u_id != sm->db[i].u_id) { //code is running even though ==
printf("u_id %d db_u_id %d\n", gf->u_id, sm->db[i].u_id);
sm->use_sm_sub(sm, 5);
return 0;
}
}
}
}
return 1;
}
代码,如果:
int use_sm(struct session *ss, int n) {
struct db_sm *sm = sm->database(ss->get_sm);
if (!sm)
return 1;
if (sm->enable && sm->count_db > 0) {
struct get_dfs *gf = ss->data[n];
if (gf) {
if (gf->u_id != sm->db[0].u_id && gf->u_id != sm->db[1].u_id && gf->u_id != sm->db[2].u_id && gf->u_id != sm->db[3].u_id) {
printf("u_id %d u_id1 %d u_id2 %d u_id3 %d u_id4 %d\n", gf->u_id, sm->db[0].u_id, sm->db[1].u_id, sm->db[2].u_id, sm->db[3].u_id);
sm->use_sm_sub(sm, 5);
return 0;
}
}
}
return 1;
}
使用 if 条件的代码可以正常工作。 如果验证 gf-> u_id 的值为 == sm-> db [x] .u_id 该代码未执行。
for循环有什么问题?
答案 0 :(得分:0)
您拥有的排名第一的
if (gf) {
for (int i = 0; i < sm->count_db; i++) {
if(gf->nameid...
最差的一个
if (gf->u_id...
答案 1 :(得分:0)
if
使用&&
测试多个条件,而一个错误条件导致整个if
为假。
for
多次迭代并测试一个条件,然后针对每个真实条件执行该块。
设置标志时,使用标志查找匹配项并跳过打印。
int use_sm(struct session *ss, int n) {
struct db_sm *sm = sm->database(ss->get_sm);
if (!sm)
return 1;
if (sm->enable && sm->count_db > 0) {
struct get_dfs *gf = ss->data[n];
if (gf) {
int match = 0;
for (int i = 0; i < sm->count_db; i++) {
if(gf->u_id == sm->db[i].u_id) {
match = 1;//found a match
}
}
if ( ! match) {//no matches
printf("u_id %d ", gf->u_id);
for (int i = 0; i < sm->count_db; i++) {
printf("db[%d].u_id %d ", i, sm->db[i].u_id);
}
printf("\n");
sm->use_sm_sub(sm, 5);
return 0;
}
}
}
return 1;
}