Hilfe bei Fehler im Program suchen
-
Hi
Ich hab ein Program geschrieben, dass die Werte eines Chars in einen Int Array speichert und dann jeweils 3 dieser Ascii zeichen zusammenfügt. Hier der Quelltext:#include <stdio.h> #include <iostream> #include <windows.h> using namespace std; int main() { cout << "Text : (80) \n"; char Nachricht [78]; cin >> Nachricht; int nStrLen = strlen(Nachricht); //nStrLen=nStrLen-1; int out [nStrLen]; for (int i=0;i<nStrLen;i++){ out[i]=Nachricht[i]; cout <<" "<< i<<" "<<out[i] << nStrLen; } cout << --------------<< endl; int c=0; int var[26]; int i=0; for(c; c < nStrLen;c++ ) { var[c] = 1000000000+(out[i] * 1000000 + out[i+1] * 1000 + out[i+2]); var [c]=var[c]-1000000000; cout<<c<< var[c]<< "\n"; i += 3; } system ("pause"); return 0; }So jetzt hab ich folgendes Problem. Wenn ich Hallo schreibe gib er mir folgendes aus:
-----------------------
0104097108
1-2098046079
2-133513888
3122090984
41525003616Wie kann ich verhindern, dass da am Ende so eine komische Zahlen, wie -2098046079 rauskommt?

-
Zeile 14: In ISO C++ müssen Felder eine fest vorgegebene Größe haben, wenn Du das dynamisch haben willst, musst Du das mit new allokieren und mit delete [] wieder freigeben
Zeile 19: da fehlen die doppelten Anführungszeichen vor und hinter der Zeichenkette
-
Hi,
vorab: Ich finde, es sollte verbten werden Variablen "var" zu nennen.

Aber zum Handling von strings mal ein paar Alternativvorschläge zum Lernen:
(Variante 1: am dichtesten an Deiner Variante)
#include <iostream> #include <string> #include <vector> using namespace std; int main() { cout << "Text :\n"; string Nachricht; // string ist in vielerlei Hinsicht "besser" (einfacher, sicherer, ...) cin >> Nachricht; vector<int> out(Nachricht.length()); // reserviert soviele ints wie Zeichen in Nachricht for (unsigned int i=0;i<Nachricht.length();i++){ out[i] = static_cast<int>(Nachricht[i]); cout <<" "<< i<<" "<<out[i] << Nachricht.lenght(); } ....(Variante 2: "Dynamik" von vector nutzen)
#include <iostream> #include <string> #include <vector> using namespace std; int main() { cout << "Text :\n"; string Nachricht; cin >> Nachricht; vector<int> out; // erstmal keine Länge for (unsigned int i=0;i<Nachricht.length();i++){ out.push_back(static_cast<int>(Nachricht[i])); // erweitert selbstätig out cout <<" "<< i<<" "<<out[i] << Nachricht.lenght(); } ....Ich weiß nicht, ob Du es schon weißt, aber man kann mit streams (wie z.B. cin) auch direkt Zahlen einlesen...
Man kann dann noch mit std::copy() was fummeln, aber das wäre evtl. ein wenig zu weit.Gruß,
Simon2.
-
Danke für die Hilfe es funktioniert jetzt.

Mein Quelltext sieht jetzt so aus:#include <iostream> #include <string> #include <vector> using namespace std; int main() { cout << "Text :\n"; string Nachricht; // string ist in vielerlei Hinsicht "besser" (einfacher, sicherer, ...) cin >> Nachricht; vector<int> out(Nachricht.length()); // reserviert soviele ints wie Zeichen in Nachricht for (unsigned int i=0;i<Nachricht.length();i+=3){ out[i] = 1000000000+(static_cast<int>(Nachricht[i])* 1000000 + static_cast<int>(Nachricht[i+1]) * 1000 + static_cast<int>(Nachricht[i+2])); out[i]=out[i]-1000000000; cout <<" "<< i <<" "<<out[i]<< "\n" ; } cout << "\n" << out[1] << out[2]; cout << "\n Hallo"; int a; cin >> a; return 0; }
-
1. Wozu addierst Du die 1000000000, wenn Du sie anschliessend wieder abziehst??
2. Wenn der eingegebene Text nicht eine ohne Rest durch 3 teilbare Länge hat, wird kräftig daneben gegriffen!!!