Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Konsolenprogramm

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
16.08.2008, 17:20 Uhr
~petecoolbelab
Gast


Hi @ all,

Ich lerne gerade C und hab mal ein Lagerverwaltungsprogramm eines Buches erweitert. Compilieren lässt sich das Ganze, doch wenn ich dann das Datum des Tages eingeben will, kommt ein runtime Fehler. Vielleicht könnt ihr mir helfen.

Hier ist mein Code:


Code:
/*Strukturbeispiel zur Lagerverwaltung*/

#include<stdio.h>
#include<string.h>


struct datum
{
    int Tag;
    int Monat;
    int Jahr;
};

struct lagerverwaltung
{
    long art_nummer;
    char artikelname[100];
    int anz_artikel;
    struct datum artikeleingang;
};


int count = 0;
int lcount = 0;

int main()
{

    int abfrage, nummer;

    struct lagerverwaltung artikel[100];


    do{
        printf("\nLagerverwaltung\n\n");
        printf("<1> Neuen Artikel eingeben\n");
        printf("<2> Artikel anzeigen\n");
        printf("<3> Ende\n\n");
        printf("Ihre Eingabe: < >\b\b");
        scanf("%d",&abfrage);
        fflush(stdin);

        switch(abfrage)
        {
            case 1:artikel[count].art_nummer=count;
                   printf("Artikelbezeichnung: ");
                   fgets(artikel[count].artikelname, 100, stdin);
                   printf("Anzahl der Artikel: ");
                   scanf("%d", &artikel[count].anz_artikel);
                   printf("\nDatum:    Tag: ");
                   scanf("%d",artikel[lcount].artikeleingang.Tag);
                   printf("\n        Monat: ");
                   scanf("%d",artikel[lcount].artikeleingang.Monat);
                   printf("\n         Jahr: ");
                   scanf("%d",artikel[lcount].artikeleingang.Jahr);
                   fflush(stdin);
                   printf("\nDaten wurden aufgenommen.\n");
                   printf("Artikelnummer lautet: %d\n\n",count);
                   count++;
            break;

               case 2:printf("\nDie Artikelnummer lautet: ");
                   scanf("%d",&nummer);
                   if( (nummer>count) || (nummer<0))
                   printf("Kein Eintrag gefunden.\n\n");
                   else
                      {
                         printf("\n\nArtikelnummer lautet: %ld\n", artikel[nummer].art_nummer);
                         printf("Es handelt sich um den Artikel: %s\n", artikel[nummer].artikelname);
                         printf("\nNoch lagernde Anzahl: %d\n", artikel[nummer].anz_artikel);

                    }
            break;

            default:break;


       }
     }while(abfrage != 3);


    return 0;
}
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
16.08.2008, 18:17 Uhr
CppProgrammer



Das liegt daran, dass du gleich an drei Stellen im Code beim Einlesen eines Wertes mithilfe von scanf den &-Operator vergessen hast.

Hier die korrigierte Version:


C++:
/*Strukturbeispiel zur Lagerverwaltung*/

#include<stdio.h>
#include<string.h>


struct datum
{
    int Tag;
    int Monat;
    int Jahr;
};

struct lagerverwaltung
{
    long art_nummer;
    char artikelname[100];
    int anz_artikel;
    struct datum artikeleingang;
};


int count = 0;
int lcount = 0;

int main()
{

    int abfrage, nummer;

    struct lagerverwaltung artikel[100];


    do{
        printf("\nLagerverwaltung\n\n");
        printf("<1> Neuen Artikel eingeben\n");
        printf("<2> Artikel anzeigen\n");
        printf("<3> Ende\n\n");
        printf("Ihre Eingabe: < >\b\b");
        scanf("%d",&abfrage);
        fflush(stdin);

        switch(abfrage)
        {
        case 1:artikel[count].art_nummer=count;
            printf("Artikelbezeichnung: ");
            fgets(artikel[count].artikelname, 100, stdin);
            printf("Anzahl der Artikel: ");
            scanf("%d", &artikel[count].anz_artikel);
            printf("\nDatum:    Tag: ");
            scanf("%d", &artikel[lcount].artikeleingang.Tag); // '&' vergessen
            printf("\n        Monat: ");
            scanf("%d", &artikel[lcount].artikeleingang.Monat); // '&' vergessen
            printf("\n         Jahr: ");
            scanf("%d", &artikel[lcount].artikeleingang.Jahr); // '&' vergessen
            fflush(stdin);
            printf("\nDaten wurden aufgenommen.\n");
            printf("Artikelnummer lautet: %d\n\n",count);
            count++;
            break;

        case 2:printf("\nDie Artikelnummer lautet: ");
            scanf("%d",&nummer);
            if( (nummer>count) || (nummer<0))
                printf("Kein Eintrag gefunden.\n\n");
            else
            {
                printf("\n\nArtikelnummer lautet: %ld\n", artikel[nummer].art_nummer);
                printf("Es handelt sich um den Artikel: %s\n", artikel[nummer].artikelname);
                printf("\nNoch lagernde Anzahl: %d\n", artikel[nummer].anz_artikel);

            }
            break;

        default:break;


        }
    }while(abfrage != 3);


    return 0;
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
16.08.2008, 19:01 Uhr
Kest
saint


Hi!

Das Verhalten von >fflush(stdin);< ist laut Standard undefiniert. Also benutz es nicht. Lieber 'ne Funktion der Art basteln:

C++:
inline void flush_stdin(void){ int c; while((c = getchar()) != EOF && c != '\n'); }
//...
flush_stdin(); //alles bis zum nächsten '\n' überlesen

--
Wenn man einen Hufschlag hört, sollte man >Pferd< denken und nicht >Zebra<.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
16.08.2008, 21:54 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Hi,

laut standard ist es undefiniert, unter Windows (== Visual Studio!!!) ist es als leeren des Eingabepuffers definiert.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: