PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : bitte mal den quellcode anschauen.



namous
23-02-2003, 16:44
also soweit isch mein magerer quellcode und jetzt wollt ich mal allgemeine vorschläge was ich anders machen könnt und was der vorteil davon wäre.und vorallem warum das progie nicht wieder ins menu spring nach manüpunkt 4.


#include <stdio.h>
#include <errno.h>
main(){
int menu;
char ent;

/*errorcheckerbuffer*/
menu:

printf("\nvoktrain de0.4//kompiliert am 23022003");
printf("\n\n\n");
printf(" 1 vokabeln eingeben\n 2 vokabeln entfernen\n 3 vokabeln abfragen\n");
printf(" 4 informationen zu voktrainer");

/*errorcheckerbuffer*/

printf("\n\nbitte menuenummer eingeben (1-4): ");
scanf("%i",&menu);


/*errorcheckerbuffer*/



switch(menu)
{
case 1:
printf("menu=1");

break;


case 2:
printf("menu=2");

break;


case 3:
printf("menu=3");

break;


case 4:
printf("\n***************************************\n");
printf("+++++++++++++++++++++++++++++++++++++++\n");
printf("\n\n 4 INFORMATIONEN ZU VOKTRAINER\n");
printf("\nversion: 0.4 deutsch\n");
printf("Copyright (C) 2003 ***\n");
printf("\ndieses programm steht unter The GNU General Public License\n");
/*errorcheckerbuffer*/
printf("\ndieses programm soll einen einfachen vokabeltrainer darstellen.programmmiert wurde voktrainer, weil der author zu");

printf("faul war im inet einen ");
/*errorcheckerbuffer*/
printf("vorhanden vokabeltrainer fuer linuxunix");
/*errorcheckerbuffer*/
printf(" zu suchen und natuerlich auch wegen der freude und");
printf(" dem spass!\n");
/*errorcheckerbuffer*/
printf("\nkreative, weniger kreative vorschlaege, dumme und weniger dumme fragen, oder irgendwas anderes an hack-man@web.de ");
printf("schicken!\n");
printf("\nm und dann enter druecken um ins menue zurueckzukehren! ");
scanf("%s\n",&ent);
if (ent=='m'){
goto menu;
}


break;




}



printf("\n%s",strerror(errno));
printf("\n"); /*neue zeile am ende des programms (standart)*/
}

vielen dank im voraus

Boron
23-02-2003, 17:06
Tust du uns bitte den Gefallen und setzt das in die code-Flags :). Und auch bitte richtig einrücken, ja?
Wer soll denn das lesen können?

namous
23-02-2003, 17:25
ja erklär mal bitte wie

JoelH
23-02-2003, 17:44
naja durch lesen ;)

http://www.mrunix.de/forums/misc.php?action=bbcode#buttons

dieser Link steht unter hilfe immer dort zur verfügung wo du Postings erstellen kannst ;)

Wie auch immer, also wenn du in einem Programm mit GOTO kommst vergiss es, das Teil wird gnadenlos zerrupft. GOTO ist antiquiert in seiner Anwendung und in modernen Sprachen völlig unnütz.

anda_skoa
23-02-2003, 17:47
Original geschrieben von namous
ja erklär mal bitte wie

Artikel ändern klicken
Dann vor dem Code
[ code ]
nach dem Code
[ /code ]
(beidesmal ohne Leerzeichen zwischen Klammer und code)

Zwei Sachen, die mir aufgefallen sind.



int main

statt


main


Und wenn möglich keine goto benutzen.
Besser eine Schleife



do
{
}
while (ent == 'm');


Ciao,
_

namous
23-02-2003, 18:02
so also danke anda_skoa! und so besser? also ich soll statt main() --> int main() schreiben? und wie mach ich das am einfachsten mit der schleife?

micha
23-02-2003, 18:09
Hi namous,

eine Möglichkeit könnte so aussehen:



#include <stdio.h>
#include <stdlib.h>

int main (void)
{
int menu;

while (1)
{
printf ("\nvoktrain de0.4//kompiliert am 23022003");
printf ("\n\n\n");
printf (" 1 vokabeln eingeben\n 2 vokabeln entfernen\n 3 vokabeln abfragen\n");
printf (" 4 informationen zu voktrainer\n 5 beenden");
printf ("\n\nbitte menuenummer eingeben (1-5): ");
scanf ("%i", &menu);

switch (menu)
{
case 1:
printf ("menu=1\n");
break;
case 2:
printf ("menu=2\n");
break;
case 3:
printf ("menu=3\n");
break;
case 4:
printf ("\n***************************************\n");
printf ("+++++++++++++++++++++++++++++++++++++++\n");
printf ("\n\n 4 INFORMATIONEN ZU VOKTRAINER\n");
printf ("\nversion: 0.4 deutsch\n");
printf ("Copyright (C) 2003 ***\n");
printf ("\ndieses programm steht unter The GNU General Public License\n");
printf ("\ndieses programm soll einen einfachen vokabeltrainer darstellen.programmmiert wurde voktrainer, weil der author zu");
printf ("faul war im inet einen ");
printf ("vorhanden vokabeltrainer fuer linuxunix");
printf (" zu suchen und natuerlich auch wegen der freude und");
printf (" dem spass!\n");
printf ("\nkreative, weniger kreative vorschlaege, dumme und weniger dumme fragen, oder irgendwas anderes an hack-man@web.de ");
printf ("schicken!\n");
printf ("\nm und dann enter druecken um ins menue zurueckzukehren! \n");

while (getchar () != 'm')
;
break;
case 5:
return (0);
}
}
/*never reached*/
return (0);
}


