c - 为什么这如果接受所有条件,即使是不应该的?
问题描述
下午,我有一个问题要求我检查多个输入的长度是否小于原始基值(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,所以任何输入都会作为输出“坏”,有人可以解释为什么吗?谢谢你。
解决方案
mala[j]-caixa[j]
是对不相关指针的算术。对于不指向同一对象或同一数组中的对象的指针,您可以执行的唯一有效操作是==
and !=
。您在这里造成了未定义的行为,因此您的输出毫无意义。
推荐阅读
- node.js - 如何在 package.json (NodeJS) 中使用 npm 脚本添加参数
- excel - 使用 VBA 将数据从下拉菜单复制到单独的工作表作为报告
- terraform-provider-openstack - terraform 提供云中可用图像的列表
- python - 使用 Python 从 PDF 文件中提取元数据信息并验证数字签名
- python - CSV 文件的挂载路径返回目录,os isfile 检查返回 False
- java - 如何在 android Appium 测试自动化中制作可选择的 appPackage 和 appActivity BeforeScenario
- javascript - 将多图像 tiff 转换为多页 tiff 的节点模块
- mysql - MySql:Sum 与内部连接相结合 - 错误结果
- sql - 甲骨文。如果第一个语句存在记录,则忽略第二个
- postgresql - PostgreSQL 从(10.11 到 11.6)更新后的查询规划器行为退化