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
    41525003616

    Wie 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!!!


Anmelden zum Antworten