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.