Run-Time Check failure #2
-
TheScripti schrieb:
# include <SDKDDKVer.h> # include <stdio.h> # include <tchar.h> # include <iostream> # include <string> # include <fstream> # include <windows.h> #define add(x, y) (x * 100 + y) using namespace std; long resetoutput(string file) { ofstream hallo; hallo.open(file.c_str(), ios_base::out); if ( !hallo ) { cerr << "error" << endl; return 2; } hallo.close(); return 0; } long code() { char text[20000]; // char array erstellen (pro buchstabe ein text[]) // code definieren unsigned char code[200]; code['a'] = 10; code['b'] = 11; code['c'] = 12; code['d'] = 13; code['e'] = 14; code['f'] = 15; code['g'] = 16; code['h'] = 17; code['i'] = 18; code['j'] = 19; code['k'] = 20; code['l'] = 21; code['m'] = 22; code['n'] = 23; code['o'] = 24; code['p'] = 25; code['q'] = 26; code['r'] = 27; code['s'] = 28; code['t'] = 29; code['u'] = 30; code['v'] = 31; code['w'] = 32; code['x'] = 33; code['y'] = 34; code['z'] = 35; code[' '] = 36; code['!'] = 37; code['?'] = 38; code['A'] = 39; code['B'] = 40; code['C'] = 41; code['D'] = 42; code['E'] = 43; code['F'] = 44; code['G'] = 45; code['H'] = 46; code['L'] = 47; code['I'] = 48; code['K'] = 49; code['L'] = 50; code['M'] = 51; code['N'] = 52; code['O'] = 53; code['P'] = 54; code['Q'] = 55; code['R'] = 56; code['S'] = 57; code['T'] = 58; code['U'] = 59; code['V'] = 60; code['W'] = 61; code['X'] = 62; code['Y'] = 63; code['Z'] = 64; code['Ü'] = 65; code['Ä'] = 66; code['Ö'] = 67; code['ü'] = 68; code['ä'] = 69; code['ö'] = 70; code[','] = 71; code[';'] = 72; code['"'] = 73; code['.'] = 74; code[':'] = 75; code['_'] = 76; code['-'] = 77; code['#'] = 78; code['+'] = 79; code['~'] = 80; code['*'] = 81; code['/'] = 82; code['\\'] = 83; code['ß'] = 84; code['&'] = 85; code['%'] = 86; code['$'] = 87; code['§'] = 88; code['='] = 89; code['°'] = 90; code['^'] = 91; // code definieren ende cout << "Text:" << endl; // Nutzer auffordern, etwas einzugeben cin.getline(text, strlen(text));// text einlesen und in char text[] speicher unsigned int tmp; // temp - variable unsigned int tmpc = 0; unsigned int i; // variable zum speichern der char array länge des eingegebenen textes unsigned int c = 0; // counter für buchstabe resetoutput("output.txt"); // output.txt zurücksetzen i = strlen(text); tmp = 0; cout << "Code:" << endl; while(c != i) { tmp = tmp * 100 + code[text[c]]; cout << tmp; tmp = 0; c++; } cout << endl; return 0; } long decode() { eturn 0; } long menu() { int eingabe; cout << "exit <1>" << endl; cout << "Datei codieren <2>" << endl; cout << "Datei decodieren <3>" << endl; cin >> eingabe; getchar(); switch (eingabe) { case 1: return 1; return 0; break; case 2: code(); return 0; break; case 3: decode(); return 0; break; default: return 0; break; } return 0; } int main(){ while(true) { if(menu() == 1) { cout << "exiting...\a\a\a" << endl; Sleep(500); return 0; } else { menu(); } } return 0; }nur mal um das ganze lesbar zu haben -.-
-
Oh sorry aber trotzdem vielen Dank.
Das mit den Tags hab ich davor nicht gecheckt.
Ich hab die AäÜüÖö - s weggelassen und durch klammer´n ersetzt, um den Platz zu füllen.# include <SDKDDKVer.h> # include <stdio.h> # include <tchar.h> # include <iostream> # include <string> # include <fstream> # include <windows.h> #define add(x, y) (x * 100 + y) using namespace std; short resetoutput(string file){ ofstream hallo; hallo.open(file.c_str(), ios_base::out); if(!hallo){ cerr << "error" << endl; return 2; } hallo.close(); return 0; } long code(){ char text[20000]; // char array erstellen (pro buchstabe ein text[]) // code definieren char code[1000]; code['a'] = 10; code['b'] = 11; code['c'] = 12; code['d'] = 13; code['e'] = 14; code['f'] = 15; code['g'] = 16; code['h'] = 17; code['i'] = 18; code['j'] = 19; code['k'] = 20; code['l'] = 21; code['m'] = 22; code['n'] = 23; code['o'] = 24; code['p'] = 25; code['q'] = 26; code['r'] = 27; code['s'] = 28; code['t'] = 29; code['u'] = 30; code['v'] = 31; code['w'] = 32; code['x'] = 33; code['y'] = 34; code['z'] = 35; code[' '] = 36; code['!'] = 37; code['?'] = 38; code['A'] = 39; code['B'] = 40; code['C'] = 41; code['D'] = 42; code['E'] = 43; code['F'] = 44; code['G'] = 45; code['H'] = 46; code['L'] = 47; code['I'] = 48; code['K'] = 49; code['L'] = 50; code['M'] = 51; code['N'] = 52; code['O'] = 53; code['P'] = 54; code['Q'] = 55; code['R'] = 56; code['S'] = 57; code['T'] = 58; code['U'] = 59; code['V'] = 60; code['W'] = 61; code['X'] = 62; code['Y'] = 63; code['Z'] = 64; code[']'] = 65; code['['] = 66; code['}'] = 67; code['{'] = 68; code['('] = 69; code[')'] = 70; code[','] = 71; code[';'] = 72; code['"'] = 73; code['.'] = 74; code[':'] = 75; code['_'] = 76; code['-'] = 77; code['#'] = 78; code['+'] = 79; code['~'] = 80; code['*'] = 81; code['/'] = 82; code['\\'] = 83; code['ß'] = 84; code['&'] = 85; code['%'] = 86; code['$'] = 87; code['§'] = 88; code['='] = 89; code['°'] = 90; code['^'] = 91; code['<'] = 92; code['>'] = 93; code['0'] = 90; code['1'] = 91; code['2'] = 92; code['3'] = 93; code['4'] = 94; code['5'] = 95; code['6'] = 96; code['7'] = 97; code['8'] = 98; code['7'] = 99; // code definieren ende cout << "Text:" << endl; // Nutzer auffordern, etwas einzugeben cin.getline(text, strlen(text));// text einlesen und in char text[] speichern unsigned int tmp; // temp - variable unsigned int tmpc = 0; unsigned int i; // variable zum speichern der char array länge des eingegebenen textes unsigned int c = 0; // counter für buchstabe resetoutput("output.txt"); // output.txt zurücksetzen i = strlen(text); tmp = 0; cout << "Code:" << endl; while(c != i){ tmp = tmp * 100 + code[text[c]]; cout << tmp; tmp = 0; c++; } cout << endl; return 0; } short decode(){ return 0; } short menu(){ int eingabe; cout << "exit <1>" << endl; cout << "Datei codieren <2>" << endl; cout << "Datei decodieren <3>" << endl; cin >> eingabe; getchar(); switch (eingabe){ case 1: return 1; return 0; break; case 2: code(); return 0; break; case 3: decode(); return 0; break; default: return 0; break; } return 0; } int main(int argc, char *argv){ while(true){ if(menu() == 1){ cout << "exiting...\a\a\a" << endl; Sleep(500); return 0; } else { menu(); } } return 0; }Aber das mit den falschen headern hab ich immer noch nich verstanden
-
diese header kannst du weglassen, die brauchst du nicht:
# include <SDKDDKVer.h> # include <stdio.h> # include <tchar.h> # include <windows.h>die einzigen die du brauchst sind:
#include <iostream> #include <fstream> #include <string> // und eventuell noch #include <vector>dein Macro "add" brauchst du auch nicht, und wenn doch, dann schreib dir dazu eine funktion
-
# include <SDKDDKVer.h> // benutzt du nichts draus # include <stdio.h> // heißt in C++ cstdio, benutzt du nichts draus # include <tchar.h> // benutzt du nichts draus # include <iostream> # include <string> # include <fstream> # include <windows.h> # include <cstring> // Fehlt für strlen. Du hättest vermutlich string.h geschrieben, aber in C++ heißt es cstring. Und du solltest std::string benutzen, keine char-Arrays.P.S.: Und ich würde
#include, statt# includeschreiben. Ist zwar technisch egal, aber der übliche Stil.
-
//#include <SDKDDKVer.h> //#include <stdio.h> //#include <tchar.h> //#include <windows.h> #include <iostream> #include <string> #include <fstream> #include <map> //#define add(x, y) (x * 100 + y) using namespace std; long resetoutput(string const& file) // ist schneller als referenz übergeben { ofstream hallo(file.c_str()); // hallo.open(file.c_str(), ios_base::out); // kannst du weglassen, stichwort RAII if ( !hallo ) { cerr << "error" << endl; return 2; } //hallo.close(); // close wird im destruktor automatisch aufgerufen return 0; } long code() { //char text[20000]; // char array erstellen (pro buchstabe ein text[]) // wir nehmen std::string // code definieren //unsigned char code[200]; std::map<char, int> code; // so kannst du gar nicht mehr ausserhalb der grenzen gehen code['a'] = 10; code['b'] = 11; code['c'] = 12; code['d'] = 13; code['e'] = 14; code['f'] = 15; code['g'] = 16; code['h'] = 17; code['i'] = 18; code['j'] = 19; code['k'] = 20; code['l'] = 21; code['m'] = 22; code['n'] = 23; code['o'] = 24; code['p'] = 25; code['q'] = 26; code['r'] = 27; code['s'] = 28; code['t'] = 29; code['u'] = 30; code['v'] = 31; code['w'] = 32; code['x'] = 33; code['y'] = 34; code['z'] = 35; code[' '] = 36; code['!'] = 37; code['?'] = 38; code['A'] = 39; code['B'] = 40; code['C'] = 41; code['D'] = 42; code['E'] = 43; code['F'] = 44; code['G'] = 45; code['H'] = 46; code['L'] = 47; code['I'] = 48; code['K'] = 49; code['L'] = 50; code['M'] = 51; code['N'] = 52; code['O'] = 53; code['P'] = 54; code['Q'] = 55; code['R'] = 56; code['S'] = 57; code['T'] = 58; code['U'] = 59; code['V'] = 60; code['W'] = 61; code['X'] = 62; code['Y'] = 63; code['Z'] = 64; code['Ü'] = 65; code['Ä'] = 66; code['Ö'] = 67; code['ü'] = 68; code['ä'] = 69; code['ö'] = 70; code[','] = 71; code[';'] = 72; code['"'] = 73; code['.'] = 74; code[':'] = 75; code['_'] = 76; code['-'] = 77; code['#'] = 78; code['+'] = 79; code['~'] = 80; code['*'] = 81; code['/'] = 82; code['\\'] = 83; code['ß'] = 84; code['&'] = 85; code['%'] = 86; code['$'] = 87; code['§'] = 88; code['='] = 89; code['°'] = 90; code['^'] = 91; // code definieren ende std::string text; // variablen erst da definieren wo du sie brauchst cout << "Text: " << endl; // Nutzer auffordern, etwas einzugeben //cin.getline(text, strlen(text));// text einlesen und in char text[] speicher getline(cin, text); unsigned int tmp; // temp - variable unsigned int tmpc = 0; unsigned int strLength; // variable zum speichern der char array länge des eingegebenen textes // besserer name resetoutput("output.txt"); // output.txt zurücksetzen i = text.size(); tmp = 0; cout << "Code:" << endl; for(unsigned int i = 0; i < strLength; ++i) // besser als zähl schleife geschrieben, intuitiver { //tmp = tmp * 100 + code[text[i]]; // die formel macht keinen sinn, da tmp vorher 0 ist und am ende der schleife für den nächsten durchlauf wieder auf 0 gesetzt wird, kommt immer nur der code aus dem 'array' raus tmp = code[text[i]]; cout << tmp; tmp = 0; } // alternativ auch mit iteratoren schreibbar /*for(auto it = text.begin(); it != text.end(); ++it) cout << code[*it];*/ cout << endl; return 0; // wenn du eh 0 zurückgibst, wieso machst du die funktion nicht void? } long decode() { return 0; // macht nichts, aber müsstest du glaube ich noch implementieren } long menu() { int eingabe; cout << "exit <1>" << endl; cout << "Datei codieren <2>" << endl; cout << "Datei decodieren <3>" << endl; cin >> eingabe; //getchar(); wofür? um etwaige fehler aus dem stream zu löschen? das geht anders switch (eingabe) { case 1: return 1; // doppelt und dreifach gemoppelt //return 0; //break; case 2: code(); //return 0; break; case 3: decode(); //return 0; break; default: //return 0; break; } // ein return verhindert ein nachfolgendes return oder break, es verhindert alle nachfolgenden anweisung in dieser funktion return 0; } int main(){ while(true) { if(menu() == 1) { cout << "exiting...\a\a\a" << endl; Sleep(500); return 0; } else { menu(); // wenn man hier nicht 1 eingibt, muss man erstmal noch eine eingabe bevor was passiert. du musst doch auch nicht 2mal a drücken damit ein a auf dem bildschirm erscheint?! } } return 0; }mir war langweilig, hier haste dein programm soweit verbessert, wenn du was nicht weist/verstehst, erstmal google (z.B. was eine map ist) und dann kannste fragen.
kommentare stehen soweit dran
aber ich erhebe keinen anspruch auf die richtigkeit des programms, sowohl syntaktisch als auch semantisch nicht
-
std::map<char, int> code; for (char c = 'a'; c <= 'z'; ++c) code[c] = static_cast<int>(c) - 87; for (char c = 'A'; c < 'Z'; ++c) code[c] = static_cast<int>(c) - 26; char temp[27] = {'Ü', 'Ä', 'Ö', 'ü', 'ä', 'ö', ',', ';', '"', '.', ':', '_', '-', '#', '+', '~', '*', '/', '\\', 'ß', '&', '%', '$', '§', '=', '°', '^'}; for (int n = 0; n < 27; ++n) code[temp[n]] = n + 65; code[' '] = 36; code['!'] = 37;
-
SeppJ schrieb:
Das geht allein deswegen schon schief, weil 'Ä' bei dir vermutlich eine "multi-character character constant" ist und das gehörig kracht, wenn du das als Arrayindex benutzt, da helfen weder char[200] noch char[1000].
Das ist so nicht ganz korrekt. Ein multicharacter literal ist ein Zeichen-Literal mit mehreren Zeichen. Zum Problem wird hier eher, dass char auch schon mal Vorzeichenbehaftet sein kann, und das verursacht schon mal Probleme, wenn es dann als Index in ein Array verwendet wird.
-
Wenn ich aber die ganzen header weglasse, dann steht da, dass "Sleep();" dicht definiert ist.
Sorry, dass ich euch nerve aber ich bin leider ein totaler Anfänger

TheScripti
-
Das war Skym0sh0 zu übereifrig, das Sleep kommt aus windows.h. Wobei ich inh gut verstehen kann: Wozu soll das sleep da gut sein und wieso ist es das Wert, sich an Windows zu ketten, wenn man ansonsten ziemlich portables Programm hat?
-
Stimmt...
-
Aber noch eine Sache.
Wenn ich es ausführe, dann
steht folgendes da:
exit <1>
Datei codieren <2>
Datei decodieren <3>[wenn ich 2 eingebe und enter drücke:]
Text:
Code:exit <1>
Datei codieren <2>
Datei decodieren <3>Ich hab also keine Möglichkeit mehr den Text einzugeben
Wieso nicht?
Danke im voraus...
TheScripti