首页 > 解决方案 > 为什么这如果接受所有条件,即使是不应该的?

问题描述

下午,我有一个问题要求我检查多个输入的长度是否小于原始基值(20x20x20)并逐个判断它们是否适合基值,我尝试如下:

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


int main(){
    char mala[3][3]={"20","20","20"};
    int n=0,k=2,j=0,i=0,u=0;
    scanf("%d",&n);
    char caixa[3][3];
    char casos[2][6]={"good","bad"};
    char nmr[n][6];
    for(i=0;i<n;i++){
        scanf("%s %s %s",caixa[0],caixa[1],caixa[2]);
        for(j=0;j<3;j++){
            k=mala[j]-caixa[j];
            if(k<0){
                strcpy(nmr[i],casos[2]);
                break;
            }
            strcpy(nmr[i],casos[1]);
        }
    }
    for(i=0;i<n;i++){
        u=i+1;
        printf("Caso %d: %s\n",u,nmr[i]);
    }
    return 0;
}

出于某种原因,所有值都输入if,即使k>0,所以任何输入都会作为输出“坏”,有人可以解释为什么吗?谢谢你。

标签: cif-statement

解决方案


mala[j]-caixa[j]是对不相关指针的算术。对于不指向同一对象或同一数组中的对象的指针,您可以执行的唯一有效操作是==and !=。您在这里造成了未定义的行为,因此您的输出毫无意义。


推荐阅读