Variablen


  • Mod

    Skym0sh0 schrieb:

    Google mal nach Array.

    Nee, da müsste man ja schon vorher (beim Programmieren) wissen, wie viele Wörter kommen, das ist doof. vector<string>

    #include <vector>
    #include <string>
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
      cout << "Gib Wörter ein!";
      vector<string> words;
      for (string word; cin >> word; words.push_back(word));
    
      cout << "Das waren " << words.size() << " Wörter: ";
      for (size_t i = 0; i < words.size(); ++i)
       cout << words[i] << "; ";
    }
    

    Insgesamt habe ich aber eher das Gefühl, der Threadersteller will unglaublich umständlich einen Satz einlesen:

    #include <string>
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
      cout << "Gib einen Satz ein! Abschluss mit Zeilenumbruch.";
      string line;
      getline(cin, line);
      cout << "Du hast folgendes eingegeben: " << line << '\n';
    }
    


  • SeppJ schrieb:

    Skym0sh0 schrieb:

    Google mal nach Array.

    Nee, da müsste man ja schon vorher (beim Programmieren) wissen, wie viele Wörter kommen, das ist doof. vector<string>

    #include <vector>
    #include <string>
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
      cout << "Gib Wörter ein!";
      vector<string> words;
      for (string word; cin >> word; words.push_back(word));
    
      cout << "Das waren " << words.size() << " Wörter: ";
      for (size_t i = 0; i < words.size(); ++i)
       cout << words[i] << "; ";
    }
    

    Insgesamt habe ich aber eher das Gefühl, der Threadersteller will unglaublich umständlich einen Satz einlesen:

    #include <string>
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
      cout << "Gib einen Satz ein! Abschluss mit Zeilenumbruch.";
      string line;
      getline(cin, line);
      cout << "Du hast folgendes eingegeben: " << line << '\n';
    }
    

    Also, dein letzter Code, das kann ich natürlich ! Mein Problem ist nur, wenn ich bei meinem Programm anstatt char einfach string nehme, funktioniert es nicht mehr, folgendes kommt raus:

    Fehler 1 error C2679: Binärer Operator '>>': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operanden vom Typ 'std::string' akzeptiert (oder keine geeignete Konvertierung möglich)



  • -.- Ich benutzte die Worte Array und Vector mittlerweile synonym. Problem: Ich weis das, andere nicht unbedingt 😣


  • Mod

    Unbowed. schrieb:

    Also, dein letzter Code, das kann ich natürlich ! Mein Problem ist nur, wenn ich bei meinem Programm anstatt char einfach string nehme, funktioniert es nicht mehr, folgendes kommt raus:

    Fehler 1 error C2679: Binärer Operator '>>': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operanden vom Typ 'std::string' akzeptiert (oder keine geeignete Konvertierung möglich)

    #include <string> vergessen.

    Skym0sh0 schrieb:

    -.- Ich benutzte die Worte Array und Vector mittlerweile synonym. Problem: Ich weis das, andere nicht unbedingt 😣

    Ich auch und ich habe das auch so von dir verstanden. Aber bei dem Tipp, nach dem Stichwort zu googeln, kommt bei "Array" sicherlich kein "Vector" raus.



  • Da hast du Recht.

    -> Erster Treffer



  • SeppJ schrieb:

    Unbowed. schrieb:

    Also, dein letzter Code, das kann ich natürlich ! Mein Problem ist nur, wenn ich bei meinem Programm anstatt char einfach string nehme, funktioniert es nicht mehr, folgendes kommt raus:

    Fehler 1 error C2679: Binärer Operator '>>': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operanden vom Typ 'std::string' akzeptiert (oder keine geeignete Konvertierung möglich)

    #include <string> vergessen.

    Geht immer noch nicht ganz ? Er öffnet zwar das Programm, aber sobald ich 2 Worte schreibe schließt er mit einer Fehlermeldung in einem Extra-Fenster.. Ich schicke mal den Code 🙂

    #include <iostream> 
    #include <string>
    using namespace std;
    
    int Auswahl;
    int main()
    { 
    	cout << "<1>Code verschlüsseln oder <2>Code entschlüsseln ? " << endl;
    
    	cout << endl;
    	cout << endl;
    	cout << "1 / 2 " << endl;
    
    	cout << endl;
    	cout << endl;
    
    	cout << "DEINE WAHL: "; cin >> Auswahl;
    
    	cout << endl;
    	cout << endl;
    
    	if(Auswahl!=1 && Auswahl!=2)
    	{
    		cout << "KEINE GÜLTIGE EINGABE !"  << endl;
    		cin.get();
    		cin.get();
    	}
    
    	else if(Auswahl==1)
    	{
    		char klar[100] = {0};    // <----------   alle 100 auf null setzen 
    		char geheim[100] = {0};  // <----------   ebenso  
        int i; 
    	int eingabe;
        cout << "Bitte geben sie das Wort ein: "; cin >> klar; 
    	int VZ;
    	cout << "Gib die Verschlüssel-Zahl ein ! (1-4) : "; cin >> VZ;
    	if(VZ!=1 && VZ!=2 && VZ!=3 && VZ!=4)
    	{
    		cout << "ERROR KEINE GÜLTIGE VZ ! NUR 1-4 !!! " << endl;
    		cin.get();
    		cin.get();
    		return 0;
    	}
    
        for(i=0; klar[i]; i++) 
        { 
            geheim[i]=((klar[i]+VZ));
    
        } 
    
        cout << "\n\n" << geheim << endl;
    
    	cin.get();
    	cin.get();
    	}
    
    	else if(Auswahl==2)
    	{
    		char klar[100] = {0};    // <----------   alle 100 auf null setzen 
    		char geheim[100] = {0};  // <----------   ebenso   
        int i; 
    		cout << "Gib deinen Geheimcode ein: "; cin >> geheim;
    		int EZ;
    		cout << "Gib die Entschlüsselungs-Zahl ein ! (1-4) : "; cin >> EZ;
    		if(EZ!=1 && EZ!=2 && EZ!=3 && EZ!=4)
    		{
    			cout << "ERROR KEINE GÜLTIGE EZ ! NUR 1-4 !!" << endl;
    			cin.get();
    			cin.get();
    			return 0;
    		}
    		for(i=0; geheim[i]; i++)
    		{
    			klar[i]=((geheim[i]-EZ));
    		}
    
    		cout << "\n\n" << klar << endl;
    
    		cin.get();
    		cin.get();
    }
    
    }
    

    Ich habe den Code wieder auf char umgestellt, nicht wundern 😛

    Ich bin noch ein Anfänger im Programmieren..


  • Mod

    Du liest ja auch nur einzelne Wörter. Was passiert denn mit dem zweiten Wort? Das landet im cin >> EZ bzw. cin >> VZ , was dann natürlich grandios scheitert. Du willst wohl doch eher so etwas wie oben von mir gezeigt, wahrscheinlich das mit dem getline.
    Allgemeine Kommentare:

    #include <iostream>
    #include <string>
    using namespace std;
    
    // int Auswahl; Globale Variablen: Schrott. Sofort abgewöhnen!
    int main()
    {
      cout << "<1>Code verschlüsseln oder <2>Code entschlüsseln ?\n"   // Zeilenumbruch statt endl
           << "\n\n1 / 2 \n"
           << "DEINE WAHL: "; 
    
      int auswahl;    // Übliche Konvention: Variablen klein schreiben
      cin >> auswahl;
    
      cout << "\n\n";
    
      if(auswahl!=1 && auswahl!=2)
        {
          cout << "KEINE GÜLTIGE EINGABE !\n";
          //        cin.get();
          //        cin.get();
          // Ein KONSOLENprogramm von der Konsole starten
        }
    
      else if(auswahl==1)
        {
          // char klar[100] = {0};  
          //  char geheim[100] = {0};
          // string statt char
          string klar, geheim;
          //  int i;      // Variablen so lokal wie möglich definieren. Hier ist viel zu früh
          //  int eingabe;
          cout << "Bitte geben sie das Wort ein: "; cin >> klar;
          int VZ;
          cout << "Gib die Verschlüssel-Zahl ein ! (1-4) : "; cin >> VZ;
          if(VZ!=1 && VZ!=2 && VZ!=3 && VZ!=4)
            {
              cout << "ERROR KEINE GÜLTIGE VZ ! NUR 1-4 !!!\n";  // Multiple exclamation marks are a sure sign of a diseased mind
              return 1;  // 0 zeigt gewöhnlicherweise Erfolg an
            }
    
          for(size_t i=0; i < klar.size(); ++i)  // Passenderer Datentyp für i, passendere Schleifenbedingung, Präinkrement statt Postinkrement
            {
              geheim.push_back((klar[i]+VZ));          
            }
    
          cout << "\n\n" << geheim << '\n';
        }
    
      else if(auswahl==2)
        {
          // Der Fall 2 sieht aus wie Copy&Paste von Fall 1. "Copy&Paste" heißt beim Programmieren  so viel wie "hier wäre eine Funktion besser".
          string klar, geheim;
          cout << "Gib deinen Geheimcode ein: "; cin >> geheim;
          int EZ;
          cout << "Gib die Entschlüsselungs-Zahl ein ! (1-4) : "; cin >> EZ;
          if(EZ!=1 && EZ!=2 && EZ!=3 && EZ!=4)
            {
              cout << "ERROR KEINE GÜLTIGE EZ ! NUR 1-4 !!\n";
              return 1;
            }
          for(size_t i=0; i < geheim.size(); ++i)  // Das ganze Zwischenspeichern, auch oben, könnte man sich auch sparen und stattdessen gleich das Ergebnis ausgeben
            {
              klar.push_back((geheim[i]-EZ));
            }
    
          cout << "\n\n" << klar << '\n';
        } 
    }
    


  • SeppJ schrieb:

    Du liest ja auch nur einzelne Wörter. Was passiert denn mit dem zweiten Wort? Das landet im cin >> EZ bzw. cin >> VZ , was dann natürlich grandios scheitert. Du willst wohl doch eher so etwas wie oben von mir gezeigt, wahrscheinlich das mit dem getline.
    Allgemeine Kommentare:

    #include <iostream>
    #include <string>
    using namespace std;
     
    // int Auswahl; Globale Variablen: Schrott. Sofort abgewöhnen!
    int main()
    {
      cout << "<1>Code verschlüsseln oder <2>Code entschlüsseln ?\n"   // Zeilenumbruch statt endl
           << "\n\n1 / 2 \n"
           << "DEINE WAHL: "; 
    
      int auswahl;    // Übliche Konvention: Variablen klein schreiben
      cin >> auswahl;
     
      cout << "\n\n";
      
      if(auswahl!=1 && auswahl!=2)
        {
          cout << "KEINE GÜLTIGE EINGABE !\n";
          //        cin.get();
          //        cin.get();
          // Ein KONSOLENprogramm von der Konsole starten
        }
     
      else if(auswahl==1)
        {
          // char klar[100] = {0};  
          //  char geheim[100] = {0};
          // string statt char
          string klar, geheim;
          //  int i;      // Variablen so lokal wie möglich definieren. Hier ist viel zu früh
          //  int eingabe;
          cout << "Bitte geben sie das Wort ein: "; cin >> klar;
          int VZ;
          cout << "Gib die Verschlüssel-Zahl ein ! (1-4) : "; cin >> VZ;
          if(VZ!=1 && VZ!=2 && VZ!=3 && VZ!=4)
            {
              cout << "ERROR KEINE GÜLTIGE VZ ! NUR 1-4 !!!\n";  // Multiple exclamation marks are a sure sign of a diseased mind
              return 1;  // 0 zeigt gewöhnlicherweise Erfolg an
            }
     
          for(size_t i=0; i < klar.size(); ++i)  // Passenderer Datentyp für i, passendere Schleifenbedingung, Präinkrement statt Postinkrement
            {
              geheim.push_back((klar[i]+VZ));          
            }
     
          cout << "\n\n" << geheim << '\n';
        }
     
      else if(auswahl==2)
        {
          // Der Fall 2 sieht aus wie Copy&Paste von Fall 1. "Copy&Paste" heißt beim Programmieren  so viel wie "hier wäre eine Funktion besser".
          string klar, geheim;
          cout << "Gib deinen Geheimcode ein: "; cin >> geheim;
          int EZ;
          cout << "Gib die Entschlüsselungs-Zahl ein ! (1-4) : "; cin >> EZ;
          if(EZ!=1 && EZ!=2 && EZ!=3 && EZ!=4)
            {
              cout << "ERROR KEINE GÜLTIGE EZ ! NUR 1-4 !!\n";
              return 1;
            }
          for(size_t i=0; i < geheim.size(); ++i)  // Das ganze Zwischenspeichern, auch oben, könnte man sich auch sparen und stattdessen gleich das Ergebnis ausgeben
            {
              klar.push_back((geheim[i]-EZ));
            }
          
          cout << "\n\n" << klar << '\n';
        } 
    }
    

    Danke schonmal für die Korrektur ! Werde mich bessern..
    Bei deinem Code kommt es aber auf das gleiche raus, wenn ich mehr als ein Wort schreibe, schließt das Programm.


  • Mod

    Den genannten Fehler habe ich auch nicht korrigiert.



  • SeppJ schrieb:

    Den genannten Fehler habe ich auch nicht korrigiert.

    Oh achso, dann mach ich das haha.


Anmelden zum Antworten