programm beendet sich selber - hilfe
-
Dass deine Funktionen keine Werte zurückgeben, wie ich bereits vorher angemerkt habe, sind schon mal Fehler
Ansonsten probier mal das:
#include <stdlib.h> #include <stdio.h> int fidblesen(); /*die db lesen*/ int fidbschr(); /*in die db schreiben*/ int fidbaen(); /*db ändern*/ int main() { int menua; printf("FIDB - v. 0.1 - by err0r\n"); printf("Bitte waehlen sie ein Menupunkt aus.\n"); /*das menü*/ printf("1. FIDB lesen\n"); printf("2. FIDB schreiben\n"); printf("3. FIDB aendern\n"); /*printf("4. FIDB beenden\n"); nur bei windows*/ printf("\n"); scanf("%d",&menua); fflush(stdin); switch(menua) { case 1: fidblesen(); break; case 2: fidbschr(); break; case 3: fidbaen(); break; /*case 4: exit(0); break; nur bei windows*/ } /*getch 0; nur bei windows*/ } int fidblesen() /*die db lesen*/ { return 0; } int fidbschr() /*in die db schreiben*/ { #define MAX 101 int menuafidbschr; /*FILE *stdin;*/ char filmname[MAX]; int filmnr, filmcodec, filmart, filmsource, filmfsk, filmdatum; printf("Film in die FIDB hinzufuegen.\n"); printf("\n"); printf("Eingabe:\n"); printf("Filmname:\n"); char* res = fgets(filmname, sizeof(filmname), stdin); return 0; } int fidbaen() /*db ändern*/ { return 0; }
-
hi.
ne sorry
hab das ganze wochenende probiert aber kriegs nich hin. jmd ne idee?
danke
-
hm schrieb:
hi.
ne sorry
hab das ganze wochenende probiert aber kriegs nich hin. jmd ne idee?
danke
Dann is dir nicht mehr zu helfen...
-
wieso das denn? ich finde halt keinen fehler! suche wie bescheuert, kann mir niemand anders helfen? kann ja sein das du interpreter ihn auch nicht findest.
-
???? schrieb:
wieso das denn? ich finde halt keinen fehler! suche wie bescheuert, kann mir niemand anders helfen? kann ja sein das du interpreter ihn auch nicht findest.
Kann ich auch nicht, weil in dem Sourcecode kein Fehler mehr drinnen ist.
Bemängeln könnte man zwar, dass in main kein explizites return steht und das der Code einfach sinnfrei ist aber dennoch ist in ihm kein Fehler.
-
/* FIDB ist ein Filmarchiv. Man kann Filmnamen, Art, Codec usw. eintragen und dies dann auch abspeichern, ausdrucken oder auch in eine sql db eintragen lassen. */ #include <stdlib.h> #include <stdio.h> #define MAX 101 int fidblesen(); /*die db lesen*/ int fidbschr(); /*in die db schreiben*/ int fidbaen(); /*db ändern*/ int main() { int menua; printf("FIDB - v. 0.1 - by err0r\n"); printf("Bitte waehlen sie ein Menupunkt aus.\n"); /*das menü*/ printf("1. FIDB lesen\n"); printf("2. FIDB schreiben\n"); printf("3. FIDB aendern\n"); /*printf("4. FIDB beenden\n"); nur bei windows*/ printf("\n"); scanf("%d",&menua); switch(menua) { case 1: fidblesen(); break; case 2: fidbschr(); break; case 3: fidbaen(); break; /*case 4: exit(0); break; nur bei windows*/ } return(0); /*getch 0; nur bei windows*/ } int fidblesen() /*die db lesen*/ { } int fidbschr() /*in die db schreiben*/ { int menuafidbschr; /*FILE *stdin;*/ char filmname[MAX]; int filmnr, filmcodec, filmart, filmsource, filmfsk, filmdatum; printf("Film in die FIDB hinzufuegen.\n"); printf("\n"); printf("Eingabe:\n"); printf("Filmname:\n"); fgets(filmname, sizeof(filmname), stdin); } int fidbaen() /*db ändern*/ { }
So sollte es funktionieren.
Möglicherweise wird das fgets() noch "übersprungen", da vom scanf() in main() noch ein RETURN im Eingabepuffer stehen könnte.
Ist das der Fall?
@interpreter
Vom ANSI-C Standard her, war eindeutig noch ein Fehler drin!
-
AJ schrieb:
@interpreter
Vom ANSI-C Standard her, war eindeutig noch ein Fehler drin!Und wo?
Mein Compileoutput:
io - 0 error(s), 7 warning(s)---------------------- Done ----------------------
Build: 1 succeeded, 0 failed, 0 skipped
-
interpreter schrieb:
[cpp]
...
int fidbschr() /*in die db schreiben*/
{
#define MAX 101
int menuafidbschr;
/*FILE *stdin;*/
char filmname[MAX];
int filmnr, filmcodec, filmart, filmsource, filmfsk, filmdatum;printf("Film in die FIDB hinzufuegen.\n");
printf("\n");
printf("Eingabe:\n");
printf("Filmname:\n");
char* res = fgets(filmname, sizeof(filmname), stdin);
return 0;
}
...
[/cpp]Genau da. Ein C++-Compiler schluckt das natürlich ohne murren.
-
hi.
also hab das jetzt mal getestet so wie es AJ sagte. mit der zeile "fgets(filmname, sizeof(filmname), stdin);" nur es geht noch immer nicht.
fehler krieg ich keinen.
schaut:
*
dean@gentoo diverses $ gcc -o modbp2 modbp2.c
modbp2.c:69:2: warning: no newline at end of file
dean@gentoo diverses $ ./modbp2
FIDB - v. 0.1 - by err0r
Bitte waehlen sie ein Menupunkt aus.
1. FIDB lesen
2. FIDB schreiben
3. FIDB aendern2
Film in die FIDB hinzufuegen.Eingabe:
Filmname:
dean@gentoo diverses $*verstehs einfach nicht. jetzt ist es doch wirklich ansi c
und vom code her ist doch alles richtig
was kann da nur falsch sein?
ciao
-
Schreib mal hinter fgets() noch einen Ausgabetext. Wenn dieser sofort kommt, ohne dass du was eingeben kannst, dann liegt es, wie schon gepostet, daran:
AJ schrieb:
Möglicherweise wird das fgets() noch "übersprungen", da vom scanf() in main() noch ein RETURN im Eingabepuffer stehen könnte.
Abhilfe könnte durch das Ersetzen deines scanf() durch ein weiteres fgets() geschaffen werden. Wie man fgets() benutzt, solltest du ja jetzt wissen ;).
-
Warum eigentlich nicht einfach ein fflush auf stdin, wie ich es bereits erwähnt habe?
Bei mir funktioniert das einwandfrei
-
@interpreter
Das funktioniert auch meistens. Allerdings ist das Verhalten undefiniert. Es ist also nicht sicher, dass es überall so ist. Siehe dazu auch die FAQ.
-
hi.
also wenn ich:
fgets(menua,stdin);
schreib gehts net. und net wenn ichs so schreib:
fgets(menua, sizeof(menua), stdin);
fehler:
modbp2.c: In functionmain': modbp2.c:31: Warnung: passing arg 1 of
fgets' makes pointer from integer without a cast
modbp2.c:70:2: Warnung: no newline at end of fileund zeile 31 ist die in der ich aus dem scanf das fgets gemacht habe.
cya
-
@ne
... int menua; char menu[10]; ... fgets(menu, sizeof(menu), stdin); menua = atoi(menu); ...
fgets() erwartet immer einen Zeiger auf char. Wenn du der Funktion dann mit einer Integervariablen kommst, meckert natürlich der Compiler ;).
atoi() wandelt dir übrigens die Zahl im String in einen Integer um.