鱼C论坛

 找回密码
 立即注册
查看: 155|回复: 17

[已解决]简单的if语法问题

[复制链接]
最佳答案
0 
发表于 2020-8-1 01:33:24 | 显示全部楼层 |阅读模式
30鱼币
为什么我输入一个合格的妃子数据,会直接输出不合格啊
好像我输入什么数据都会输出不合格,请大神帮忙看看哪里写错了
是if后面不能跟这么多与吗??
最佳答案
2020-8-1 01:33:25
你的 scanf_s() 函数我的编译器编译不了,说是没定义,我还没找到定义的方法,所以我是将它改为 scanf() 调试的,发现你的两个 %d%d 之间没有分隔符“空格”或者“逗号”隔开,于是我输入18岁,身高168厘米,直接变成了:18168,试想一个10000多岁的美女给你,你肯定是不会要的,所以,她是不合格的!另外,条件中那些括号是可要可不要的,我也去掉了,看着条件简洁一点

#include<stdio.h>
int main()
{
        int a,b;
        printf("请输入年龄和身高:\n");
        scanf_s("%d,%d",&a,&b);
        
        if(a>=18 && a<=25 && b>=165 && b<=178)
        {
                printf("妃子\n");        
        }
         
        else if(a>=18 && a<=30 && b>=160 && b<=165)
        {
                printf("宫女\n");        
        }
        else
        {
                printf("不合格\n");
        }
return 0;
}

最佳答案

查看完整内容

你的 scanf_s() 函数我的编译器编译不了,说是没定义,我还没找到定义的方法,所以我是将它改为 scanf() 调试的,发现你的两个 %d%d 之间没有分隔符“空格”或者“逗号”隔开,于是我输入18岁,身高168厘米,直接变成了:18168,试想一个10000多岁的美女给你,你肯定是不会要的,所以,她是不合格的!另外,条件中那些括号是可要可不要的,我也去掉了,看着条件简洁一点 #include int main() { int a,b; pri ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
9 
发表于 2020-8-1 01:33:25 | 显示全部楼层    本楼为最佳答案   
你的 scanf_s() 函数我的编译器编译不了,说是没定义,我还没找到定义的方法,所以我是将它改为 scanf() 调试的,发现你的两个 %d%d 之间没有分隔符“空格”或者“逗号”隔开,于是我输入18岁,身高168厘米,直接变成了:18168,试想一个10000多岁的美女给你,你肯定是不会要的,所以,她是不合格的!另外,条件中那些括号是可要可不要的,我也去掉了,看着条件简洁一点

