• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

MySQL Ausgabe mit C formatiert falsch

Status
Für weitere Antworten geschlossen.

TheShadow

Neues Mitglied
MySQL Programm mit C

Hallo,
ich programmiere momentan einen Hausaufgabenmanager. Hier möchte ich die Hausaufagen auslesen. Es klappt auch alles so weit, doch er gibt mir nur die Datensätze in folgendem Format aus:
IDnamefachdatum
ID2name2fach2datum2
Also alles zusammen. Wie kann ich da jetzt Leerzeichen einfügen?
Hier ist mein Code:
My HA Manager - nopaste.com (beta)

Ich bin für jede Hilfe dankbar!
Gruß
 
Zuletzt bearbeitet:
Werbung:
Hallo,

wenn ich das richtig sehe gibst du mit
Code:
printf("%s", row[i]);
die Spalte aus. Setz hinter das %s noch ein Leerzeichen, dann wird die Ausgabe auch getrennt.


N43
 
Erstmal Danke, doch jetzt werden die Datensätze umgebrochen.
Es sieht jetzt so aus:
ID
name
fach
datum

ID2
name2
fach2
datum2

Ich will es aber so haben:
ID name fach datum
ID2 name2 fach2 datum2
 
Werbung:
Hallo,
und schon bei der nächsten Funktion gibt es wieder ein Problem. Es geht darum einen neuen Datensatz anzulegen. Soweit auch alles gut, aber er speichert nur:
(null) (null) (null)
Es liegt wohl daran dass ich die ID nicht angegeben habe, aber ich habe dem Feld ID auto_increment + PRIMARY KEY gegeben.
Wieso zählt er die ID also nicht automatisch hoch oder ist etwas anderes falsch?
Das ist mein Code:
My HA Manager - nopaste.com (beta)
 
Abend,

Code:
scanf("%s", &name);
//muss
scanf("%s", name);
sein (& weg). name ist bereits ein Pointer auf den Anfang des Arrays. Bei den anderen beiden genauso.

Bei
Code:
sprintf(query, "INSERT INTO hausaufgaben (name, fach, datum) VALUES (name, fach, datum)");
musste wie bei printf über %s den einzufügenden Text angeben. Der Compiler weiß nicht, dass bei name das Array name eingesetzt werden soll.


N43
 
Werbung:
Ich würde dir raten Funktionen wie snprintf() anstelle von sprintf() zu verwenden ansonsten könnte jemand ja den Buffer überlaufen lassen ;-)
 
Abend,

Code:
scanf("%s", &name);
//muss
scanf("%s", name);
sein (& weg). name ist bereits ein Pointer auf den Anfang des Arrays. Bei den anderen beiden genauso.

Bei
Code:
sprintf(query, "INSERT INTO hausaufgaben (name, fach, datum) VALUES (name, fach, datum)");
musste wie bei printf über %s den einzufügenden Text angeben. Der Compiler weiß nicht, dass bei name das Array name eingesetzt werden soll.


N43
Erstmal danke. Leider verstehe ich das mit den %s nicht. Wo muss ich die einfügen? Sorry, bin noch nicht so bewandert mit C. Habe bisher ausschließlich C++ benutzt.
 
Hallo,


Code:
snprintf(query, 1000*sizeof(char), "INSERT INTO hausaufgaben (name, fach, datum) VALUES %s, %s, %s)", name, fach, datum);
Hab's gleich mal mit snprintf gemacht. 1000 gibt die maximale Anzahl an Zeichen an.

N43
 
Werbung:
Ok, ich habe es jetzt geändert, doch entweder zeigt er mir jetzt einen MySQL Fehler, oder er gibt meine Fehlermeldung aus, dass der Datensatz nicht hinzugefügt worden konnte.
Ich glaube da ist irgendwas mit dem ID Feld nicht in Ordnung. :/
 
Hallo,

bei meinem Code fehlt vor dem ersten %s die öffnende Klammer und die %s sollten in Hochkommata eingeschlossen werden.

Lass dir zur Sicherheit mal den generierten Query ausgeben.

N43
 
Und wenn das Programm streikt bin es wieder ich. :eek:
Nein, ich habe jetzt die Funktion zum löschen geschrieben und meiner Meinung nach auch alles korrekt gemacht. Mein Programm gibt mir auch die positive Meldung, dass der Datensatz gelöscht wurde, doch beim Auslesen ist der Datensatz noch da.
Hier ist mein Code:
My HA Manager - nopaste.com (beta)
 
Werbung:
Hallo,

du liest zum Löschen den Namen ein, änder mal
Code:
scanf("%s", name);
//in
scanf("%i", &ID);
N43
 
So, nächster Fehler. Dieses mal beim editieren. Es sagt mir, dass es den Datensatz nicht ändern konnte, also meine vordefinierte Fehlermeldung. Aber ich kann keinen Fehler im Programm finden, weil mir ja auch mein Compiler keine Fehler ausgibt. Die Datensätze sind dann natürlich auch nicht geändert.
Hier ist mein Code:
My HA Manager - nopaste.com (beta)
Edit: Hab gerade gesehen, dass die Kommentare falsch sind. Beim letzten case für die Editfunktion ist natürlich das Datum und nicht das Fach gemeint, also seid bitte nicht verwirrt.

Gruß
 
Seit wann gibt es den Befehl
UPDATE hausaufgaben WHERE name='%s'

Du musst schreiben
Code:
UPDATE hausaufgaben SET name='%s' WHERE name='URASPRÜNGLICHER NAME'
 
Werbung:
Status
Für weitere Antworten geschlossen.
Zurück
Oben