C++ Leerzeichen und Buchstaben in Datei schreiben



  • Könnte mir das mit dem write.'dateistream'();
    Mal vorzeigen da mein Compiler immer eine Fehlermeldung ausgibt!
    Ansonsten vielen Dank für die schnelle hilfe!



  • versuchs mal mit datei.put(char);



  • Bitte vor zeigen!
    Kopiert einfach den Source und ändert ihn da mein Compiler immer nur Fehlermeldungen ausgibt!
    Außerdem kenne ich die Parameter ja nicht!

    mfg Jakob Buchgraber



  • Put setzt doch nur ein Zeichen,oder nicht?

    ofstream txt("test.txt",ios::out);
    
    char name[1025];
    cin>>name;
    txt.write(name,1024);
    txt.close;
    

    Ich hoffe das hilft.



  • also ich hätte es so gemacht:

    struct ...{
    .
    char tmp[256];
    .
    };
    
    ....
    
    editor write_in() 
        { 
        ofstream dateiname; 
        editor lesen; 
    
        cout << endl; 
        cout << "Geben Sie den Pfad an in dem Sie die Datei amlegen wollen: "; 
        cin >> lesen.x; 
        cout << endl; 
    
        dateiname.open(lesen.x.c_str(), ios_base::out); 
    
        if(!dateiname) 
            { 
            cout << "Datei kann nicht angelegt werden," << endl; 
            cout <<  "bzw. der Pfad >> " << lesen.x << " << existiert nicht!" << endl;
            return 1; 
            } 
    
        cout << "Text eingeben: "; 
        cin.getline(lesen.tmp, 256);
    
        for(int i = 0; i < sizeof(lesen.tmp); i++)
           dateiname.put(lesen.tmp[i]); 
    
    return lesen; 
    }
    

    Du siehst es liegt nicht am schreiben sondern am lesen mit cin. cin deutet jedes leerzeichen als ende der eingabe, der rest bleibt im puffer.



  • Hallo erst mal. ich bin auch ein ganz lausiger anfänger. 🙄
    wie müsste dann das ganze richtig aussehen?

    mfg. smista



  • öhm ... steht doch einen Beitrag weiter oben 🙄



  • nein ich meine von anfang an. das ist ja nur ein teil.

    mfg. smista



  • najut habs nochmal so geschrieben wie ichs gemacht hätte:

    #include <iostream> 
    #include <fstream>
    #include <conio.h>
    
    using namespace std; 
    
    struct editor 
    { 
     char x[256]; 
     char tmp[256]; 
     char y; 
    };
    
    short read_in() 
    { 
     ifstream dat_ein; 
     editor einlesen; 
     int i;
    
     cout << endl; 
     cout << "Geben Sie den Namen\\Pfad zur Datei ein: "; 
     cin >> einlesen.x; 
     cout << endl; 
    
     dat_ein.open(einlesen.x, ios::in | ios::binary); 
    
     if(!dat_ein) 
     { 
      cout << "Datei konnte nicht geöffnet werden: " << endl; 
      cout << endl; 
      return 1;
     } 
    
     dat_ein.get(einlesen.y);
    
     while(!dat_ein.eof())
     { 
      cout << einlesen.y; 
      dat_ein.get(einlesen.y);
     } 
     dat_ein.close(); 
     return 0; 
    }
    
    short write_in() 
    { 
     ofstream datei_aus; 
     editor lesen; 
     int pos = 0;
     char c;
    
     cout << endl; 
     cout << "Geben Sie den Pfad an in dem Sie die Datei anlegen wollen: "; 
     cin >> lesen.x; 
     cout << endl; 
    
     datei_aus.open(lesen.x, ios::out | ios::binary ); 
    
     if(!datei_aus) 
     { 
      cout << "Datei kann nicht angelegt werden," << endl; 
      cout << "bzw. der Pfad >> " << lesen.x << " << existiert nicht!" << endl; 
      return 1;
     } 
    
     cout << "Text eingeben: ";
    
     c=getche(); //der "Nachteil" von getche() ist das auch Backspaces etc eingelesen werden
     while(c!=13)
     {
      if (c > 31) lesen.tmp[pos++]=c; // deswegen diese if Bedingung
      else if ( c == 8) pos-=1; // wenn Backspace muß die voherige Position überschrieben werden
      c=getche();  
     } 
     lesen.tmp[pos]='\0';
     pos=0; 
    
     cout << "\n\n Text wird in Datei geschrieben!\n\n\n";
    
     for(int i = 0; i < strlen(lesen.tmp); i++) 
           datei_aus.put(lesen.tmp[i]); 
    
     datei_aus.close();
     return 0; 
    } 
    
    int main()    
    { 
     int befehl = 1, indikator;
     cout << "\t\t\t-----------------------------------" << endl; 
     cout << "\t\t\t| Editor mit folgenden Funktionen:|" << endl; 
     cout << "\t\t\t| Copyright Anonym                 |" << endl; 
     cout << "\t\t\t-----------------------------------" << endl; 
     cout << endl; 
     while(befehl)
     {
      cout << "Datei einlesen und ausgeben\t\t<1>" << endl; 
      cout << "Datei erstellen und beschreiben\t\t<2>" << endl; 
      cout << "Datei erweitern\t\t\t\t<3>" << endl; 
      cout << "Datei ueberschreiben\t\t\t<4>" << endl; 
      cout << "Programm beenden\t\t\t<5>" << endl; 
      cout << endl; 
      cout << "Ihre Eingabe: "; 
      cin >> befehl;  
    
      switch(befehl) 
      { 
      case 1:  cout << endl; 
               cout << "Datei einlesen und ausgeben" << endl; 
               indikator = read_in(); 
               break; 
      case 2:  cout << endl; 
               cout << "Datei erstellen und beschreiben" << endl; 
               indikator = write_in(); 
               break; 
      case 3:  cout << endl; 
               cout << "Datei erweitern" << endl; 
               break; 
      case 4:  cout << endl; 
               cout << "Datei überschreiben" << endl; 
               break; 
      case 5:  cout << endl; 
               cout << "Programm beenden" << endl; 
               break; 
      default: cout << endl; 
               cout << "Ungueltige Eingabe" << endl; 
               break; 
      } 
      if(indikator == 1) cout << "\nEin Fehler ist aufgetreten!\n\n";
      cout << "Erneut einen Befehel ausführen? Wenn ja 1, ansonsten 0 eintippen:";
      cin >> befehl;
      cout << "\n\n\n";
     }
     return 0; 
    }
    

    mfg nob

    edit:
    anstatt von

    c=getche(); //der "Nachteil" von getche() ist das auch Backspaces etc eingelesen werden
     while(c!=13)
     {
      if (c > 31) lesen.tmp[pos++]=c; // deswegen diese if Bedingung
      else if ( c == 8) pos-=1; // wenn Backspace muß die voherige Position überschrieben werden
      c=getche();  
     } 
     lesen.tmp[pos]='\0';
     pos=0;
    

    kann man auch

    cin.seekg(0,std::ios::end);
     cin.clear();
     cin.getline(lesen.tmp, 256);
     cin.seekg(0,std::ios::end);
     cin.clear();
    

    schreiben was wahrscheinlich Laufzeit und Speicher einspart



  • D A N K E ! !
    Jetzt funktioniert es.
    mfg jakob buchgraber


Anmelden zum Antworten