2013-04-21 43 views
-5

我有使用开关情况下的程序,其发现一个数是否小于10,等于10,大于10且小于100,并从上述options.The数量的不同是由用户给定的写。 我尝试这样做:C编程开关盒有什么问题?

#include <stdio.h> 
int main() 


switch (4*(n >= 100) + 2*(n >= 10) + (n <= 10)) 
{ 
case 1: printf("%d is less than 10\n", n); break; 

case 3: printf("%d is equal to 10\n", n); break; 

case 2: printf("10 < %d < 100\n", n); break; 

default: printf(" %d is not in an identified range\n", n); break; 
} 

但是,当我尝试编译它,它说:

ERROR IN "switch (4*(n >= 100) + 2*(n >= 10) + (n <= 10)) ". 

哪里错误?我需要把它写在开关中。

错误:D:\comparison.c syntax error before "switch"

+2

无需编写全部大写。 – MPelletier 2013-04-21 18:17:00

+4

你的开关是否低于主体?你的主体是否真的没有开口托架? – MPelletier 2013-04-21 18:18:16

+2

真的没有'n'的声明吗?至少发布** REAL **错误消息*,正如它向您展示的那样。 – WhozCraig 2013-04-21 18:19:01

回答

1

如果这是你确切代码,再下面是错误的:

  • 没有开括号过去的main()声明。因此,没有任何功能正文而您的代码现在位于全局名称空间的中间。
  • 也有不变量n的声明,因此也将导致编译错误。
  • 最后,main()没有返回值,虽然没有编译错误(除非警告足够迂腐),但这是一个逻辑错误,并且保留了具有未定义行为的main()的返回值。

这工作:

#include <stdio.h> 
int main(int argc, char* argv[]) 
{ // <<==== note: added opening curly brace 

    int n=65; // <<==== note: added declaration of n 

    switch (4*(n >= 100) + 2*(n >= 10) + (n <= 10)) 
    { 
     case 1: printf("%d is less than 10\n", n); break; 
     case 3: printf("%d is equal to 10\n", n); break; 
     case 2: printf("10 < %d < 100\n", n); break; 
     default: printf(" %d is not in an identified range\n", n); break; 
    } 

    return 0; // <<==== note: added return value 
} // <<== note: added closing curly brace 

我留在你的switch条件下的实际表现是否正确或者不给你(我不认为是这样,但我不熟悉你的分配) 。

+0

N必须由用户给出。 – user2304286 2013-04-21 18:38:24

+0

@ user2304286如何从用户输入中填充'n'是一个不同的问题和不同的问题。你的问题是关于你的代码不能编译的原因。这就是为什么。 – WhozCraig 2013-04-21 18:39:30

+0

很多很多,谢谢。 – user2304286 2013-04-21 18:40:07

1

如果这是您的整个代码,那么您在函数周围缺少大括号{}

你也应该在函数的末尾添加return 0;声明,因为你声明函数返回一个整数。如果您不接受任何参数,则应该使用void参数声明函数。

+0

对不起我的智商,但你可以给我如何改变表达的暗示? – user2304286 2013-04-21 18:27:11

+0

@ user2304286这个表达式对于你想要做的事实际上是正常的,错误是完全不同的。 – 2013-04-21 18:34:43