Eine Funktion um den Bildschirm zu löschen wäre jetzt nicht schlecht, sonst wird das Ganze ein bischen unübersichtlich ;)
Beispiele gibts hier: http://www.mrunix.de/forums/showthread.php?s=&threadid=30975&highlight=ncurses

Gruß micha

namous
03-03-2003, 15:32
also hab weiter an dem quellcode gearbeitet sieht jetzt so aus:



#include <stdio.h>
#include <stdlib.h>


int main (void)
{
int menu;
char name[50],check,lang1[15],lang2[15];

while (1)
{
printf ("%c%c%c%c%c%c",27,'[','H',27,'[','J' ); /*(1)*/
printf ("\nvoktrain de0.4//kompiliert am 03002003");
printf ("\n\n\n");
printf (" 1 vokabelliste erstellen\n 2 vokabeln entfernen\n 3 vokabeln abfragen\n");
printf (" 4 informationen zu voktrainer\n 5 beenden");
printf ("\n\nbitte menuenummer eingeben (1-5): ");
scanf ("%i", &menu);

switch (menu)
{
case 1:
do {
printf ("%c%c%c%c%c%c",27,'[','H',27,'[','J' );
printf ("\n***************************************\n");
printf ("+++++++++++++++++++++++++++++++++++++++\n");
printf ("\n\n 1 VOKABELLISTE ERSTELLEN\n\n");
printf ("name der zu erstellenden vokabeldatei mit gesammtem pfad (max 50 zeichen): ");
scanf ("%s", &name);
printf ("\ndie vokabeldatei wird unter '%s' abgespeichert! einverstanden (j(a)/n(ein)/a(bbrechen)): ", name);
do{
scanf ("%s", &check);

}while (check != 'j' && check != 'n' && check != 'a');
}while (check != 'j' && check != 'a');

if (check == 'j'){
/*do {*/
printf ("benennen sie nun die sprachen (max. 15 zeichen):");
printf ("\nsprache 1: ");
fgets(lang2, sizeof(lang2), stdin); /*(2)*/
printf ("\nsprache 2:");
fgets(lang1, sizeof(lang1), stdin); /*(3)*/
printf ("\n\nsprache 1: %c und sprache 2: %C ! einverstanden (j(a)/n(ein)/a(bbrechen)): ", lang1, lang2);


while (getchar () != 'w');
}




else {}
break;
case 2:
printf ("menu=2\n");
break;
case 3:
printf ("menu=3\n");
break;
case 4:
printf("%c%c%c%c%c%c",27,'[','H',27,'[','J' );
printf ("\n***************************************\n");
printf ("+++++++++++++++++++++++++++++++++++++++\n");
printf ("\n\n 4 INFORMATIONEN ZU VOKTRAINER\n");
printf ("\nversion: 0.4 deutsch\n");
printf ("Copyright (C) 2003 ***\n");
printf ("\ndieses programm steht unter The GNU General Public License\n");
printf ("\ndieses programm soll einen einfachen vokabeltrainer darstellen.programmmiert wurde voktrainer, weil der author zu");
printf ("faul war im inet einen ");
printf ("vorhanden vokabeltrainer fuer linux/unix");
printf (" zu suchen und natuerlich auch wegen der freude und");
printf (" dem spass!\n");
printf ("\nkreative, weniger kreative vorschlaege, dumme und weniger dumme fragen, oder irgendwas anderes an hack-man@web.de ");
printf ("schicken!\n");
printf ("\nm und dann enter druecken um ins menue zurueckzukehren! \n");

while (getchar () != 'm')
;
break;
case 5:

return (0);
}
}
/*never reached*/
return (0);
printf("\n");
}


mein prob ist jetzt noch das er bei (2) die abfrage überspringt und und nur abfragen (3) bringt. und zum bildschirmlöschen hab ich (1) genommen, was man aber ja nicht nehmen soll, wie sieht das dann mit ncurse aus??

vielleicht was ja sonst noch jemand sachen die man verbessern könnt.

Danke

namous
06-03-2003, 15:09
hier war aber schon mal merh los oder?? hab noch nie so lang auf ne antwort gewartet oder hat einfach keiner bock mir zu antworten???

avuton
06-03-2003, 15:16
Goto Anweisungen sind sowieso eigentlich recht schlechter Programmierstil, an deiner Stelle würde ich dafür verschiedene Funktionen basteln, dann brauchst du auch kein goto.
Gruß Avuton

anda_skoa
06-03-2003, 16:00
Wenn du nur ein Zeichen lesen willst, solltest du scanf mit dem Formatstring %c benutzen.

Dein Abfrage 2 wird wahrscheinlich "übersprungen", weil dort das Newline von weiter oben (scanf) noch im Puffer ist.
Am besten dort auch mit fgets einen String mit der Länge 1 einlesen (einen char Array der Länge 2 anlegen)

Für die Terminalsteuerung kann man entweder ANSI Escape Sequnzen benutzen, wie du es ja gemacht hast, oder nocht portabler mit ncurses (dazu gibts schon Threads hier im Board)

Ciao,
_

namous
06-03-2003, 18:43
danke

@avuton: ja das hab ich mitbekommen aber ich hab doch keien mehr drinnen oder??? sorry wenn ich da was überseh


@anda_skoa: ja hab mir sowas in der richtung gedacht weil ich du experimentieren mitbekommen hab das ich der lang1 mit einem zeilenumbruch belegt isch, hab halt absolut keinen plan gehabt warum.bin halt (noch) net so der checker.

also danke und das forum leb doch noch und das ist gut so ;)

rosenstolz
07-03-2003, 11:44
hallo namous,

bei solchen problemen hab ich nen tipp, wenn du ihn nicht schon hast dann besorg die mal ddd (xddd). mit diesem debugger kann man sehr gut logische fehler ausfindig machen und gleichzeitig lernt man ne menge dazu.

mfg martin