#include<stdio.h>
int main()
{
        int a,b;
        printf("请输入年龄和身高:\n");
        scanf_s("%d,%d",&a,&b);
        
        if(a>=18 && a<=25 && b>=165 && b<=178)
        {
                printf("妃子\n");        
        }
         
        else if(a>=18 && a<=30 && b>=160 && b<=165)
        {
                printf("宫女\n");        
        }
        else
        {
                printf("不合格\n");
        }
return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
0 
 楼主| 发表于 2020-8-1 01:34:17 | 显示全部楼层
  1. #include<stdio.h>
  2. int main()
  3. {
  4.         int a,b;
  5.         printf("请输入年龄和身高:");
  6.         scanf_s("%d%d",&a,&b);
  7.        
  8.         if((a>=18&&a<=25)&&(b>=165&&b<=178))
  9.         {
  10.                 printf("妃子\n");       
  11.         }
  12.          
  13.         else if((a>=18&&a<=30)&&(b>=160&&b<=165))
  14.         {
  15.                 printf("宫女\n");       
  16.         }
  17.         else
  18.         {
  19.                 printf("不合格\n");
  20.         }
  21. return 0;
  22. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
0 
 楼主| 发表于 2020-8-1 01:35:11 | 显示全部楼层
代码忘记贴了,补上了在上面
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
23 
发表于 2020-8-1 09:06:05 | 显示全部楼层
我试了下是没问题的啊,可能是你的输入有错误,你把你输入和输出结果贴图出来,我看看
无标题.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
9 
发表于 2020-8-1 09:49:35 | 显示全部楼层
Neverturnback 发表于 2020-8-1 09:06
我试了下是没问题的啊,可能是你的输入有错误,你把你输入和输出结果贴图出来,我看看

从你贴出来图看,你输入时强行地加了一个空格。加上你的编译器容错率还不错,才使得你能选到妃子
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
0 
发表于 2020-8-1 10:17:27 | 显示全部楼层
我用Dev C++运行你这个程序也是没有问题的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
54 
发表于 2020-8-1 10:17:29 | 显示全部楼层
本帖最后由 baige 于 2020-8-1 11:23 编辑
风过无痕1989 发表于 2020-8-1 09:49
从你贴出来图看,你输入时强行地加了一个空格。加上你的编译器容错率还不错,才使得你能选到妃子


6,输入本来就要加空格的,推荐看看https://fishc.com.cn/forum.php?m ... peid%26typeid%3D583
空白字符:该函数将读取并忽略空白字符(空白字符包含空格、回车和制表符);
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
9 
发表于 2020-8-1 10:21:39 | 显示全部楼层
      以下是我学习C语言一个月,进入到论坛,收集整理的高手们的回复的内容中精选出来的一小部份,供你学习参考:

      键盘输入 scanf() 函数是严格按照你在引号内的格式从缓冲区读取字符。一般情况下引号之间只写格式化要求,格式化内容要和输入内容一致,数与数、字符与字符之间可以用空格隔开,也可以用逗号隔开,否则就会出错。除了格式化操作符以外,不加任何其他字符,连空格都不要加。

      scanf () 在你输入一个数后,它是不会立即显示的,要等再接收到一个非(空格、制表符、回车)的输入scanf语句才结束。而且,最后输入的那个非(空格、制表符、回车)的东西是不会被这个scanf读进来的,而是留在输入流里。

      scanf("%d,%d,%d",&a,&b,&c),在每个数字之间需要输入逗号,否则后面的变量就无法正常赋值。假如你先输入18,然后输入逗号以外的其他非数字字符, scanf()会认为第一个int型变量输入完成,将18赋值给变量a;然后就会一直等待你输入逗号,但是你迟迟没有输入,超时之后程序没有正常给变量bc赋值,你的程序运行结果肯定和你的预期不一样。

评分

参与人数 1荣誉 +2 贡献 +3 收起 理由
Anzaizai + 2 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
7 
发表于 2020-8-1 10:56:09 | 显示全部楼层
风过无痕1989 发表于 2020-8-1 10:21
以下是我学习C语言一个月,进入到论坛,收集整理的高手们的回复的内容中精选出来的一小部份,供你学 ...

如果形如scanf("%d%d"),可以用空格或回车来输入下一个值的。scanf确实是严格控制输入的,我觉得这是个特例
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
54 
发表于 2020-8-1 11:24:51 | 显示全部楼层
空白字符:该函数将读取并忽略空白字符(空白字符包含空格、回车和制表符);
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
46 
发表于 2020-8-1 11:51:36 | 显示全部楼层
风过无痕1989 发表于 2020-8-1 02:39
你的 scanf_s() 函数我的编译器编译不了,说是没定义,我还没找到定义的方法,所以我是将它改为 scanf() 调 ...

scanf格式控制不需要空格或逗号来分隔
scanf("%d%d), &a,&b);
这样的格式,你在输入的时候加上空格就OK了,18 168而不是18168
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
9 
发表于 2020-8-1 11:56:37 | 显示全部楼层
chxchxkkk 发表于 2020-8-1 11:51
scanf格式控制不需要空格或逗号来分隔
scanf("%d%d), &a,&b);
这样的格式,你在输入的时候加上空格就OK ...

既然 scanf() 这个函数要求严格,我们不对自己要求严格一点?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
0 
发表于 2020-8-1 14:07:43 | 显示全部楼层
风过无痕1989 发表于 2020-8-1 02:39
你的 scanf_s() 函数我的编译器编译不了,说是没定义,我还没找到定义的方法,所以我是将它改为 scanf() 调 ...

vs2019用scanf()没问题
别的版本好像行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
9 
发表于 2020-8-1 14:32:22 | 显示全部楼层
胡鸣谦 发表于 2020-8-1 14:07
vs2019用scanf()没问题
别的版本好像行

我不知道,我安装是哪一个版本。我现在主用的是 VC++6.0,遇到 C99 代码时,才用 DEV_C++。原因是 VC++6.0 的界面比较友好,以及它拥有一个强大的 DSCN。

************************************************************

关于Dev-C++:)
x C++
Copyright[c)Bloodshed SoftWaron 5.11
GNU通用公共授权GPL Build time:四月27 2015-22:11GNU GENERAL PUBLIC LICENSE Version 2.June 1991
Copyright[C)1989,1991 Free Software Foundation,Inc.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
0 
发表于 2020-8-1 14:42:05 | 显示全部楼层

你还能忍受VC6.0???
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
9 
发表于 2020-8-1 14:54:52 | 显示全部楼层
本帖最后由 风过无痕1989 于 2020-8-1 15:13 编辑
胡鸣谦 发表于 2020-8-1 14:42

你还能忍受VC6.0???


我是初学,学C才一个月,习惯于每个字符都自己敲,不习惯 DEV_C++ 的我敲一个函数,它将各类括号都带出来,让我去填。等以后熟练了,再完全去用它吧

再者,XP系统所支持的最高.net framework 版本为 4.0.3,而VS2019要求 .net framework 版本为4.6或以上
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
0 
发表于 2020-8-1 18:05:43 | 显示全部楼层
风过无痕1989 发表于 2020-8-1 14:54
我是初学,学C才一个月,习惯于每个字符都自己敲,不习惯 DEV_C++ 的我敲一个函数,它将各类括号都带出 ...

XP最好用VC6
我是WIN10
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

小甲鱼强烈推荐上一条 /1 下一条

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1

GMT+8, 2020-8-12 12:41

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表