2013-04-21 2 views
-5

Я должен написать с помощью корпуса коммутатора программу, которая находит, если число меньше 10, равно 10, больше 10 и меньше 100 и отличается от указанных выше параметров. Номер указан пользователем. Я попытался это: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

+4

Является ли ваш коммутатор чуть ниже основного? На самом деле нет начального кронштейна для вашего основного? – MPelletier

+2

И действительно ли нет декларации 'n'? По крайней мере, отправьте сообщение об ошибке ** REAL ** * точно *, как показано вам. – WhozCraig

ответ

1

Если это ваш точного код, то следующее неверно:

  • Там нет открывающей скобки мимо объявления main(). Поэтому нет функции body, и теперь вы находитесь в середине глобального пространства имен.
  • Существует также не объявление переменной 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

+0

@ user2304286 Как заполнять 'n' с пользовательского ввода - это другая проблема и другой вопрос. Ваш вопрос касался того, почему ваш код не будет компилироваться. Вот почему. – WhozCraig

+0

Большое спасибо. – user2304286

1

Если это ваш весь код, вам не хватает брекетов { и } вокруг функции.

Вы также должны добавить оператор return 0; в конце функции, поскольку вы объявляете функцию для возвращения целого числа. И если вы не принимаете никаких аргументов, вы должны объявить функцию аргументом void.

+0

Извините мой IQ, но можете ли вы дать мне подсказку о том, как изменить выражение? – user2304286

+0

@ user2304286 Выражение действительно хорошо для того, что вы хотите сделать, ошибка - это нечто _completely_ другое. –