Willkommen |
|
myGully |
|
Links |
|
Forum |
|
|
|
 |
19.01.14, 15:01
|
#1
|
Anfänger
Registriert seit: Oct 2011
Beiträge: 5
Bedankt: 0
|
[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!
|
|
|
19.01.14, 15:05
|
#2
|
Echter Freak
Registriert seit: Mar 2010
Ort: /home/spartan-b292
Beiträge: 2.856
Bedankt: 1.701
|
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"
|
|
|
19.01.14, 15:08
|
#3
|
Anfänger
Registriert seit: Oct 2011
Beiträge: 5
Bedankt: 0
|
das ist das Problem, ich kann mit den Fehlermeldungen nichts anfangen...
|
|
|
19.01.14, 15:14
|
#4
|
Banned
Registriert seit: Aug 2012
Beiträge: 223
Bedankt: 68
|
Kannst du kein Englisch?
|
|
|
19.01.14, 15:15
|
#5
|
Anfänger
Registriert seit: Oct 2011
Beiträge: 5
Bedankt: 0
|
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
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.
|
|
|
20.01.14, 14:18
|
#6
|
Erfahrenes Mitglied
Registriert seit: Nov 2011
Beiträge: 648
Bedankt: 326
|
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;
|
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.
|
|
|
20.01.14, 17:08
|
#7
|
Anfänger
Registriert seit: Oct 2011
Beiträge: 5
Bedankt: 0
|
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.
|
|
|
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
HTML-Code ist Aus.
|
|
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:45 Uhr.
().
|