Variablen
-
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

-
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.
-
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..
-
Du liest ja auch nur einzelne Wörter. Was passiert denn mit dem zweiten Wort? Das landet im
cin >> EZbzw.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 >> EZbzw.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.
-
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.