myGully.com Boerse.SH - BOERSE.AM - BOERSE.IO - BOERSE.IM Boerse.BZ .TO Nachfolger
Zurück   myGully.com > Computer & Technik > Programmierung
Seite neu laden

[C] Hilfe bei Projekt

Willkommen

myGully

Links

Forum

 
Antwort
Themen-Optionen Ansicht
Ungelesen 19.01.14, 15:01   #1
PepTic
Anfänger
 
Registriert seit: Oct 2011
Beiträge: 5
Bedankt: 0
PepTic ist noch neu hier! | 0 Respekt Punkte
Standard [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!
PepTic ist offline   Mit Zitat antworten
Ungelesen 19.01.14, 15:05   #2
spartan-b292
Echter Freak
 
Benutzerbild von spartan-b292
 
Registriert seit: Mar 2010
Ort: /home/spartan-b292
Beiträge: 2.856
Bedankt: 1.701
spartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punkte
Standard

Guck dir die Fehlermeldungen deines Compilers an und arbeite sie Schritt für Schritt durch.
__________________
"They who can give up essential liberty to obtain a little temporary safety, deserve neither liberty nor safety"
spartan-b292 ist offline   Mit Zitat antworten
Ungelesen 19.01.14, 15:08   #3
PepTic
Anfänger
 
Registriert seit: Oct 2011
Beiträge: 5
Bedankt: 0
PepTic ist noch neu hier! | 0 Respekt Punkte
Standard

das ist das Problem, ich kann mit den Fehlermeldungen nichts anfangen...
PepTic ist offline   Mit Zitat antworten
Ungelesen 19.01.14, 15:14   #4
NetWebs
Banned
 
Registriert seit: Aug 2012
Beiträge: 223
Bedankt: 68
NetWebs ist noch neu hier! | 0 Respekt Punkte
Standard

Kannst du kein Englisch?
NetWebs ist offline   Mit Zitat antworten
Ungelesen 19.01.14, 15:15   #5
PepTic
Anfänger
 
Registriert seit: Oct 2011
Beiträge: 5
Bedankt: 0
PepTic ist noch neu hier! | 0 Respekt Punkte
Standard

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 anzeigen
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.
PepTic ist offline   Mit Zitat antworten
Ungelesen 20.01.14, 14:18   #6
Odatas
Erfahrenes Mitglied
 
Registriert seit: Nov 2011
Beiträge: 648
Bedankt: 326
Odatas ist unten durch! | -158 Respekt PunkteOdatas ist unten durch! | -158 Respekt Punkte
Standard

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 Mitglieder sichtbar. Bitte einloggen oder neu registrieren ] . Besonders der Abschnitt über Probleme erklärt das nochmal sehr gut.
Odatas ist offline   Mit Zitat antworten
Ungelesen 20.01.14, 17:08   #7
PepTic
Anfänger
 
Registriert seit: Oct 2011
Beiträge: 5
Bedankt: 0
PepTic ist noch neu hier! | 0 Respekt Punkte
Standard

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.
PepTic ist offline   Mit Zitat antworten
Antwort


Forumregeln
Du kannst keine neue Themen eröffnen
Du kannst keine Antworten verfassen
Du kannst keine Anhänge posten
Du kannst nicht deine Beiträge editieren

BB code is An
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.

Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:45 Uhr.


Sitemap

().