C语言条件判断异常导致任意输入均输出646TL的问题咨询
问题原因
你代码里的条件判断写法不符合C语言的语法规则:
- C语言不支持
1<=yas<=3这种连续区间判断的写法,这类表达式会从左到右依次计算:- 先执行
1 <= yas,得到的结果是布尔值(真为1,假为0) - 再拿第一步得到的1/0和3做比较
0<=3/1<=3,结果永远为真 - 所以第一个
if的条件永远成立,程序始终输出646TL的结果
- 先执行
修正方案
把所有连续区间判断拆分为两个独立的判断,用逻辑与运算符&&连接即可,示例:
原错误写法1<=yas<=3 && 0<=hacim<=1300改为正确写法:1<=yas && yas<=3 && 0<=hacim && hacim<=1300
其他判断条件按相同规则修改即可。
另外补充两个潜在问题:
- 代码缺少必要头文件,开头需要添加
#include <stdio.h>(提供输入输出函数声明)和#include <string.h>(提供strcmp函数声明),否则编译会出现警告或错误。 - 第四个判断的排量区间存在逻辑漏洞:原写法和第三个判断的1300排量边界重复,建议改为
1301<=hacim && hacim<=1600避免歧义。
修正后完整代码
#include <stdio.h> #include <string.h> int main(int argc, char *argv[]) { int hacim,yas; char ad[20]; //Kullanıcı adı printf("Kullanici adinizi girin: \n"); scanf("%s", ad); printf("Sifrenizi girin: \n"); char sifre[20]; // Şifre scanf("%s", sifre); if (strcmp(ad,"ahmet")==0 && strcmp(sifre,"1234")==0){ printf("Giris basarili. Hosgeldiniz\n\n"); } else { printf("Hatali giris yaptiniz \n"); } printf("Aracin motor hacmini giriniz:"); scanf("%d",&hacim); printf("\nAracin model yilini giriniz:"); scanf("%d",&yas); if(1<=yas && yas<=3 && 0<=hacim && hacim<=1300){ printf("\nOdemeniz gereken tutar 646TL"); } else if(1<=yas && yas<=3 && 1301<=hacim && hacim<=1600){ printf("Odemeniz gereken tutar 1035TL"); } else if(4<=yas && yas<=6 && 0<=hacim && hacim<=1300){ printf("Odemeniz gereken tutar 450TL"); } else if(4<=yas && yas<=6 && 1301<=hacim && hacim<=1600){ printf("Odemeniz gereken tutar 776TL"); } else{ printf("yanlis deger"); } return 0; }
内容的提问来源于stack exchange,提问作者FFat
相关产品推荐
相关产品推荐

