Xwab
Форумыnavigate_nextДругие языки программирования

C++, проблема с case'ми в switch
Сообщения
Diversant

Написал код.
Компилятор ругается, что элементы массива не константные.
Но я явно написал, что они константные.
Что за дела?
#include <iostream>
#include <cstdio>
using namespace std;

int main ()
{
   setlocale (LC_ALL, "Russian");

   const int pass[] = {123456, 654321};

   char auth[100];

   cout << "Введите пароль: ";
   gets (auth);

   switch (atoi (auth))
   {
      case pass[0]:
         cout << "You are Admin!";
         break;

      case pass[1]:
         cout << "You are User!";
         break;

      default:
         cout << "Password is NOT true!";
         break;
   }

   system ("pause");
   return 0;
}

04 Дек 2012, 19:09
Float

Не понимаю логику твоей программы. Зачем два пароля упрятывать в массив, а потом сравнивать из свичем? Он принимает как раз целочисленные константы, а не указатели.

04 Дек 2012, 19:15
Diversant

Float, ну элементы массива pass целочисленные же. Вот и думаю, почему свитч их не воспринимает.

04 Дек 2012, 19:16
Float

Diversant, у тебя же массив. И к слову, достаточно большой массив лучше проверять в цикле, обычным else-if.


__________
посл.ред. 04 Дек 2012, 19:20; всего 1 раз 04 Дек 2012, 19:19
bober

ифами будет броще. Свитч лучше использовать когда больше вариантов.

04 Дек 2012, 19:20
Diversant

Я так и не пойму, почему компилятор ругается, элементы массива pass типа int, какой и нужен свитчу. Что не так?

04 Дек 2012, 19:24
bober

попробуй вводить сразу в инт аргумент свитча

04 Дек 2012, 19:25
Diversant

Float, это да, но у меня 2 элемента только

04 Дек 2012, 19:26
Fever

обычный иф-елс в помощь.

7. смысл сообщения понял только после 4 прочтения, чти выше.


__________
посл.ред. 04 Дек 2012, 19:30; всего 1 раз 04 Дек 2012, 19:28
Float

Diversant, потому что свитч не принимает в case-ах массивы.

04 Дек 2012, 19:28
Ответить на тему