wieloargumentowe switch-e i struktury

0

Dwa zagadnienia:

  1. Mamy dwuelementową tablicę int, czy można ją jakoś umieścić w argumencie switch:
{
	int a[2];
	a[0] = 5; a[1] = 9;

	switch(a)
	{
	case 1,2: instrukcje1; break;	//instrukcje1 nie zostaną wykonane
	case 5,9: instrukcje2; break;	//instrukcje2 zostaną wykonane
	}
}
using namespace std;
#include <iostream>
#include <string>

struct MIASTO
{
	string nazwa;
	int populacja;
	bool t;
};

int main()
{
	MIASTO warszawa;
	warszawa.nazwa = "Warszawa";
	string strNazwa = "warszawa";
	if (strNazwa.nazwa == "Warszawa") cout << "TRUE";
	return 0;
}

Co zrobić, żeby to zadziałało?

0
  1. nie da się tak
  2. nie powinno być raczej if(warszawa.nazwa == "Warszawa")?
0
  1. j.w. + Strcmp
0
#define pair(a,b) ((((long long)(a))<<32)|(b))

int a[2];
a[0] = 5; a[1] = 9;
switch(pair(a[0],a[1]))
  {
   case pair(1,2): instrukcje1; break;        //instrukcje1 nie zostaną wykonane
   case pair(5,9): instrukcje2; break;        //instrukcje2 zostaną wykonane
  }

Jeżeli a[0] i a[1] zawsze będą w granicach np 0..100 to nie trzeba konwertować na long long a przesunięcie wystarczy zrobić o 7.

if (warszawa.nazwa == strNazwa) cout << "TRUE";
0

Jedno ze sprytnych rozwiązań tego problemu jest tablica wskaźników:

void (*tablica[2][2])() ={
      {akcja1, akcja2},
      {akcja3, akcja4}
};

if (tablica[i][j]) {
    (*tablica[i][j])();
}

Moim zdaniem autor wątku robi klasyczny błąd w zadawaniu pytania! Zamiast napisać CO chce zrobić to pisze JAK chce coś zrobić i my mamy zaproponować jak spełnić najlepiej jego wyobrażenia. Założę się, że znajdziemy o wile lepsze rozwiązanie, jeśli tylko zdradzi tajemnicę co ma robić ten jego kod.

1 użytkowników online, w tym zalogowanych: 0, gości: 1