myGully.com

myGully.com (https://mygully.com/index.php)
-   Programmierung (https://mygully.com/forumdisplay.php?f=67)
-   -   [C] Hilfe bei Projekt (https://mygully.com/showthread.php?t=3172131)

PepTic 19.01.14 15:01

[C] Hilfe bei Projekt
 
Hallo erstmal!

Ich muss ein Kontoprogramm erstellen, dies hab ich auch soweit geschafft, aber da ich mehr und mehr auf Fehler gestoßen bin und rumgebastelt habe, hab ich mir den Code ziemlich versaut...

Ich komme einfach nicht weiter, da ich nicht weiß wie ich die Fehler behebe.

Wäre nett wenn mir Jemand helfen könnte

main.c
Code:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "konto.h"
#include <conio.h>
int main(void)
{
        konto konten;
    int auswahl;
        int IDZaehler = 100;
    float guthaben;
   
        do
    {
                printf("-----------------------------------KONTOFUEHRUNG--------------------------------\n");
                printf("Herzlich Willkommen \n");
                printf("------------------- \n\n");
        printf("1) Konto erstellen\n");
        printf("2) Konto anzeigen\n");
        printf("3) Konto loeschen\n");
        printf("4) Ueberweisung\n");
        printf("0) Beenden\n\n");
                printf("------------------- \n");
        printf("Auswahl: ");
                scanf("%i", &auswahl);
               
       
                switch(auswahl)
        {
            case 0:
                                speichere_konto(&konten);
                return 0;
                break;
            case 1:
                erstelle_konto(&konten);
                IDZaehler++;
                break;
            case 2:
                printf("Geben sie die Kontonummer ein: ");
                                scanf("%d", &konten.kontonummer);
                zeige_konto(&konten);
                break;
            case 3:
                printf("Geben sie die Kontonummer ein: ");
                                scanf("%d", &konten.kontonummer);
                loesche_konto(&konten);
                                printf("Konto wurde geloescht\n");
                break;
            case 4:
                printf("Geben sie die Kontonummer ein, von der abgebucht werden soll: ");
                                scanf("%d", &konten.kontonummer);
                printf("Geben sie die Kontonummer ein, an die ueberwiesen werden soll: ");
                                scanf("%d", &konten.kontonummer);
                printf("Geben sie den Betrag ein, der ueberwiesen werden soll: ");
                                scanf("%f", &guthaben);
                ueberweisung(guthaben);
                break;
            default:
                break;
        }
                printf("Druecken Sie eine beliebige Taste um vorzufahren");
                getch();
                system("cls");
    } while(auswahl);
                return;
}

void erstelle_konto()
{
        printf("\n\nVorname:    ");
        scanf("%s", &konten->vorname);
    printf("Nachname:    ");
        scanf("%s", &konten->nachname);
    printf("Kontostand:  ");
        scanf("%f", &konten->kontostand);
    printf("Kontonummer: %d\n", &konten->kontonummer);
    printf("Konto wurde erstellt!\n\n\n");
       
}

void loesche_konto() //man kann nichtvorhandene konten löschen
{
    strcpy(konten->vorname, "");
    strcpy(konten->nachname, "");
    konten->kontostand = 0;
}

void zeige_konto()
{
    if(strlen(konten->vorname) == 0 || strlen(konten->nachname) == 0)
        {
        printf("\n\nDieses Konto existiert nicht!\n\n\n");
    }
    else
    {
        printf("\n\nVorname:    %s\n", konten->vorname);
        printf("Nachname:    %s\n", konten->nachname);
        printf("Kontostand:  %.2f\n", konten->kontostand);
        printf("Kontonummer: %d\n\n\n", konten->kontonummer);
    }
}

void speichere_konto()
{
       
        FILE *datei;
    datei = fopen("Konten.txt", "a+");
       
        if(datei == NULL)
        {
                printf("\nFEHLER BEIM SPEICHERN");
        }

        else
        {
                fprintf(datei, "Kontonummer: %d\nVorname:    %s\nNachname:    %s\nKontostand:  %.2f\n\n", konten->kontonummer, konten->vorname, konten->nachname, konten->kontostand);
        }
    fclose(datei);
}

void ueberweisung(float guthaben)
{
       

    if(konten->kontostand - guthaben < 0)
    {
        printf("\n\nNicht genug Guthaben!\n\n");
    }
    else
    {
        konten->kontostand = konten->kontostand - guthaben;
        konten->kontostand = konten->kontostand + guthaben;
        printf("\n\nUeberweisung erfolgreich!\n\n");
    }
}

konto.h
Code:

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



struct konto
{
    char vorname[20];
    char nachname[20];
    double kontostand;
    int kontonummer;
}konten[1000];
typedef struct konto konto;

void erstelle_konto();
void loesche_konto();
void zeige_konto();
void speichere_konto();
void ueberweisung(float);

Schonmal vielen Dank für die Hilfe!

spartan-b292 19.01.14 15:05

Guck dir die Fehlermeldungen deines Compilers an und arbeite sie Schritt für Schritt durch.

PepTic 19.01.14 15:08

das ist das Problem, ich kann mit den Fehlermeldungen nichts anfangen...

NetWebs 19.01.14 15:14

Kannst du kein Englisch?

PepTic 19.01.14 15:15

Die lokale Deklaration von "konten" blendet die frühere Deklaration in Zeile "13" von konto.h" aus.
main.c zeile 8

Der Rückgabewert wird ignoriert: "scanf" zeile 71
Der 2-Parameter im Aufruf von "scanf" muss die Adresse der Zeichenfolge sein. zeile 71

wie gesagt, das Problem ist, dass ich einges "verbaut" habe...

Zitat:

Zitat von NetWebs (Beitrag 25231599)
Kannst du kein Englisch?


C ist das Problem, nutze Visual Studio (Deutsch)

Hab den Code nochmal überarbeitet:

Code:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "konto.h"
#include <conio.h>
int main()
{
    int auswahl;
        int IDZaehler = 100;
        int kontoID;
        int kontoID2;
    double guthaben;
   
        do
    {
                printf("-----------------------------------KONTOFUEHRUNG--------------------------------\n");
                printf("Herzlich Willkommen \n");
                printf("------------------- \n\n");
        printf("1) Konto erstellen\n");
        printf("2) Konto anzeigen\n");
        printf("3) Konto loeschen\n");
        printf("4) Ueberweisung\n");
        printf("0) Beenden\n\n");
                printf("------------------- \n");
        printf("Auswahl: ");
                scanf("%i", &auswahl);
               
       
                switch(auswahl)
        {
            case 0:
                                speichere_konto(kontoID);
                return 0;
                break;
            case 1:
                erstelle_konto(IDZaehler);
                IDZaehler++;
                break;
            case 2:
                printf("Geben sie die Kontonummer ein: ");
                                scanf("%d", &kontoID);
                zeige_konto(kontoID);
                break;
            case 3:
                printf("Geben sie die Kontonummer ein: ");
                                scanf("%d", &kontoID);
                loesche_konto(kontoID);
                                printf("Konto wurde geloescht\n");
                break;
            case 4:
                printf("Geben sie die Kontonummer ein, von der abgebucht werden soll: ");
                                scanf("%d", &kontoID);
                printf("Geben sie die Kontonummer ein, an die ueberwiesen werden soll: ");
                                scanf("%d", &kontoID2);
                printf("Geben sie den Betrag ein, der ueberwiesen werden soll: ");
                                scanf("%f", &guthaben);
                ueberweisung(kontoID, kontoID2, guthaben);
                break;
            default:
                break;
        }
                printf("Druecken Sie eine beliebige Taste um vorzufahren");
                getch();
                system("cls");
    } while(auswahl);
                return;
}

void erstelle_konto(int ID)
{
       
        printf("\n\nVorname:    ");
        scanf("%s", konten[ID].vorname);
    printf("Nachname:    ");
        scanf("%s", konten[ID].nachname);
    printf("Kontostand:  ");
        scanf("%f", &konten[ID].kontostand);
    printf("Kontonummer: %d\n", ID);
        konten[ID].kontonummer = ID;
    printf("Konto wurde erstellt!\n\n\n");
       
}

void loesche_konto(int ID) //man kann nichtvorhandene konten löschen
{
    strcpy(konten[ID].vorname, "");
    strcpy(konten[ID].nachname, "");
    konten[ID].kontostand = 0;
}

void zeige_konto(int ID)
{
    if(strlen(konten->vorname) == 0 || strlen(konten->nachname) == 0)
        {
        printf("\n\nDieses Konto existiert nicht!\n\n\n");
    }
    else
    {
        printf("\n\nVorname:    %s\n", konten[ID].vorname);
        printf("Nachname:    %s\n", konten[ID].nachname);
        printf("Kontostand:  %.2f\n", konten[ID].kontostand);
        printf("Kontonummer: %d\n\n\n", konten[ID].kontonummer);
    }
}

void speichere_konto(int ID)
{
       
        FILE *datei;
    datei = fopen("Konten.txt", "a+");
       
        if(datei == NULL)
               
        {
                printf("\nFEHLER BEIM SPEICHERN");
                return;
        }

        else
        {
                fprintf(datei, "Kontonummer: %d\nVorname:    %s\nNachname:    %s\nKontostand:  %.2f\n\n", konten[ID].kontonummer, konten[ID].vorname, konten[ID].nachname, konten[ID].kontostand);
        }
    fclose(datei);
       
}

void ueberweisung(int vonID, int zuID, double guthaben)
{
       

    if(konten->kontostand - guthaben < 0)
    {
        printf("\n\nNicht genug Guthaben!\n\n");
    }
    else
    {
        konten[vonID].kontostand = konten[vonID].kontostand - guthaben;
        konten[zuID].kontostand = konten[zuID].kontostand + guthaben;
        printf("\n\nUeberweisung erfolgreich!\n\n");
    }
}

Code:

struct konto
{
    char vorname[20];
    char nachname[20];
    double kontostand;
    int kontonummer;
}konten[1000];
typedef struct konto konto;

void erstelle_konto(int);
void loesche_konto(int);
void zeige_konto(int);
void speichere_konto(int);
void ueberweisung(int, int, double);

Wenn ich jetzt Konto anzeigen auswähle, sagt er mir es existiert nicht.
in die Datei wird es aber geschrieben, nur der Kontostand ist 0.00

bekomme außerdem diesen Compilerfehler:
Nicht initialisierter Speicher "kontoID" wird verwendet.: Lines: 8, 9, 10, 11, 12, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 29, 31, 32

und

Die möglicherweise nicht initialisierte lokale Variable "kontoID" wurde verwendet.

Odatas 20.01.14 14:18

Also zuerst einmal hast du deine Variablen nicht initialisiert.

Zitat:

int auswahl;
int IDZaehler = 100;
int kontoID;
int kontoID2;
double guthaben;
Auch wenn du nur reinschreibst ist es kein guter Style Variablen nicht zu initialisieren. Das kann außerdem auch zu komischen Problemem führen.

Zitat:

int auswahl=0;
int IDZaehler = 100;
int kontoID=0;
int kontoID2=0;
double guthaben=0;
Zitat:

scanf("%i", &auswahl);
Warum %i und nicht %d?


Außerdem nutzt du die Funktion scanf. Von der Nutzung dieser Funktion rate ich immer ab. Scanf schaut nicht ob das was du eingibst überhaupt da rein passt wo du es eingeben willst. Heißt also dass du etwas eingibst und wenn es zu groß ist wird es im Puffer gespeichert. Wenn das nächste Scanf kommt wird automatisch das was im Puffer steht da rein geschrieben.

Noch dümmer ist das wenn du eine einzige Zahl eingibst z.b 3 und dann Enter drückst, wird das Enter im Puffer gespeichert und dein nächstes scanf bleibt einfach leer.

Anfänger die trozdem mit scanf arbeiten wollen (Was ich nicht verübeln kann weil die Funktion sehr einfach zu nutzen ist) müssen nach jedem scanf ein fflush(stdin); einfügen damit der Tastaturpuffer geleert wird.


Zu scanf gerne auch hier lesen [Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...] . Besonders der Abschnitt über Probleme erklärt das nochmal sehr gut.

PepTic 20.01.14 17:08

Also deine Punke habe ich umgesetzt, aber wie löse ich das Problem mit dem Rückgabewert von scanf?

Und wieso hab ich keinen Zugriff auf das erstellte Konto?

edit:
Jetzt passt soweit alles, nur möchte ich, dass ich zu Beginn des Programms auf den Inhalt der Datei zugreifen und ihn verwenden kann.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:41 Uhr.

Powered by vBulletin® (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.