Anzeige:
Ergebnis 1 bis 13 von 13

Thema: bitte mal den quellcode anschauen.

  1. #1
    Registrierter Benutzer
    Registriert seit
    09.07.2002
    Beiträge
    41

    bitte mal den quellcode anschauen.

    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.

    Code:
    #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
    Geändert von namous (23-02-2003 um 18:00 Uhr)

  2. #2
    Registrierter Benutzer Avatar von Boron
    Registriert seit
    07.01.2002
    Beiträge
    827
    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?
    Gruß Boron (der sich oft wegen mieser Rechtschreibung anderer die Augen reiben muss)

    LINUX IS LIKE AN INDIAN TENT: NO GATES, NO WINDOWS AND AN APACHE INSIDE!
    Hardware Monitoring unter Linux -> http://santafu.sourceforge.net (Temperaturen, Lüfterdrehzahlen und Spannungen)

  3. #3
    Registrierter Benutzer
    Registriert seit
    09.07.2002
    Beiträge
    41
    ja erklär mal bitte wie

  4. #4
    Registrierter Benutzer
    Registriert seit
    07.03.2001
    Ort
    FStone,D
    Beiträge
    186

    hmm,

    naja durch lesen

    http://www.mrunix.de/forums/misc.php...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.

  5. #5
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    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.

    Code:
    int main
    statt
    Code:
    main
    Und wenn möglich keine goto benutzen.
    Besser eine Schleife

    Code:
    do
    {
    }
    while (ent == 'm');
    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  6. #6
    Registrierter Benutzer
    Registriert seit
    09.07.2002
    Beiträge
    41
    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?

  7. #7
    Registrierter Benutzer
    Registriert seit
    25.12.1999
    Ort
    Stuttgart
    Beiträge
    259
    Hi namous,

    eine Möglichkeit könnte so aussehen:

    Code:
    #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/showthre...hlight=ncurses

    Gruß micha
    Geändert von micha (23-02-2003 um 18:14 Uhr)
    IRC: irc.euirc.net #tux

  8. #8
    Registrierter Benutzer
    Registriert seit
    09.07.2002
    Beiträge
    41
    also hab weiter an dem quellcode gearbeitet sieht jetzt so aus:

    Code:
    #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
    Geändert von namous (03-03-2003 um 15:36 Uhr)

  9. #9
    Registrierter Benutzer
    Registriert seit
    09.07.2002
    Beiträge
    41
    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???

  10. #10
    Registrierter Benutzer
    Registriert seit
    28.11.2002
    Beiträge
    86
    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

  11. #11
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    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,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  12. #12
    Registrierter Benutzer
    Registriert seit
    09.07.2002
    Beiträge
    41
    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

  13. #13
    Registrierter Benutzer
    Registriert seit
    12.12.2002
    Beiträge
    10

    ddd

    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

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •