Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Struktur

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 <
000
27.04.2008, 14:10 Uhr
~orlando00
Gast


Hallo,


Das Programm hat ein Fehler und zwar wird bei der Eingabe Das Eingabe Feld Ort übersprungen.


Ich verstehe nicht warum es überpsrungen wird.. Wisst ihr vielleicht woran es liegt?



C++:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define MAX 30
struct adres{
    char vname[MAX];
    char nname[30];
    long plz;
    char ort[30];
    int geburtsjahr;
}adressen;

void ausgabe(struct adres x)
{

   printf("\n\nSie gaben ein:\n\n");
   printf("Vorname.........:%s",   x.vname);
   printf("Nachname........:%s",   x.nname);
   printf("Postleitzahl....:%ld\n",x.plz);
   printf("Ort.............:%s",   x.ort);
   printf("Geburtsjahr.....:%d\n", x.geburtsjahr);


}
int main()

{
    printf("\nVorname            :");
    fgets(adressen.vname,MAX,stdin);
    printf("\nNachname            :");
    fgets(adressen.nname,30,stdin);
    printf("\nPostleitzahl        :");
    scanf("%ld",&adressen.plz,stdin);
    printf("\nOrt                :");
    fgets(adressen.ort,30,stdin);
    printf("\nGeburtsjahr            :");
    scanf("%4ld",&adressen.geburtsjahr,stdin);

ausgabe(adressen);

}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
27.04.2008, 15:39 Uhr
Hans
Library Walker
(Operator)


Hi,

wahrscheinlich ist da noch ein '\n' in stdin, das scanf dann für die Eingabe des Ortes hält...
Das Problem kommt öfter mal vor, bemüh mal die Suchfunktion, Stichwort Eingabepuffer, oder ähnliches.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
27.04.2008, 23:36 Uhr
0xdeadbeef
Gott
(Operator)


Wenn der Benutzer in der Konsole z.B. 123<return> eingibt, befinden sich im Eingabepuffer danach die Zeichen "123\n" - scanf("%d", &n); liest "123" aus dem Eingabepuffer, übrig bleibt "\n", und wenn danach fgets aufgerufen wird, liest das bis zum nächsten "\n", was in diesem Fall auf eine leere Zeile hinausläuft. Gibt der Benutzer stattdessen z.B. "123 abc<return>" ein, liest fgets danach " abc\n" aus dem Puffer.

Es ist in diesem Zusammenhang sinnvoll, die Benutzereingaben zeilenweise zu verarbeiten, weil der Benutzer auch in Zeilen denkt. Das heißt, zum Einlesen einer Zahl:

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

int main() {
  char zeile[100];
  int n;
  char s[100];

  printf("Zahl eingeben: ");
  fflush(stdout);
  fgets(zeile, 100, stdin); /* Zeile einlesen */
  sscanf(zeile, "%d", &n); /* Zahl aus der Zeile parsen */

  printf("String eingeben: ");
  fflush(stdout);
  /* kein Problem hier, weil keine Zeichen im Eingabepuffer übrig sind. */
  fgets(s, 100, stdin);
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
01.05.2008, 11:41 Uhr
~orlandoooo
Gast


Danke ...


Ich hab ein 2 -tes.. Problem... Ich finde nicht den Fehler bei dem Programm .. und mit dem Fehlermeldungen kann ich nichts anfangen..





C++:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX 25


void output (struct daten x)
{
    printf("%s",x.name);
    printf("%i",x.alter);
}

int main(void) {

    struct daten {
    char name[MAX];
    int alter;
    } adressen;


    printf("\nName:");
    fgets(adressen.name,MAX,stdin);
    printf("\nAlter:");
    scanf("%i",&adressen.alter);

    output(adressen);
}





Was mache ich hier falsch?

Lg
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
01.05.2008, 11:46 Uhr
Suba Esel



Das "struct daten {char name" usw muss außerhalb von main stehen.
--
Simon
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
01.05.2008, 14:16 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


muss es nicht, nur ist es sonst eben nur in main bekannt und nicht in der funktion oben drüber
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ 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: