Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Daten in ein Struct einlesen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 <
010
21.10.2004, 17:28 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


@FLo
jo das hab ich in post03 auch schon geschrieben....
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
21.10.2004, 18:44 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


jo nur "für mich" war das etwas kryptisch drin gestanden
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
22.10.2004, 11:10 Uhr
~modo_c_noob
Gast


Vielen vielen Dank für die vielen Hilfen!
Ich habe es jetzt so gelöst, dass ich direkt in das Struct einlese und die Pointer habe ich raus geschmissen!

Funktioniert auch alles relativ gut, nur sobald ich nicht in ein char, sondern ich ein int einlese bekomme ich folgende Fehlermeldung:

Struct1_3.exe - Fehler in Anwendung

Die Anweisung in "0x00402aa8" verweist auf Speicher in "0xcccccccc". Der
Vorgang "written" konnte nicht auf dem Speicher durchgeführt werden.

Wie kann ich diesen Fehler beheben???
Wäre für jede Hilfe dankbar!!!

Mein Code sieht folgendermaßen aus:


C++:
# include <stdio.h>
# include <stdlib.h>

struct kontaktdaten
{
    char name[40];
    char vorname[40];
    char strasse[60];
    int hausnummer;
    int plz;
    char ort[20];
    int telefon;
    int handy;
    char email[40];
};

void eingabe(struct kontaktdaten *daten1);
void ausgabe(struct kontaktdaten *daten1);


void main()
{

  struct kontaktdaten daten;
  eingabe (&daten);  
  ausgabe (&daten);


}

void eingabe (struct kontaktdaten *daten1)
{
  if(!daten1) return;


printf("Bitte Nachname eingeben\n");
scanf ("%s",daten1->name);

printf("Bitte Vorname eingeben\n");
scanf ("%s",daten1->vorname);

printf("Bitte Strasse eingeben\n");
scanf ("%s",daten1->strasse);

printf("Bitte Hausnummer eingeben\n");
scanf ("%d",daten1->hausnummer);

printf("Bitte Postleitzahl eingeben\n");
scanf ("%d",daten1->plz);

printf("Bitte Telefon-Nummer eingeben\n");
scanf ("%d",daten1->telefon);

printf("Bitte Handy-Nummer eingeben\n");
scanf ("%d",daten1->handy);

printf("Bitte E-Mail-Adresse eingeben\n");
scanf ("%s",daten1->email);
printf("\n\n");

}

void ausgabe (struct kontaktdaten *daten1)
{
  if(!daten1) return;

printf ("Name: %s\nVorname: %s\nStrasse: %s\nHausnummer: %d\nPLZ: %d\nOrt: %s\nTel.: %d\nHandy: %d\nE-Mail: %s",
         daten1->name,daten1->vorname,daten1->strasse,daten1->hausnummer,
         daten1->plz,daten1->ort,daten1->telefon,daten1->handy,daten1->email);
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
22.10.2004, 11:29 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


du musst beim einlesen die adresse der stelle übergeben an der eingelesen werden soll...
im falle eines char-arrays ist der name dieses arrays schon ein pointer deswegen übergibst du den variablennamen selbst...
wenn du z.b. dein integer einlesen willst musst du die adresse der scanffunktion mitteilen...


C++:
scanf ("%d",&daten1->plz);




das liegt daran das innerhalb von scanf mit einer kopie des von dir übergebenen parameters gearbeitet wird... diese existiert nur innerhalb der scanffunktion... würdest du direkt in die kopie einlesen wäre das ja nach durchlauf verloren... wenn du aber mit einer kopie der adresse arbeitest kann die danach ja ruhig gelöscht werden weil scanf den inhalt ja an den gewünschten ort geschrieben hat
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
22.10.2004, 11:36 Uhr
(un)wissender
Niveauwart


@modo_c_noob
Prinzipiell funktioniert das so (bis auf scanf -> siehe Windalf), dir sollte aber klar sein, das dein Programm sehr unsicher ist. Was wenn einer einen Namen größer als 40 Zeichen eingibt?
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
22.10.2004, 11:47 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


was (un)wissender dir sagen wollte ist das du entweder was anderes als scanf verwenden sollst oder ich glaub du kannst scanf auch sagen wieviele zeichen er maximal einlesen soll...

aus dem hut war das glaube ich so aber nicht steinigen wenn das nicht stimmt

C++:
scanf ("%39s",daten1->strasse);


--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
22.10.2004, 12:22 Uhr
(un)wissender
Niveauwart


Danke an meinen mitdenkenden Übersetzer.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
017
22.10.2004, 13:52 Uhr
0xdeadbeef
Gott
(Operator)


Ich denke, dass an der Stelle im Zweifel sowieso eher

C++:
fgets(daten1->strasse, 40, stdin);


gemeint ist. Ach, und übrigens -

C++:
void main()


ist Schwachfug. Gültigerweise müsste deine main-Funktion so aussehen:

C++:
int main(void) /* Gültige Signatur, Rückgabe int, keine Parameter */
{
  struct kontaktdaten daten;
  eingabe (&daten);  
  ausgabe (&daten);

  return 0; /* 0 an die Shell zurückgeben - konventionell bedeutet das "alles ok" */
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: