简单的if语法问题
为什么我输入一个合格的妃子数据,会直接输出不合格啊好像我输入什么数据都会输出不合格,请大神帮忙看看哪里写错了
是if后面不能跟这么多与吗?? 你的 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;
} #include<stdio.h>
int main()
{
int a,b;
printf("请输入年龄和身高:");
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;
} 代码忘记贴了,补上了在上面 我试了下是没问题的啊,可能是你的输入有错误,你把你输入和输出结果贴图出来,我看看 Neverturnback 发表于 2020-8-1 09:06
我试了下是没问题的啊,可能是你的输入有错误,你把你输入和输出结果贴图出来,我看看
从你贴出来图看,你输入时强行地加了一个空格。加上你的编译器容错率还不错,才使得你能选到妃子 我用Dev C++运行你这个程序也是没有问题的 本帖最后由 baige 于 2020-8-1 11:23 编辑
风过无痕1989 发表于 2020-8-1 09:49
从你贴出来图看,你输入时强行地加了一个空格。加上你的编译器容错率还不错,才使得你能选到妃子
6,输入本来就要加空格的,推荐看看https://fishc.com.cn/forum.php?mod=viewthread&tid=67391&extra=page%3D1%26filter%3Dtypeid%26typeid%3D583
空白字符:该函数将读取并忽略空白字符(空白字符包含空格、回车和制表符); 以下是我学习C语言一个月,进入到论坛,收集整理的高手们的回复的内容中精选出来的一小部份,供你学习参考:
键盘输入 scanf() 函数是严格按照你在引号内的格式从缓冲区读取字符。一般情况下引号之间只写格式化要求,格式化内容要和输入内容一致,数与数、字符与字符之间可以用空格隔开,也可以用逗号隔开,否则就会出错。除了格式化操作符以外,不加任何其他字符,连空格都不要加。
scanf () 在你输入一个数后,它是不会立即显示的,要等再接收到一个非(空格、制表符、回车)的输入scanf语句才结束。而且,最后输入的那个非(空格、制表符、回车)的东西是不会被这个scanf读进来的,而是留在输入流里。
scanf("%d,%d,%d",&a,&b,&c),在每个数字之间需要输入逗号,否则后面的变量就无法正常赋值。假如你先输入18,然后输入逗号以外的其他非数字字符, scanf()会认为第一个int型变量输入完成,将18赋值给变量a;然后就会一直等待你输入逗号,但是你迟迟没有输入,超时之后程序没有正常给变量bc赋值,你的程序运行结果肯定和你的预期不一样。
风过无痕1989 发表于 2020-8-1 10:21
以下是我学习C语言一个月,进入到论坛,收集整理的高手们的回复的内容中精选出来的一小部份,供你学 ...
如果形如scanf("%d%d"),可以用空格或回车来输入下一个值的。scanf确实是严格控制输入的,我觉得这是个特例
空白字符:该函数将读取并忽略空白字符(空白字符包含空格、回车和制表符); 风过无痕1989 发表于 2020-8-1 02:39
你的 scanf_s() 函数我的编译器编译不了,说是没定义,我还没找到定义的方法,所以我是将它改为 scanf() 调 ...
scanf格式控制不需要空格或逗号来分隔
scanf("%d%d), &a,&b);
这样的格式,你在输入的时候加上空格就OK了,18 168而不是18168 chxchxkkk 发表于 2020-8-1 11:51
scanf格式控制不需要空格或逗号来分隔
scanf("%d%d), &a,&b);
这样的格式,你在输入的时候加上空格就OK ...
既然 scanf() 这个函数要求严格,我们不对自己要求严格一点? 风过无痕1989 发表于 2020-8-1 02:39
你的 scanf_s() 函数我的编译器编译不了,说是没定义,我还没找到定义的方法,所以我是将它改为 scanf() 调 ...
vs2019用scanf()没问题
别的版本好像行 胡鸣谦 发表于 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. 啥
你还能忍受VC6.0??? 本帖最后由 风过无痕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或以上 风过无痕1989 发表于 2020-8-1 14:54
我是初学,学C才一个月,习惯于每个字符都自己敲,不习惯 DEV_C++ 的我敲一个函数,它将各类括号都带出 ...
XP最好用VC6
我是WIN10 风过无痕1989 发表于 2020-8-1 09:49
从你贴出来图看,你输入时强行地加了一个空格。加上你的编译器容错率还不错,才使得你能选到妃子
???{:10_243:}话说scanf("%d%d", &a, &b);和scanf("%d,%d", &a, &b);有区别么?
页:
[1]