我对此非常陌生,我正在尝试创建一个基于文本的扫雷。 我希望玩家决定他希望网格有多大。 我的问题是,应该确保用户输入1到10之间的数字的if语句不起作用。请看看。
scanf ("%i/%i",&x,&y);
if (0 < x < 11 && 0 < y < 11)
{
printf ("you have selected %i by %i\n",x,y);
for (i = 0; i < x; i++)
{
for (j = 0; j < y; j++)
{
grid[x][y] = 'O';
printf ("%c ", grid[x][y]);
}
printf ("\n");
}
}
else
printf ("Wrong gridsize");
答案 0 :(得分:6)
C不支持双重比较,如:
0&lt; x&lt; 11
你应该写
0&lt; x&amp;&amp; x&lt; 11。
这可能会产生误导,因为第一个语句在语法上是正确的(它编译),但它不会做你可能相信的事情:检查两个边界,就像在数学表达式中一样(例如python做什么)。
就像你写过
一样(0
第一个二进制表达式返回一个布尔值(嗯,实际上是C中的int,C ++中的布尔值)。一旦转换为int,该布尔值为0或1,始终低于11,此后表达式始终为真。
当然,检查y边界也是如此。现在你应该能够自己解决这个问题了。
答案 1 :(得分:2)
if
语句必须与
if ((x > 0 && x < 11) && (y > 0 && y < 11))
答案 2 :(得分:1)
if statement
。
这是正确的形式。
if ((x > 0 && x < 11) && (y > 0 && y < 11))
以下是relational operators
> greater than 5 > 4 is TRUE
< less than 4 < 5 is TRUE
>= greater than or equal 4 >= 4 is TRUE
<= less than or equal 3 <= 4 is TRUE
== equal to 5 == 5 is TRUE
!= not equal to 5 != 4 is TRUE
C 不支持 double comparisons
。
答案 3 :(得分:1)
在您的scanf语句中,删除/运算符将其更改为
scanf ("%i%i",&x,&y);
你的if语句正在做什么是你期望做的
if (0 < x < 11 && 0 < y < 11)
首先输入值x和y(x = 4且y = 6)
它检查x是否大于0(这是真的),因此用1代替 0&lt; x
现在它的编译器 1&lt; 11 强> 接下来它检查哪个也是真的 同样地,无论你输入哪个值,总是如此。
答案 4 :(得分:0)
0 < x < 11
装置
(0 但是,如果x = 20,0 <20为1,则1&lt; 11也是如此,但你会得到错误的结果。