C99: switch-case Syntax unklar

kas

Obermaat
Thread Starter
Mitglied seit
28.06.2006
Beiträge
397
Ort
Berlin-Wedding
nabend,

ich habe grad nen hängerchen. und zwar möchte ich einen Datumsckeck in eine swich case anweisungsblock packen. dabei soll der monat übergeben werden. die ganze switch geschichte steckt daher in einer IF tag == 31 schleife.

wie macht man das jetzt genau?

er soll 0 returnen wenn der jeweilige monat 31 tage hat, und 1 wenn er 30 tage hat.

hier mal ein unfertiges bsp:
Code:
  if (tag == 31)
  {
    switch(monat)
    {
      case'1': return 1; break;
      case'2': return 0; break;
      case'3': return 1; break;
      case'4': return 0; break;
      case'5': return 1; break;
      case'6': return 0; break;
      case'7': return 1; break;
      case'8': return 1; break;
      case 9: return 0; break;
      case 10: return 1; break;
      case'11': return 0; break;
      case'12': return 1; break;
      default: return 0; break;
    }
  }

bin mir eben nicht sicher ob ich die ' ' brauche oder nicht. kann ich die monate mit 31 und 30 nicht irgendwie zusammenfassen?

vllt. kann mir ja mal eben einer auf die sprünge helfen. danke!
Hinzugefügter Post:
ok ich war mal mutig. das hier funktioniert. nich wundern, da sind win paar eigene makros drin:
Code:
  if (tag == 31)
  {
    switch(monat)
    {
      case 1: return 1; break;
      case 2: POSITION(10, 1);
              CLEAR_LINE;
              printf("Der eingegebene Monat hat keine 31 Tage. Bitte korrigieren Sie Ihre Eingabe."); return 0; break;
      case 3: return 1; break;
      case 4: POSITION(10, 1);
              CLEAR_LINE;
              printf("Der eingegebene Monat hat keine 31 Tage. Bitte korrigieren Sie Ihre Eingabe."); return 0; break;
      case 5: return 1; break;
      case 6: POSITION(10, 1);
              CLEAR_LINE;
              printf("Der eingegebene Monat hat keine 31 Tage. Bitte korrigieren Sie Ihre Eingabe."); return 0; break;
      case 7: return 1; break;
      case 8: return 1; break;
      case 9: POSITION(10, 1);
              CLEAR_LINE;
              printf("Der eingegebene Monat hat keine 31 Tage. Bitte korrigieren Sie Ihre Eingabe."); return 0; break;
      case 10: return 1; break;
      case 11: POSITION(10, 1);
               CLEAR_LINE;
               printf("Der eingegebene Monat hat keine 31 Tage. Bitte korrigieren Sie Ihre Eingabe."); return 0; break;
      case 12: return 1; break;
      default: POSITION(10, 1);
               CLEAR_LINE;
               printf("Unerklaerlicher Fehler!");return 0; break;
    }
  }
 
Zuletzt bearbeitet:
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
Die '' beim ersten Beispiel müssen weg - sonst würdest du ja ein char als ASCII-Code angeben - was bei den 2-stelligen zu Fehlern führt.

Beste Variante: Ein Array aus 12 Bytes machen und entsprechend füllen und mit dem Monat als Index reingreifen. Ist die kürzeste und schnellste Variante und du könntest sogar noch den Februar auswerten.
 
der februar wird voher abgefangen. es wird sogar auf schaltjahr geprüft.
das mit dem array klingt spannend. ich prüfe das. danke!
 
>>case'1': return 1; break;

Das "break" sollte auch überflüssig sein, da die Methode schon mit "return 1" verlassen wurde.
 
ich bin grad mal anner lösung dran.

//edit: fertig :fresse:

Code:
// test.cpp : main project file.

#include "stdafx.h"

using namespace System;

//prototypen
bool has31Days(int tage);
int getDaysFromMonth(int monat);

int main()
{
int monat = 13; //angenommener Monat
int tage = getDaysFromMonth(monat);  //tage aus Monat auslesen
if (tage == -1)
{
	//hier irgendwelche fehlerbehandlungen...
	Console::WriteLine("Unbekannter Fehler aufgetreten");
}
else
{
	bool pruefung = has31Days(tage);
	if (pruefung == false)
		Console::WriteLine("Der eingegebene Monat hat keine 31 Tage. Bitte korrigieren Sie Ihre Eingabe.");
	else
		Console::WriteLine("Der eingegebene Monat hat 31 Tage.");
}
Console::ReadLine();
return 0;
}



bool has31Days(int tage)
{
int value = tage % 31;
if(value==0)
	return true;
else
	return false;
}


int getDaysFromMonth(int monat)
{
switch(monat) 
	{ 
	case 1: return 30; 
	case 2: return 28; 
	case 3: return 31; 
	case 4: return 30; 
	case 5: return 31; 
	case 6: return 30; 
	case 7: return 31; 
	case 8: return 31; 
	case 9: return 30;
	case 10: return 31; 
	case 11: return 30; 
	case 12: return 31; 
	default: return -1; 
	}
}

Kann sogar mit Februar direkt umgehen...die wichtige Funktion ist hierbei die hier:

Code:
bool has31Days(int tage)
{
int value = tage % 31;
if(value==0)
	return true;
else
	return false;
}

hier wird mithilfe eines modulo-operators geprüft, ob ein Monat 31 Tage hat oder nicht...

ist in meinen augen wesentlich eleganter. zwar muss man hier von monat auf tage umrechnen, aber vllt. kannst du das später im code noch verwenden (z.b. bei der prüfung ob das richtige datum eingegeben wurde -> 30.2. kannst du dann abfangen.)

jaja ich weiss is wieder alles viel zu kompliziert :fresse:
 
Zuletzt bearbeitet:
wow, das schaut auch nach einer interessanten lösung aus. dabei handelt es sich doch um c++, oder?

das programm ist komplett in ansi c, standard 1999 geschrieben.

ich habe die switch-case-anweisung drin gelassen. derzeit arbeite ich an einem anderen problem in dem programm. dazu mache ich einen neuen thread auf.

auf jeden fall vielen dank!
 
das steht zwar cpp, aber da hier keine objekte oder ähnliches erzeugt werden kann das auch in komplett ansi c kompiliert werden .
 
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh