无限循环,我不知道为什么

时间:2018-05-28 01:51:32

标签: c

我想使用两个字符串的比较作为循环的条件, 但循环进入无限循环,我不知道为什么。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void input(int a[], char *comando, char *aux) {
    fgets(aux, 35, stdin);
    sscanf(aux, "%s %d  %d", comando, &a[0], &a[1]);
}

int table_size=10;
int ar_temp[2];
char comando[2];
char aux[35];

int main() {

    while((strcmp (comando, "X"))!=0 || (strcmp (comando, "x")!=0)) {
        input(ar_temp, comando, aux);
    }

    return 0;
}

请帮帮我

2 个答案:

答案 0 :(得分:3)

条件错误,while语句总是评估为true。

while((strcmp (comando, "X"))!=0 || (strcmp (comando, "x")!=0)) 

应该是:

while((strcmp (comando, "X"))!=0 && (strcmp (comando, "x")!=0)) 

答案 1 :(得分:0)

  

虽然(我不是骆驼)或(我不是狗)......

即使是骆驼和狗也会对这些子条款的一个产生真实的结果,所以,既然是真的,或者任何事情都是真的,那么这个陈述总是会产生真的。

你需要的是(恢复到实际的代码,而不是我稍微荒谬的例子):

while ((strcmp (comando, "X") != 0) && (strcmp (comando, "x") != 0)) {
//                                  ^^
//                          and rather than or

您还会注意到我已经修复了#34;&#34;您的第一个子句,以便括号的使用是一致的,在)之后将0移动到

当然,如果您有其他任何地方可以检查comando,那么可能需要预先设置单个案例,然后您只需要检查小写字体。