Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 14
  1. #1
    Trojaner
    Registriert seit
    11.11.2008
    Beiträge
    99

    Standard c++ befehl:switchcase wörter und nicht "char"

    hallo ich hab da ma ne frage:

    gibt es im switchcase auch einen befehl der wörter definiert(ist evtl. net der richtige ausdruck)

    bei so einem tutorial meinte jemand das man dass nur mit char und int und so was machen kann,also nur mit eintelnen ziffern.

    meine frage geht das auch mit wörtern?
    und wenn ja welcher befehl.

    eins weiß ich schon ma:

    bin der meinung dass mit strings nichts geht...........

    hoffe ihr versteht mich und danke schonmal im voraus für alle antworten.


    und was ist daran falsch?
    Code:
    #include <iostream>
    #include <windows.h>
    #include <string>
    #include <conio.h>
    #include <cstdlib.h>
     using namespace std;
     
     int main(){
        char wb,bereit;
        int zahl;
              
         cout<<"Hallo Stefan\nHast du heute gut geschlafen?[j/n]" <<endl;
         cin>>wb;
         
         switch (wb) 
          {
               case 'j':
                    case'J':                        
                    cout<<"\n Gut dann koennen wir beginnen" <<endl;
                    getch();
                    break; 
               case 'n':
                    case'N':
                    cout<<"Oh naja dises Quiz ueber \"Die Staemme\" wird dich schon aufmuntern"<<endl;
                    getch();
                    
                    break;     
                    
                default:
                        cout<<"Bitte antworte richtig auf die Frage Stefan"<<endl;
                        getch();
                        cout<<"FEHLER IM PROGRAMM!!!Das Programm beendet sich von alleine"<<endl;
                        getch();
                      return 0;
                       }
         cout<<"\n Biste du wirklich bereit?[j/n]"<<endl;
         cin>>bereit;
         
         switch (bereit)
         {
                case 'j':
                     case 'J':
                          {
                          cout<<"Gut dann kommt hier die erste Frage"<<endl;
                          system ("cls");
                          }
                          break;
                case 'n': //ab hier beginnt der NEIN-FAKTOR-BLOCK
                     case 'N':
                           {
                                 cout<<"OK.Dann gib die Zeit an die du brauchst:(in Sek.)"<<endl;
                                 cin>>zahl;
                                 cout<<"Ok.Dann warte ich jetzt so lange auf dich....."<<endl;
                                 system ("zahl");
                                 break;
                                 }
                     }
                                 
     }
    der compiler sagt mir diesen fehler:

    \Dokumente und Einstellungen\Marco\Eigene Dateien\computersprachen\C++\8. proggi für stefan stämme quiz.cpp C:\Dokumente und Einstellungen\Marco\Eigene Dateien\computersprachen\C++\C cstdlib.h: No such file or directory.

  2. #2
    EinHaarPinsel Avatar von .wired
    Registriert seit
    05.10.2008
    Beiträge
    316

    Standard

    Ja is doch kla...

    Der Default Block tritt dann ein, wenn keiner der Case's angesprochen wurde.
    gez.wired


  3. #3
    Der `Toastflüsterer` Avatar von AlterHacker
    Registriert seit
    27.09.2008
    Beiträge
    690

    Standard

    Zitat Zitat von .wired
    Ja is doch kla...

    Der Default Block tritt dann ein, wenn keiner der Case's angesprochen wurde.
    Das hat mit dem Compilerfehler aber nichts zu tun
    C:\Dokumente und Einstellungen\Marco\Eigene Dateien\computersprachen\C++\C cstdlib.h: No such file or directory.

    mach das #include ccstdlib.h weg

    cout<<"Ok.Dann warte ich jetzt so lange auf dich....."<<endl;
    system ("zahl");

    Daraus machst du besser
    cout<<"Ok.Dann warte ich jetzt so lange auf dich....."<<endl;
    Sleep(zahl*1000);

    Dafür musst du wohl die windows.h includieren

    Security is an illusion.
    Cheater : 8=o
    Normaluser : 8=======o
    Ich : 8================o

    BM: (4|2|0)

  4. #4
    Trojaner
    Registriert seit
    11.11.2008
    Beiträge
    99

    Standard

    das orblem wurde schon gelöst sry echt............
    ich bin auch zu blöd ich bin imma so einer der alles sofort wissen will und dann poste ich das schnell hier rein und löse das dann auf einmal selber...........
    tut mir echt leid.
    das problem hier hab ich aba net sofort hier reingepostet.
    ich wieß einfach net was ich da machen soll.

  5. #5
    Der mit Anatidaephobie Avatar von blackberry
    Registriert seit
    11.07.2008
    Beiträge
    2.350

    Standard

    Zitat Zitat von .wired
    Der Default Block tritt dann ein, wenn keiner der Case's angesprochen wurde.
    So ganz richtig ist das aber auch nicht.
    Hier mal ein Beispiel:
    Code:
    #include <stdio.h>
    
    
    int main(void)
    {
    	switch(1)
    	{
    		case 0:
    			puts("- case 0");
    		case 1:
    			puts("- case 1");
    		default:
    			puts("- default");
    	}
    	return 0;
    }
    Ausgabe:
    Code:
    blackberry@system:~/Desktop$ ./output
    - case 1
    - default
    Wie man sieht wird der default-Block ausgeführt, obwohl davor ein case-Block (case 1 um genau zu sein) ausgeführt wurde.
    Das ich das "break" nach dem case-Blöcken "vergessen" habe ist dabei natürlich klar.

    ______________________________
    back2topic

    Zitat Zitat von jookerxxx
    gibt es im switchcase auch einen befehl der wörter definiert(ist evtl. net der richtige ausdruck)
    Nein. In C sind für switch-Anweisungen nur Integer zugelassen (native Datentypen werden in der Regel gecastet, siehe S. 220, "Programmieren in C", 2. Auflage).
    Ein "string" wie du ihn aus C++ ist ein Objekt und ein char-Vector ist letztendlich nur eine Adresse von einem x-char-Elemente großen Speicherblocks und somit lassen sich Zeichenketten in form von char*'s nicht über Operatoren wie == vergleichen vergleichen (zumindest nicht im ganzen), da die Adressen nicht übereinstimmen, egal was sich hinter diesen verbirgt.

    Trotzdem kann man mit ein bisschen tricksen auch Zeichenketten mit switch vergleichen, sofern diese in einem Integer vorliegen.
    Das bedeutet, dass wir für jeden case-Block einen Integer-wert für den zugeordneten String berechnen müssen und anschließend unser Vergleichsobjekt mit dem selben Algorithmus in einen Integer umwandeln müssen.
    Hier mal ein Beispiel:
    Code:
    #include <stdio.h>
    
    
    int convert(char *str)
    {
    	int i = 0;
    	while(*str)
    	{
    		i += *str++;
    	}
    	return i;
    }
    
    int main(void)
    {
    	char str[20];
    	printf("enter a string: ");
    	scanf("%19s", &str);
    	switch(convert(str))
    	{
    		case 532: /* "hello" */
    			puts("- hi");
    			break;
    		case 552: /* "world" */
    			puts("- what?");
    			break;
    		default:
    			puts("- default");
    	}
    	return 0;
    }
    Bitte beachte, dass sich der oben verwendete Algorithmus AUF KEINEN FALL für soetwas eignet, weil sehr viele doppelte Werte vorkommen (zB. "hello", "olleh", "lloeh", ... würden alle 532 ergeben) -> der Code dient nur als Veranschaulichung des Beispiels und ist nicht Praxistauglich!!!
    Besser geeignet wären Algorithmen, von denen bekannt ist, dass diese verlässliche Werte erzeugen. Solche Algorithmen könnten sein: MD5, SHA1, CRC, ... (im Internet findest du sicher sehr viele C/C++ Implementierungen dieser Algorithmen, oder du schreibst dir deine Eigene).

    PS:
    auch wenn das Problem schon gelöst wurde ist der zweite Teil meines Posts vielleicht auch für andere interessant also bitte stehenlassen


    mfG. BlackBerry

    PDFTT cr3w a.E. — ReiDC0Re, lindor, Sera, berry
    please do feed the trolls crew and elk
    Ehrenwerte Mitglieder im Ruhestand: OpCodez, SFX.
    "Was sich blackberry gerade denkt" — Vorsicht! Frei laufender Wahnsinn!
    Zitat von fuckinghot19: "PS: Blackberry ist auf FH der Trollkönig ^^."
    An dieser Stelle danke ich all meinen Fans und Hatern gleichermaßen ^.^

  6. #6
    Trojaner
    Registriert seit
    11.11.2008
    Beiträge
    99

    Standard

    Code:
    #include <iostream>
    #include <windows.h>
    #include <string>
    #include <conio.h>
     using namespace std;
     
     int main(){
        char wb,bereit,bereit2;
        int zahl,HQ;
              
         cout<<"Hallo Stefan\nHast du heute gut geschlafen?[j/n]" <<endl;
         cin>>wb;
         
         switch (wb) 
          {
               case 'j':
                    case'J':   
                            {                     
                               system("cls");
                    cout<<"Gut dann konnen wir beginnen" <<endl;
                    getch();
                    }
                    break; 
               case 'n':
                    case'N':
                            {
                                 system ("cls");
                    cout<<"Oh naja dises Quiz uber \"Die Staemme\" wird dich schon aufmuntern"<<endl;
                    getch();
                    }
                    break;     
                    
                default:
                        {
                               system("cls");
                        cout<<"Bitte antworte richitg auf die Frage,Stefan"<<endl;
                        getch();
                        cout<<"FEHLER IM PROGRAMM!!!Das Programm beendet sich von alleine!!!"<<endl;
                        getch();
                        cout<<"..."<<endl;
                        getch();
                      return 0;
                      }
                       } //bis hier hin funktioniert alles ------------------------
         system("cls");
         cout<<"[fragen werden geladen.....]"<<endl;
         Sleep(5000);              
         cout<<"..."<<endl;
         Sleep (5000);    
         cout<<"..."<<endl;
         Sleep (5000); 
         system("cls"); 
         cout<<"Biste du wirklich bereit?[j/n]"<<endl; //ab hier beginnt switch (bereit)
         cin>>bereit;
         
         switch (bereit)
         {
                case 'j':
                     case 'J': //JA-FAKTOR-BLOCK funktioniert auch
                          {
                               system("cls");
                          cout<<"Dann kommt hier die erste Frage:"<<endl;
                          getch();
                          system ("cls");
                          }
                          break; //ab hier beginnt der NEIN-FAKTOR-BLOCK
                case 'n': 
                     case 'N':
                           {
                                 system("cls");
                                 cout<<"Dann gib die Zeit an die du brauchst,bis du bereit bist:(in Sek.)"<<endl;
                                 cin>>zahl;
                                 system("cls");
                                 cout<<"Ok.Dann warte ich jetzt so lange auf dich....."<<endl;
                                 Sleep (zahl*1000);   //PROBLEM:Wenn man davor eine zahl eingibt dann schläft das system ewig
                                 system("cls");
                                 cout<<"Ok.Bist du jetzt bereit?[j/n]"<<endl;  
                                 cin>>bereit2;
                                 
                                 switch (bereit2)
                                 {
                                        case 'j':
                                             case'J':
                                        {
                                             system("cls");
                                             cout<<"Gut dann kommt hier die erste Frage"<<endl;
                                             getch();
                                             system("cls");
                                             }
                                             break;
                                             case 'n':
                                                  case 'N':
                                        { 
                                                  system("cls");
                                                  cout<<"Ok.Dann hab ich auch keine lust mehr."<<endl;
                                                  getch();
                                                  cout<<"\nAktivier mich wenn du der Meinung bist das du jetzt kannst....."<<endl;
                                                  getch();
                                                  return 0;
                                                  }
                                        }
                                 } //NEIN-FAKTOR-BLOCK wird geschlossen
                                        
                                                    
                      } //switch (bereit) wird geschlossen
                      
                cout<<"Wie weit kann man das Hauptgebaude ausbauen?(Zahl eingeben)"<<endl;
                cin>>HQ;      
                
                                  
     }
    Da wo Problem steht ist das Problem:

    Denn wenn man da zufälligerweiße eine Zahl eingibt dann schläft das system ewig.
    das will ich beseitigt haben.

    ich hab mir überlegt dass man evtl. mit dem befehl if oder mit switchcase weiterarbeiten könnte.
    dass man kurz davor noch was ranhängt.
    VORSCHLAG:
    Code:
    #include <iostream>
    #include <windows.h>
    #include <string>
    #include <conio.h>
     using namespace std;
     
     int main(){
        char wb,bereit,bereit2;
        int zahl,HQ;
              
         cout<<"Hallo Stefan\nHast du heute gut geschlafen?[j/n]" <<endl;
         cin>>wb;
         
         switch (wb) 
          {
               case 'j':
                    case'J':   
                            {                     
                               system("cls");
                    cout<<"Gut dann konnen wir beginnen" <<endl;
                    getch();
                    }
                    break; 
               case 'n':
                    case'N':
                            {
                                 system ("cls");
                    cout<<"Oh naja dises Quiz uber \"Die Staemme\" wird dich schon aufmuntern"<<endl;
                    getch();
                    }
                    break;     
                    
                default:
                        {
                               system("cls");
                        cout<<"Bitte antworte richitg auf die Frage,Stefan"<<endl;
                        getch();
                        cout<<"FEHLER IM PROGRAMM!!!Das Programm beendet sich von alleine!!!"<<endl;
                        getch();
                        cout<<"..."<<endl;
                        getch();
                      return 0;
                      }
                       } //bis hier hin funktioniert alles ------------------------
         system("cls");
         cout<<"[fragen werden geladen.....]"<<endl;
         Sleep(5000);              
         cout<<"..."<<endl;
         Sleep (5000);    
         cout<<"..."<<endl;
         Sleep (5000); 
         system("cls"); 
         cout<<"Biste du wirklich bereit?[j/n]"<<endl; //ab hier beginnt switch (bereit)
         cin>>bereit;
         
         switch (bereit)
         {
                case 'j':
                     case 'J': //JA-FAKTOR-BLOCK funktioniert auch
                          {
                               system("cls");
                          cout<<"Dann kommt hier die erste Frage:"<<endl;
                          getch();
                          system ("cls");
                          }
                          break; //ab hier beginnt der NEIN-FAKTOR-BLOCK
                case 'n': 
                     case 'N':
                           {
                                 system("cls");
                                 cout<<"Dann gib die Zeit an die du brauchst,bis du bereit bist:(in Sek.)"<<endl;
                                 cin>>zahl;
                                 
                                  if (zahl==int)
                                 {
                                 system("cls");
                                 cout<<"Ok.Dann warte ich jetzt so lange auf dich....."<<endl;
                                 Sleep (zahl*1000);  //PROBLEM:Wenn man davor eine zahl eingibt dann schläft das system ewig
                                 }
                                 else if(zahl==char)
                                 {
                                      system("cls");
                                      cout<<"Tut mir leid aber anscheinend kannst du noch nicht einmal Zahl von Buchstabe unterscheiden"<<endl;
                                      getch()
                                      cout<<"ERROR"<<endl;
                                      return 0;
                                      }
                                 system("cls");
                                 cout<<"Ok.Bist du jetzt bereit?[j/n]"<<endl;  
                                 cin>>bereit2;
                                 
                                 switch (bereit2)
                                 {
                                        case 'j':
                                             case'J':
                                        {
                                             system("cls");
                                             cout<<"Gut dann kommt hier die erste Frage"<<endl;
                                             getch();
                                             system("cls");
                                             }
                                             break;
                                             case 'n':
                                                  case 'N':
                                        { 
                                                  system("cls");
                                                  cout<<"Ok.Dann hab ich auch keine lust mehr."<<endl;
                                                  getch();
                                                  cout<<"\nAktivier mich wenn du der Meinung bist das du jetzt kannst....."<<endl;
                                                  getch();
                                                  return 0;
                                                  }
                                        }
                                 } //NEIN-FAKTOR-BLOCK wird geschlossen
                                        
                                                    
                      } //switch (bereit) wird geschlossen
                      
                cout<<"Wie weit kann man das Hauptgebaude ausbauen?(Zahl eingeben)"<<endl;
                cin>>HQ;      
                
                                  
     }
    So in der Art hätte ich mir das gedacht.

  7. #7
    EinHaarPinsel Avatar von .wired
    Registriert seit
    05.10.2008
    Beiträge
    316

    Standard

    Code:
    system("cls");
    benutz lieber:
    Code:
    clrscr()
    das nur am Rande
    gez.wired


  8. #8
    Trojaner
    Registriert seit
    11.11.2008
    Beiträge
    99

    Standard

    hm welche hadder datei brauche ich dann?

  9. #9
    Der mit Anatidaephobie Avatar von blackberry
    Registriert seit
    11.07.2008
    Beiträge
    2.350

    Standard

    conio aber die hast du bereits

    Ich hab mir den Code mal angeschaut und ETWAS entwirrt (sieht immernoch schrecklich unübersichtlich aus).
    Code:
    #include <iostream>
    #include <string>
    #ifdef _WIN32
    	#include <windows.h>
    	#include <conio.h>
    #else
    	/* damit das ganze auf auf Linux compiliert...
    	   nicht der beste Weg, aber es funktioniert */
    	#define getch() getc(stdin)
    	#define Sleep(x)
    	/* SEHR unschön, aber das ewige "sh: cls: not found" nervt */
    	#define system(x)
    #endif
    
    
    using namespace std;
    
    int main(void)
    {
    	char wb, bereit, bereit2;
    	int zahl, HQ;
    	cout << "Hallo Stefan\nHast du heute gut geschlafen?[j/n]" << endl;
    	cin >> wb;
    	switch (wb)
    	{
    		case 'j': case'J':
    			system("cls");
    			cout << "Gut dann konnen wir beginnen" << endl;
    			getch();
    			break;
    		case 'n': case'N':
    			system ("cls");
    			cout << "Oh naja dises Quiz uber \"Die Staemme\" wird dich schon aufmuntern" << endl;
    			getch();
    			break;
    		default:
    			system("cls");
    			cout << "Bitte antworte richitg auf die Frage, Stefan" << endl;
    			getch();
    			cout << "FEHLER IM PROGRAMM!!!Das Programm beendet sich von alleine!!!" << endl;
    			getch();
    			cout << "..." << endl;
    			getch();
    			return 0;
    	} // bis hier hin funktioniert alles ------------------------
    	system("cls");
    	cout << "[fragen werden geladen.....]" << endl;
    	Sleep(5000); 
    	cout << "..." << endl;
    	Sleep (5000);
    	cout << "..." << endl;
    	Sleep (5000);
    	system("cls");
    	cout << "Biste du wirklich bereit?[j/n]" << endl; // ab hier beginnt switch (bereit)
    	cin >> bereit;
    	switch (bereit)
    	{
    		case 'j': case 'J': // JA-FAKTOR-BLOCK funktioniert auch
    			system("cls");
    			cout << "Dann kommt hier die erste Frage:" << endl;
    			getch();
    			system ("cls");
    			break; // ab hier beginnt der NEIN-FAKTOR-BLOCK
    		case 'n': case 'N':
    			system("cls");
    			cout << "Dann gib die Zeit an die du brauchst, bis du bereit bist:(in Sek.)" << endl;
    			cin >> zahl;
    			/*
    			if (zahl == int) <----- was soll das sein? Das ergibt keinen Sinn!
    			{
    				system("cls");
    				cout << "Ok.Dann warte ich jetzt so lange auf dich....." << endl;
    				Sleep (zahl*1000);// PROBLEM:Wenn man davor eine zahl eingibt dann schläft das system ewig
    			}
    			else if(zahl == char) <----- was soll das sein? Das ergibt keinen Sinn!
    			{
    				system("cls");
    				cout << "Tut mir leid aber anscheinend kannst du noch nicht einmal Zahl von Buchstabe unterscheiden" << endl;
    				getch();
    				cout << "ERROR" << endl;
    				return 0;
    			}
    			*/
    			// -------------------------------------
    			system("cls");
    			cout << "Ok.Dann warte ich jetzt so lange auf dich....." << endl;
    			Sleep (zahl*1000); // PROBLEM:Wenn man davor eine zahl eingibt dann schläft das system ewig
    			// -------------------------------------
    			system("cls");
    			cout << "Ok.Bist du jetzt bereit?[j/n]" << endl; 
    			cin >> bereit2;
    			switch (bereit2)
    			{
    				case 'j': case'J':
    					system("cls");
    					cout << "Gut dann kommt hier die erste Frage" << endl;
    					getch();
    					system("cls");
    					break;
    				case 'n': case 'N':
    					system("cls");
    					cout << "Ok.Dann hab ich auch keine lust mehr." << endl;
    					getch();
    					cout << "\nAktivier mich wenn du der Meinung bist das du jetzt kannst....." << endl;
    					getch();
    				default:
    					return 0;
    			}
    			break;
    		default:
    			return 0;
    	} // switch (bereit) wird geschlossen
    	cout << "Wie weit kann man das Hauptgebaude ausbauen?(Zahl eingeben)" << endl;
    	cin >> HQ;
    }
    Bei deinen Problemen mit "dann schläft das System ewig" würde ich einfach mal die Zahl eingeben und dann nochmal ausgeben und sicherstellen, dass die Zahl richtig ist!

    PDFTT cr3w a.E. — ReiDC0Re, lindor, Sera, berry
    please do feed the trolls crew and elk
    Ehrenwerte Mitglieder im Ruhestand: OpCodez, SFX.
    "Was sich blackberry gerade denkt" — Vorsicht! Frei laufender Wahnsinn!
    Zitat von fuckinghot19: "PS: Blackberry ist auf FH der Trollkönig ^^."
    An dieser Stelle danke ich all meinen Fans und Hatern gleichermaßen ^.^

  10. #10
    Trojaner
    Registriert seit
    11.11.2008
    Beiträge
    99

    Standard

    zum thema if:

    das soll bedeuten:
    wenn die zahl gleich ein integer ist also eine zahl.
    dann passiert das und das.
    denn das problem ist imma dass wenn man kurz vor sleep einen buchstaben eingibt,dass der dann ewig schläft.

Seite 1 von 2 12 LetzteLetzte

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •