Brauche hilfe bei meinem ersten Programm?
-
Hallo!
Ich habe vor 2 Wochen angefangen mit C++ zu arbeiten und bin eigentlich noch ein richtiger Anfänger

Derzeit arbeite ich an einem kleinen Programm zu erstellen von bestimmten .sql Dateien. Doch ich kann das noch nicht so .... ich habe hier unten meinen C++ Code geposten und ich wollte fragen was ich ergänzen muss, damit die folgenden Sachen funktionieren:
1. Wenn ich es so ausführe kann ich nur in Name etwas hineinschreiben, doch wenn ich ENTER drücke erscheint plötlich alles in einer zweile und ich kann nichts mehr schreiebn. Probierts mal aus dann seht ihr was ich meine.
2. Wie bekomme ich das was ich hineinschreibe, hald dann im Programm, am ende in eine SQL Datein? Wie z.B so .... wenn ich bei Name: TOMTOM hinein schreibe, dass es so "insert into `creature_template` (`TOMTOM`) " auch in der SQL Datei steht.
Sicher lachen sich die meisten von euch gleich tod, wenn ihr meinen Code seht, doch ich bin noch anfänger und hab das einfach mal so wie ich glaube hingeschrieben XD
//NPC Maker.cpp #include <StdAfx.h> #include <iostream> using namespace std; int main() { int Name; int Subname; int Rank; int Entry; int DisplayID; int Faction; int Größe; int WalkSpeed; int RunSpeed; int RespawnTimer; int Rüstung; int Mana; int Lebenmin ; int Lebenmax ; int Levelmin ; int Levelmax ; int Schadenmin ; int Schadenmax ; int Heilig; int Natur; int Schatten; int Feuer; int Frost; int Arkan; int Optionen; int Loot; cout << " NPC Name: " ; cin >> Name; cout << " NPC Subname: " ; cin >> Subname; cout << " NPC Rang ,schreibe 0 fuer normal, 1 fuer elite, 2 fuer rar elite, 3 fuer world boss, 4 fuer rar, : " ; cin >> Rank; cout << " Entry ID: " ; cin >> Entry; cout << " Display ID: " ; cin >> DisplayID; cout << "NPC Faction ( schreibe 7 für neutral, 14 für feindlich, 35 für Freundlich: " ; cin >> Faction ; cout << "NPC Größe: " ; cin >> Größe; cout << "WalkSpeed (am besten 2.50): " ; cin >> WalkSpeed; cout << "RunSpeed (am besten 8.00): " ; cin >> RunSpeed; cout << "NPC Rüstung: " ; cin >> Rüstung; cout << "NPC Mana: "; cin >> Mana; cout << "Leben min.: " ; cin >> Lebenmin; cout << "Leben max.: "; cin >> Lebenmax; cout << "Level min.: "; cin >> Levelmin; cout << "Level max.: "; cin >> Levelmin; cout << "Schaden min.: "; cin >> Schadenmin; cout << "Schaden max.: "; cin >> Schadenmax; cout << "res. Heilig: " ; cin >> Heilig; cout << "res. Natur: " ; cin >> Natur; cout << "res. Schatten: " ; cin >> Schatten; cout << "res. Feuer: " ; cin >> Feuer; cout << "res. Frost: " ; cin >> Frost; cout << "res. Arkan: " ; cin >> Arkan; cout << "NPC Optionen (Gossip:1/ Vendor:129/ Armorer:4097/ Gastwirt:65537/ Banker:131073 / Auction:2097153) : " ; cin >> Optionen; cout << "Gold: "; cin >> Loot; system("PAUSE"); return 0; }Hoffe auf schnelle Antwort ....
MfG Andreas
-
Hi!
Hab deinen Sourcecode ein bißchen kommentiert. Das ganze müßte jetzt ohne Fehler compilieren. Ich habs auf einem GCC 3.4.5 gebaut.
Ein paar mehr Details wären hilfreich. Z.B. welchen Compiler verwendest du, ...
Das mit dem SQL müßtest du auch noch ein bißchen genauer beschreiben. Ich weiß jetzt nicht, was du damit meinst.
mfg bernd
//NPC Maker.cpp #include <iostream> #include <string> using namespace std; int main() { string Name; // Für Zeichenketten strings verwenden string Subname; // Für Zeichenketten strings verwenden int Rank; int Entry; int DisplayID; int Faction; int Groesse; // Keine Umlaute im Sourcecode. Wundert mich, dass dein // Compiler da nicht gemeckert hat. float WalkSpeed; // Für Kommazahlen double oder float float RunSpeed; // int RespawnTimer; Variable wird nicht benutzt. int Ruestung; // Umlaut int Mana; int Lebenmin ; int Lebenmax ; int Levelmin ; // int Levelmax ; Variable wird nicht benutzt. int Schadenmin ; int Schadenmax ; int Heilig; int Natur; int Schatten; int Feuer; int Frost; int Arkan; int Optionen; int Loot; cout << " NPC Name: " ; cin >> Name; cout << " NPC Subname: " ; cin >> Subname; cout << " NPC Rang ,schreibe 0 fuer normal, 1 fuer elite, 2 fuer rar elite, 3 fuer world boss, 4 fuer rar, : " ; cin >> Rank; cout << " Entry ID: " ; cin >> Entry; cout << " Display ID: " ; cin >> DisplayID; cout << "NPC Faction ( schreibe 7 für neutral, 14 für feindlich, 35 für Freundlich: " ; cin >> Faction ; cout << "NPC Größe: " ; cin >> Groesse; cout << "WalkSpeed (am besten 2.50): " ; cin >> WalkSpeed; cout << "RunSpeed (am besten 8.00): " ; cin >> RunSpeed; cout << "NPC Rüstung: " ; cin >> Ruestung; cout << "NPC Mana: "; cin >> Mana; cout << "Leben min.: " ; cin >> Lebenmin; cout << "Leben max.: "; cin >> Lebenmax; cout << "Level min.: "; cin >> Levelmin; cout << "Level max.: "; cin >> Levelmin; cout << "Schaden min.: "; cin >> Schadenmin; cout << "Schaden max.: "; cin >> Schadenmax; cout << "res. Heilig: " ; cin >> Heilig; cout << "res. Natur: " ; cin >> Natur; cout << "res. Schatten: " ; cin >> Schatten; cout << "res. Feuer: " ; cin >> Feuer; cout << "res. Frost: " ; cin >> Frost; cout << "res. Arkan: " ; cin >> Arkan; cout << "NPC Optionen (Gossip:1/ Vendor:129/ Armorer:4097/ Gastwirt:65537/ Banker:131073 / Auction:2097153) : " ; cin >> Optionen; cout << "Gold: "; cin >> Loot; system("PAUSE"); return 0; }
-
NPC Name: 15 NPC Subname: 42 NPC Rang ,schreibe 0 fuer normal, 1 fuer elite, 2 fuer rar elite, 3 fuer world boss, 4 fuer rar, : 0 Entry ID: 12 Display ID: 32 NPC Faction ( schreibe 7 f³r neutral, 14 f³r feindlich, 35 f³r Freundlich: 55 NPC Gr÷▀e: 1565 WalkSpeed (am besten 2.50): 100 RunSpeed (am besten 8.00): -55 NPC R³stung: 11 NPC Mana: 6 Leben min.: 11 Leben max.: 951 Level min.: 11003 Level max.: 631 Schaden min.: 1120 Schaden max.: 56546 res. Heilig: 00 res. Natur: 58 res. Schatten: 210 res. Feuer: 565 res. Frost: 898 res. Arkan: 32183 NPC Optionen (Gossip:1/ Vendor:129/ Armorer:4097/ Gastwirt:65537/ Banker:131073 / Auction:2097153) : 129 Gold: 1223 Drücken Sie eine beliebige Taste . . .Funktioniert doch...
Nein im Ernst, der Fehler ist, dass du Eigenschaften, die Zeichenketten darstellen (z.B. Name) als
intdeklarierst, weshalb sie lediglich ganze Zahlen als Werte haben können. Wenn du jetzt als Name "Troll" eingibst, ist das offensichtlich keine Zahl, weshalb das Einlesen fehlschläft. Um den weiteren Verlauf zu verstehen, musst du verstehen, wie die Eingabe in C++ funktioniert:
Die eingegebenen Zeichen werden zwischengespeichert. In dem sog. Puffer steht jetzt also "Troll". Jetzt wird versucht, daraus eine Zahl zu entnehmen. Das schlägt fehl, soweit so gut. Die Zeichen bleiben aber im Puffer. Deswegen wird bei nächsten Aktion (cin >> Subname;) der User nicht aufgefordert, eine Eingabe zu tätigen, sondern es wird versucht, die Informationen aus dem Puffer zu exktrahieren. Da aber wieder eine Zahl verlangt wird, schlägt das wieder fehl. So rauscht dein ganzes Programm durch.
Wie du das verhindern kannst, sagt dir am besten Google, die vorerst einfachste Möglichkeit ist, Variablen wie Name und Subname den Typstd::stringzu geben, damit sie Zeichenketten aufnehmen können. Dann solltest du aberstd::getlineverwenden, da sonst die Strings nur bis zum ersten Leerzeichen gelesen werden. Außerdem musst du dich noch darum kümmern, dasscin, sollte doch eine Fehleingabe kommen, zurück gesetzt wird.
Alles im allen gibt es aber dazu einige Online-Tutorials, der Stoff ist leider etwas zu umfangreich, um ihn in einem Beitrag erschöpfend zu erklären.
-
Erstmal danke für die schnelle Antworten!
Haben mir auch sehr geholfen xDOkey, ich Programmiere mit Microsoft Visual C++ 2010 Express.
Ich habe jetzt meinen ganzen Code verbessert und er läuft einwandfrei. Nun habe ich aber noch eine kleine Frage:Wie bekomme ich das was ich da schreibe wie z.B "Name: Chaos" in eine SQL- Datein hineingeschrieben. So als ob ichs in ein Text Dokument speichere, nur das es hald kein .txt sondern .sql ist.
Und wie mache ich es das wenn ich "Name: Chaos schreibe es dann so im Dokument steht: "insert into `creature_template` (`Chaos`) " nur mal so als Beispiel.MfG Andreas
-
Forsti schrieb:
Wie bekomme ich das was ich da schreibe wie z.B "Name: Chaos" in eine SQL- Datein hineingeschrieben. So als ob ichs in ein Text Dokument speichere, nur das es hald kein .txt sondern .sql ist.
Die Dateiendung ist ganz egal. Du schreibst deswegen auch nur in eine Textdatei.
int main() { ofstream testfile; testfile.open("test.sql"); testfile<< "Bla bla blub...."; testfile.close(); return 0; }Forsti schrieb:
Und wie mache ich es das wenn ich "Name: Chaos schreibe es dann so im Dokument steht: "insert into `creature_template` (`Chaos`) " nur mal so als Beispiel.
Einfach einen String zusammenbasteln.
string test(string vorname, string nachname) { string s; s.append("insert into tbl_bla (vorname, nachname) VALUES("); s.append(vorname); s.append(", "); s.append(nachname); s.append(");"); return s; }Schau dir mal http://www.cppreference.com/wiki/ an.
mfg bernd
-
Danke!
Aber wo schreibe ich das jetzt hier rein? xDD kenn das mit dem speichern in eine andere datei noch nicht

//NPC Maker.cpp #include <stdafx.h> #include <iostream> #include <string> using namespace std; int main() { string Name; string Subname; string Rank; float Entry; float DisplayID; string Faction; float Groesse; float Ruestung; float Mana; float Lebenmin ; float Lebenmax ; float Levelmin ; float Schadenmin ; float Schadenmax ; float Heilig; float Natur; float Schatten; float Feuer; float Frost; float Arkan; float Optionen; float Loot; /////////////////////////////////////////////// cout << " NPC Name: " ; cin >> Name; cout << " NPC Subname: " ; cin >> Subname; cout << " NPC Rang ,schreibe 0 fuer normal, 1 fuer elite, 2 fuer rar elite, 3 fuer world boss, 4 fuer rar, : " ; cin >> Rank; cout << " Entry ID: " ; cin >> Entry; cout << " Display ID: " ; cin >> DisplayID; cout << "NPC Faction ( schreibe 7 fuer neutral, 14 fuer feindlich, 35 fuer Freundlich: " ; cin >> Faction ; cout << "NPC Größe: " ; cin >> Groesse; cout << "WalkSpeed (am besten 2.50): " ; cin >> WalkSpeed; cout << "RunSpeed (am besten 8.00): " ; cin >> RunSpeed; cout << "NPC Rüstung: " ; cin >> Ruestung; cout << "NPC Mana: "; cin >> Mana; cout << "Leben min.: " ; cin >> Lebenmin; cout << "Leben max.: "; cin >> Lebenmax; cout << "Level min.: "; cin >> Levelmin; cout << "Level max.: "; cin >> Levelmin; cout << "Schaden min.: "; cin >> Schadenmin; cout << "Schaden max.: "; cin >> Schadenmax; cout << "res. Heilig: " ; cin >> Heilig; cout << "res. Natur: " ; cin >> Natur; cout << "res. Schatten: " ; cin >> Schatten; cout << "res. Feuer: " ; cin >> Feuer; cout << "res. Frost: " ; cin >> Frost; cout << "res. Arkan: " ; cin >> Arkan; cout << "NPC Optionen (Gossip:1/ Vendor:129/ Armorer:4097/ Gastwirt:65537/ Banker:131073 / Auction:2097153) : " ; cin >> Optionen; cout << "Gold: "; cin >> Loot; system("PAUSE"); return 0; }MfG Forsti
-
Hi!
Mach erst mal ein Tutorial zu C++ durch oder kauf dir ein Buch.
mfg Bernd
-
Und aus Lust an der Freude das Thema SQL-Injections anschauen.

-
http://www.cplusplus.com/reference/iostream/ofstream/ofstream/
#include <iostream> #include <fstream> using namespace std; int main () { int mana = 100; int health = 40; ofstream outfile ("test.txt"); outfile << health<<endl; // schreib den wert 40 mit einem zeilenumbruch in die datei test.txt outfile << mana; // schreibe den wert 100 in die datei test.txt outfile.close(); return 0; }
-
Ein C++ Tutorial: