1Danke
ERLEDIGT
JA
JA
ANTWORTEN
8
8
ZUGRIFFE
788
788
EMPFEHLEN
-
Guten Morgen,
Ich möchte gerne einen Caesar Verschlüsselung nur mit Buchstaben schreiben.
Soweit so gut. Nun habe ich den Code schon. Allerdings soll das ganze als *.txt Datei ausgegeben werden, wo auch schon mein Problem ist.
Die Ausgabe mit cout klappt. <- d.h. der Code funktioniert!
Die Ausgaebe als *.txt klappt nicht <- Was ist da falsch ?
Quelle des OrginalcodesCode :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
#include <iostream> #include <string> using namespace std; FILE *hostdatei; string text = "Hello agian"; string CaesarCipher(string str, int gap) { char lower_last = 'z' - gap; char upper_last = 'Z' - gap; for (unsigned int i = 0; i < str.length(); i++) { if ((str[i] >= 'a' && str[i] <= lower_last) || (str[i] >= 'A' && str[i] <= upper_last)) str[i] += gap; else if (str[i] >= lower_last && str[i] <= 'z') str[i] = 'a' + str[i]-lower_last-1; else if (str[i] >= upper_last && str[i] <= 'Z') str[i] = 'A' + str[i]-upper_last-1; } return str; } int main() { int gap = 4; string encrypted = CaesarCipher(text, gap); hostdatei = fopen("C:\\encode.txt","w"); fprintf(hostdatei,"encode\n\n %s ", encrypted); fclose(hostdatei); string decrypted = CaesarCipher(encrypted, 26-gap); hostdatei = fopen("C:\\decode.txt","w"); fprintf(hostdatei,"decode\n\n %s ", decrypted ); fclose(hostdatei); system("PAUSE"); return 0; }
Meine Fehlermeldung
Code :1 2
39 [Warning] cannot pass objects of non-POD type `struct std::string' through `...'; call will abort at runtime 46 [Warning] cannot pass objects of non-POD type `struct std::string' through `...'; call will abort at runtime
Wie muss ich encrypted und decrypted denn Ausgeben oder was sagt mir die Fehlermeldung ?
Gruß Punish
-
19.05.10 08:41 #2
- Registriert seit
- Jun 2007
- Ort
- Passau (Niederbayern)
- Beiträge
- 1.394
Guten Morgen,
soweit ich es noch richtig im Kopf habe, funktioniert die fprintf()-Funktion nur mit primitiven Datentypen, also nicht mit einem String.
Wandle mal deinen String mit Hilfe der c_str()-Methode um und gib das Ergebnis aus.
Beispiel:
Code cpp:1
fprintf(hostdatei,"encode\n\n %s ", encrypted.c_str());
Gruß
BKÜber eine gute Bewertung freut sich jeder ;)
Bitte erledigte Threads als "Erledigt" markieren.
"Though a program be but three lines long, someday it will have to be maintained.''
-- Geoffrey James, "The Tao of Programming"
-
Die besserer Lösung ist: Erzeuge dir eine Instanz von std::ofstream und benutze sie genau so wie std::cout:
Code cpp:1 2 3 4 5 6 7 8
#include <fstream> ofstream out( "bla.txt" ); // Ab hier genau wie 'cout' out << "encode" << endl << endl; out << encoded << endl; out.close()
-
Du kannst das ganze auch mit nur fstream machen.
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14
#include <fstream> ... fstream fDatei; char cBuffer[512]; ... fDatei.open("irgendwas.txt", ios::out); fDatei.write(cBuffer, sizeof(cBuffer)); fDatei.close(); ...Geändert von Crash Kid (19.05.10 um 20:20 Uhr)
Wenn meine Antwort nützlich bzw. hilfreich war, würde ich mich sehr über eine Bewertung bzw. ein Danke sehr freuen.
Danke euch
Programmiere in C, C++ auf Windows XP, Vista und Windows 7
Spezialisiert auf Netzwerkprogrammierung, WinAPI uvm.
-
19.05.10 16:49 #5
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Oh, sorry. Kleiner Tippfehler. Hab es ausgebessert.
danke
grüßeWenn meine Antwort nützlich bzw. hilfreich war, würde ich mich sehr über eine Bewertung bzw. ein Danke sehr freuen.
Danke euch
Programmiere in C, C++ auf Windows XP, Vista und Windows 7
Spezialisiert auf Netzwerkprogrammierung, WinAPI uvm.
-
20.05.10 17:16 #7
- Registriert seit
- Mar 2008
- Beiträge
- 147
Auf jeden Fall sollte man aber noch das erfolgreiche Öffnen der Datei überprüfen:
Code cpp:1 2 3 4 5 6 7 8 9
ofstream mo("bla.txt",ios::trunc); if(!mo) { mo.close(); return 0; } mo << "write sth." << endl; mo.close();
Hinweis: Das Flag "trunc" sorgt dafür, dass die Datei "bla.txt" erstellt wird, sofern nicht vorhanden oder aber den bisherigen content komplett löschthilfreiche Antwort? Es gibt einen Danke-Button ;)
Rettet das Internet!
-
Ja klar das auch. Kann man ja auch

Bei fstream wäre das mit der Funktion:
Code :1 2 3 4 5 6 7 8 9 10 11 12
... if(fDatei.good()) { //Wenn die Datei geöffnet werden konnte } else { //Wenn sie nicht geöffnet werden konnte } ...Wenn meine Antwort nützlich bzw. hilfreich war, würde ich mich sehr über eine Bewertung bzw. ein Danke sehr freuen.
Danke euch
Programmiere in C, C++ auf Windows XP, Vista und Windows 7
Spezialisiert auf Netzwerkprogrammierung, WinAPI uvm.
-
21.05.10 10:47 #9
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
Ähnliche Themen
-
Verschlüsselung
Von chrisjahl im Forum InternetkommunikationAntworten: 2Letzter Beitrag: 26.10.08, 23:40 -
Aus einem String aus Zahlen und Buchstaben, nur die Buchstaben rausfiltern?
Von kurwajebana im Forum JavaAntworten: 2Letzter Beitrag: 14.04.07, 14:15 -
Caesar Verschlüsselung - Algorithmus für C++ ?
Von Cyraid im Forum C/C++Antworten: 26Letzter Beitrag: 11.06.06, 22:11 -
Caesar-Verschlüsselung
Von laaars im Forum Delphi, Kylix, PascalAntworten: 2Letzter Beitrag: 23.03.04, 12:56 -
Algorithmus für Caesar Code gesucht...
Von Henderwaeldler im Forum Coders TalkAntworten: 5Letzter Beitrag: 26.10.03, 15:47





Zitieren

Login






