PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : probleme beim einlesen mit scanf



mxpower
10.06.2011, 14:13
das programm soll eine beliebige anzahl von kundenkonten erstellen und deren kontostand ausrechen und als positiv negativ oder ausgeglichen deklarieren, das problem ist dass sich "void rip" nicht richtig einlesen lässt somit kann ich auch meine nicht fertige main nicht testen, scanf und printf machen für mich unerklärliche zeilensprünge und printf gibt blockweise aus obwohl alles einzeln von hand eingegeben werden soll. am ende felt auch noch die printf's zum darstellen der kundenkonten aber diese sollten eigenlich kein problem darstellen. danke

[

#include"stdafx.h"
#include"stdio.h"


struct konto
{
char name:
char strasse:
char stadt;
int konto_nr;
float forderung;
float zahlung;
float kontostand;
}kunde[100];

void main()
{
int i,n;
void rip(int i);
void wop(int i)
printf("anzahl der zu erstellenden konten eingeben\n");
scanf("%d",&n);

for(i=0;i<n;++i)
{
if(kunde[i].zahlung>0)
kunde[i].kontostand=kunde[i].forderung-kunde[i].zahlung;
else
kunde[i].kontostand=inkasso;
};
for(i=0;i<n;++i)
wop(i);
}
void rip(int i)
{
printf("kundennummer %d\n", i+1);
printf("name");
scanf("%s\n",&kunde[i].name);
printf("strasse?");
scanf("%s\n",&kunde[i].strasse);
printf("stadt");
scanf("%s\n",&kunde[i].stadt);
printf("kontonummer?");
scanf("%d\n",&kunde[i].konto_nr);
printf("forderung");
scanf("%f\n",&kunde[i].forderung);
printf("zahlung");
scanf("%f\n",&kunde[i].zahlung);
return;
}

SprinterSB
10.06.2011, 17:30
konto.name, .strasse und .stadt bestehen aus einem /einzigen/ Zeichen. Wenn scanf mehr als ein Zeichen einliest -- dazu gehört schon auch die abschliessende '\0' des Strings -- überschreibst du alle Datan, die dahinter im Speicher stehen. Ergo: gnügend Platz für die Strings bereithalten! Sonst bekommst du einen klassichen Budder Overflow!

mxpower
10.06.2011, 19:34
danke für die antwort. meinst du in etwa so? so hab ich immer noch die probleme es sei den nich hab dich falsch verstanden.


#include "stdafx.h"
#include "stdio.h"




char name[50],stadt[50],strasse[50];
int konto_nr[10];
float forderung[50], zahlung[50],kontostand[50];
int main()




{ printf("name\n");
scanf_s("%s\n", &name);

printf("stadt\n");
scanf_s("%s", &stadt);

printf("strasse\n");
scanf_s("%s",&strasse);

printf("kontonr\n");
scanf_s("%d",&konto_nr);

printf("forderung\n");
scanf_s("%f", &forderung);

printf("zahlung\n");
scanf_s("%f",&zahlung);

printf("kontostand\n");
scanf_s("%f",&kontostand);





}

DrGuenter
10.06.2011, 21:19
Hallo,

in C ist jedes Array implizit auch ein pointer, d.h. beim scanf darf dann KEIN weiterer & stehen, das bedeutet was anderes...

char buffer [100];
scanf(buffer,"%s",buffer);

müsste reichen

DrGünter