【问题标题】:expected ')' before '!' token in c [closed]在 '!' 之前预期 ')' c中的令牌[关闭]
【发布时间】:2017-10-28 22:25:08
【问题描述】:
#include <stdio.h>
int main()
{ 
int i,l,n;
int w[1000];
int h[1000];
scanf ("%d",&l);
scanf("%d",&n);
for(i=0;i<n;i++)
{
     scanf("%d %d",&w[i],&h[i]);
}
for(i=0;i<n;i++)
{
    if((w[i]<l)!!(h[i]<l))
     printf("UPLOAD ANOTHER\n");
    else(w[i]>=l&&h[i]>=l)
      {
          if(w[i]==h[i])
          printf("ACCEPTED\n");
          else
          printf ("CROP IT\n");
      }
}
            return 0;
}

因为我是新手,所以我对这些代码行进行编码会显示错误:-

在函数'main'中:
18:20:错误:“!”之前的预期“)”令牌
21:11:错误:预期的';'在'{'令牌之前

【问题讨论】:

  • 使用!! 的意思是合乎逻辑还是使用||

标签: c error-handling


【解决方案1】:

在第一个 IF 语句中,您使用 !!作为 OR,但您应该使用 ||。

编译器无法知道您正在尝试做什么,但他们可以根据他们目前所阅读的内容告诉您他们的期望。因为您使用了 !!,它是 NOT 符号(两次),编译器只知道您的表达式在语法上不正确。在这种情况下,就是说给定这个意外的一元 NOT 运算符,当前表达式应该用 ')' 符号关闭。

编译器不是读心者,所以他们不知道你的意思是|| (逻辑或)。一些编译器过去常常尝试猜测(甚至修复)此类拼写错误,但它们只会让事情变得更糟。想到 PL/1,它会尝试修复编译器错误,这让人们抓狂。

第 21 行的第二个错误是因为您在“else”之后放置了一个表达式,这对期望在此时执行语句的编译器没有意义。您可以通过将“else”替换为“else if”来解决此问题。这是有效的,因为 IF 是一个语句,并且该语句接下来需要一个表达式。我想这就是你想要的:

#include <stdio.h>
int main()
{
 int i,l,n;    
 int w[1000];    
 int h[1000];

 scanf ("%d",&l);
 scanf("%d",&n);

 for(i=0;i<n;i++)
    {
     scanf("%d %d",&w[i],&h[i]);
    }

 for(i=0;i<n;i++)
    {
        if((w[i]<l)||(h[i]<l))
         printf("UPLOAD ANOTHER\n");
        else if (w[i]>=l&&h[i]>=l)
          {
              if(w[i]==h[i])
              printf("ACCEPTED\n");
              else
              printf ("CROP IT\n");
          }
    }
 return 0;
}

一旦你对 C 有更多的经验,你就会很容易地识别出这种错误,一个简单的拼写错误就会使编译器感到困惑。祝你好运!

【讨论】:

  • 谢谢你...纠正我,我忘了这个:-)
  • 这个 21:11 怎么样:错误:预期 ';'在'{'令牌之前??
  • 我已经更新了我的答案。您在 ELSE 之后放置了一个表达式,但 c 语法要求在 ELSE 之后有一个语句。你应该写“else if”。
猜你喜欢
  • 2014-11-10
  • 2023-03-31
  • 2021-09-05
  • 2012-10-30
  • 1970-01-01
  • 2013-11-12
  • 1970-01-01
  • 1970-01-01
  • 2018-03-13
相关资源
最近更新 更多