如果语句没有停止执行。 C编程

时间:2014-02-03 11:22:24

标签: c if-statement

我对此非常陌生,我正在尝试创建一个基于文本的扫雷。 我希望玩家决定他希望网格有多大。 我的问题是,应该确保用户输入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");

5 个答案:

答案 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也是如此,但你会得到错误的结果。