Hallo Komme einfach nicht weiter C++ code problem
-
Hallo
ich versuche ein kleines anfänger tool zu schreiben aber hänge dort einfach fest.Das toll soll eine TXT lesen diese dann um 10 buchstaben verschieben und in eine neue txt speichern.
Also im ersten Versuch es über eine eingabe zu machen geht es so la la denn die TXT wird nicht voll gelesen!!#include <iostream> #include <stdio.h> #include <cstdio> using namespace std; int main() { FILE *stream; char* inhalt = new char(250); int zeichen = 0; ///////////// lesen der datei /////////////////////////////// stream = fopen ("/home/cooper3210/Documents/ZAHLEN.txt" , "r"); if (stream == NULL) { cout << "Fehler beim Auslesen" << endl; exit(-1); } char c; do { c=fgetc (stream); cout << c; if(c!=EOF) inhalt[zeichen] = c; zeichen++; } while (c!=EOF); ///////////// ///////////// zeichen -= 1; cout << endl << endl; //fclose (stream); //hier nun inhalt verschluesseln +10 //////////////////////////////////////////////////////// int i; for(i=0; i<zeichen; i++) inhalt[i] += 10; //und in eine Datei schreiben ZAHLEN1.txt stream = fopen("/home/cooper3210/Documents/ZAHLEN1.txt", "w"); fprintf(stream,"/+++++++++ verschlüsselt +10 ++++++++++/\n\n"); fwrite (inhalt , 1 , zeichen , stream); fclose (stream); //////////////////////////////////////////////////////// //////////////////////////////////////////////////////// //hier nun inhalt verschluesseln -10 for(i=0; i<zeichen; i++) inhalt[i] -= 10; //und wieder in eine Datei schreiben ZAHLEN2.txt stream = fopen ("/home/cooper3210/Documents/ZAHLEN2.txt" , "w"); fprintf(stream,"/+++++++++ verschlüsselt -10 ++++++++++/\n\n"); fwrite (inhalt , 1 , zeichen , stream); fclose (stream); ///////////////////////////////////////////////////////// delete inhalt; getchar(); return 0; }Nun hatte ich mich etws in büchern umgeschaut und etwas zu denn Bereichen der buchstaben gefunden !
Also dachte ich mir das im ersten Versuch dort der Fehler sein könnte das er die Zeichen aus meiner txt nicht richtig lesen kann.
Also versuche ich es so !!!#include <iostream> #include <cstdlib> #include <cstdio> #include <stdio.h> using namespace std; int main() { FILE *stream; // FILE *stream=p; FILE *p=stream; div_t weiter; char* inhalt = new char(250); int zeichen = 0; int i=0,x, schluessel; ///////////// lesen der datei /////////////////////////////// stream = fopen ("/home/cooper3210/Documents/ZAHLEN.txt" , "r"); if (stream == NULL) { cout << "Fehler beim Auslesen" << endl; exit(-1); } cout << "\n stellen 0-25 : "; cin >> schluessel; /* char c; do { c=fgetc (stream); cout << c; if(c!=EOF) inhalt[zeichen] = c; zeichen++; } // while (c!=EOF); */ /////////////////////////////////////////////////////////////// while (*p) //lesen solange zeichen vorhanden.... { if (*p>=97 && *p<=122) //Bereich der kleinbuchstaben { x=p-97+schluessel; weiter=div(x,26); *p=weiter.rem+97; cout << p ; } else { if (*p>=65 && *p<=90) // Bereich der Großbuchstaben { x=*p-65+schluessel; weiter=div(x,26); *p=weiter.rem+65; cout << *p ; } else cout << *p; // alle zeichen Normal ausgeben } *p++; } /////////////////////////////////////////////////////////////////////// //zeichen -= 1; //cout << endl << endl; //fclose (stream); //hier nun inhalt verschluesseln +10 //////////////////////////////////////////////////////// int i; for(i=0; i<zeichen; i++) inhalt[i] += 10; //und in eine Datei schreiben ZAHLEN1.txt stream = fopen("/home/cooper3210/Documents/ZAHLEN1.txt", "w"); fprintf(stream,"/+++++++++ verschlüsselt +10 ++++++++++/\n\n"); fwrite (inhalt , 1 , zeichen , stream); fclose (stream); //////////////////////////////////////////////////////// //////////////////////////////////////////////////////// //hier nun inhalt verschluesseln -10 for(i=0; i<zeichen; i++) inhalt[i] -= 10; //und wieder in eine Datei schreiben ZAHLEN2.txt stream = fopen ("/home/cooper3210/Documents/ZAHLEN2.txt" , "w"); fprintf(stream,"/+++++++++ verschlüsselt -10 ++++++++++/\n\n"); fwrite (inhalt , 1 , zeichen , stream); fclose (stream); ///////////////////////////////////////////////////////// delete inhalt; getchar(); return 0; }doch leider komme ich dort nicht weiter ausser Fehlermeldungen nix, und ich finde die lösung nicht.
Ich würde mich sehr freuen wenn Ihr mir dort mal weiter helfen würdet und mir denn richtigen weg zeigt.
MFG cooper
-
1: Wenn du schon mit Streams arbeitest (cout), warum nimmst du die dann nicht für die Datenein/ausgabe?
2: Was für ein Fehler kommt denn genau?
3: "char* inhalt = new char(250);" legt einen einzelnen Charakter mit dem Wert 250 an - sehr ungesund für das, was du anschließend vorhast. Richtig müßte es heißen "char* inhalt = new char[250];" (eckige Klammern), oder du verwendest gleich string.
4: Du überprüfst nirgends, ob der reservierte Platz überhaupt für deine Eingabedaten ausreicht.
-
Also ich wenn ich jetzt die ganzen fehler aufschreibe werde ich sicher nie fertig LOL
Das Problem liegt bei while dort geht der spass los
zum beispiel convert'*p`> to bool fehler
und dort einfach weiter was hat der nur gegen mein p frage ich mich.
er zählt alle Fehler auf mit dem *p also denn Buchstaben Teil.
Nur ist mir unklar wieso
die Überprüfung ob der Speicher reicht na ja das wollte ich mir erst mal ersparen es geht hier nur um Passwort txt die ich einfach damit etwas zerstören möchte und sie dann später wieder richtig zusammensetzen lassen.
Wenn mir mal einer nebenbei erklären würde wie ich die Fehlermeldung in der Anjuta IDE in die zwischenablage bekomme poste ich auch gern die Fehler.MFG Cooper
-
*schustert mal schnell etwas zusammen*
#include <fstream> using namespace std; int main() { ifstream fin("Zahlen.txt"); ofstream fout("Zahlen2.txt"); char c; while(!(fin >> c)) { char c2 = code(c); // hier kannst du deine Verschlüsselung einsetzen fout << c; } return 0; }FILE ist ein Relikt aus der C-Zeit. Wenn du schon mit C++ arbeitest, dann am besten auch richtig.
-
Echt super
also ich frage mich echt wieso ich es mir so schwer mache wenn es doch ....
also da muss ich doch gleich testen.Das problem ist ich lese viel in büchern und versuche dann so bissel die ideen zu nutzen und einfach was anderes zu Basten.
und war ich in mein büchern soweit das ich bei FILE laden war und dachte mir so das wäre mal wieder was zum testen .
nur das es auch anders geht na ja das stand ja nicht im buch lolAlso ich danke dir und ich werde mir das echt mal anschauen.
Haste fein gemacht
Danke MFG cooper
-
#include <iostream> #include <cstdlib> #include <cstdio> //#include <stdio.h> // brauchst du nicht. gucke dir mal bitte <cstdio> an, dann weißt du auch warum using namespace std; int main() { // FILE *stream=p; //FILE *p=stream; // bringt nichts. stream zeigt auf nicht, p deshalb auch nicht //div_t weiter; //char* inhalt = new char[1024]; // warum schon hier definieren? nutze "raii" //int zeichen = 0; // raii // int i=0 ,x, schluessel; /// so ein kommentar reicht int schluessel; cout << "\n stellen 0-25 : "; cin >> schluessel; FILE *stream; // in c++ besser <fstream> nehmen stream = fopen ("/home/cooper3210/Documents/ZAHLEN.txt" , "r"); //if (stream == NULL) // keine Makros verwenden // if(stream == 0) // das geht noch kürzer if(!stream) { cerr << "Fehler beim Auslesen" << endl; exit(-1); // return reicht meiner ansicht nach } char* inhalt = new char[1024]; char c; int zeichen = 0; while((c = fgetc(stream)) != EOF) { cout << c; inhalt[zeichen++] = c; // ist gleichbedeutend mit: // inhalt[zeichen] = c; // ++zeichen; // immer den präfix operator verwenden wenn es geht } if(fclose(stream)) { cerr << "error!\n"; return -2; } /// char* p = inhalt; div_t weiter; int x; while (*p) //lesen solange zeichen vorhanden.... { if (*p>=97 && *p<=122) //Bereich der kleinbuchstaben { x=*p-97+schluessel; weiter=div(x,26); *p=weiter.rem+97; } else { if (*p>=65 && *p<=90) // Bereich der Großbuchstaben { x=*p-65+schluessel; weiter=div(x,26); *p=weiter.rem+65; } } cout << *p; // alle zeichen Normal ausgeben ++p; } /////////////////////////////////////////////////////////////////////// //zeichen -= 1; //cout << endl << endl; //fclose (stream); //hier nun inhalt verschluesseln +10 //////////////////////////////////////////////////////// //int i; for(int i = 0; i < zeichen; ++i) inhalt[i] += 10; //und in eine Datei schreiben ZAHLEN1.txt stream = fopen("/home/cooper3210/Documents/ZAHLEN1.txt", "w"); fprintf(stream,"/+++++++++ verschlüsselt +10 ++++++++++/\n\n"); fwrite (inhalt , 1 , zeichen , stream); fclose (stream); //hier nun inhalt verschluesseln -10 for(int i=0; i < zeichen; ++i) inhalt[i] -= 10; //und wieder in eine Datei schreiben ZAHLEN2.txt stream = fopen ("/home/cooper3210/Documents/ZAHLEN2.txt" , "w"); fprintf(stream,"/+++++++++ verschlüsselt -10 ++++++++++/\n\n"); fwrite (inhalt , 1 , zeichen , stream); fclose (stream); ///////////////////////////////////////////////////////// delete [] inhalt; getchar(); return 0; }compiliert fehlerfrei auf g++.
habe es aber nicht getestet.ps: anstatt "/home/cooper3210", getenv verwenden (man getenv).
-
Also da fehlen mir die worte
Super Danke an Euch für die echt gute Hilfe.
Nun habe ich wieder bissel was zum lernen und freue mich.habe mir eben mal ifstream fin angeschaut also das ist ja auch Super verstehe zwar noch nicht wieso meine abfragen beim lesen gehen und beim schreiben nicht aber das finde ich sicher noch raus.
int main() { ifstream fin("/home/cooper3210/Documents/ZAHLEN.txt"); if(fin.good()) cout << "Datei Gefunden und geladen " << endl; //wenn datei gefunden if (!fin) // Das hat nicht funktioniert { cout << "Datei existiert nicht!\n"; exit(1); } ofstream fout("/home/cooper3210/Documents/ZAHLEN1.txt"); if(fin.good()) cout << "Datei wurde erstellt " << endl; //wenn datei geschrieben if (!fin) { cout << "Error beim schreiben\n"; exit(1); }Lustig bei lesen bringt er fehler wenn die datei nicht da doch beim schreiben sagt er immer Datei erstellt.
Da muss ich auch noch bissel lesen wieso das so ist .
Muss aber sagen ein Super Forum und echt gute hilfe.
MFG cooper
-
Dieser Thread wurde von Moderator/in kingruedi aus dem Forum Linux/Unix in das Forum C++ verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.