vs2015 gets und gets_s
-
pkt.cpp #include"pkt.h" #include<stdio.h> #define I_EINGABE(a,b) printf("\t%s: ", (a)); scanf("%i", &(b));fflush(stdin) #define S_EINGABE(a,b) printf("\t%s: ", (a)); gets_s(b);fflush(stdin) #define AFMT "\t%s\t%s\n" ADR ScanADR() { ADR A; puts("Adresseingabe:"); S_EINGABE("Name", A.Name); S_EINGABE("Vorname", A.Vorname); S_EINGABE("Strasse", A.Strasse); S_EINGABE("Hausnummer", A.Nummer); I_EINGABE("Postleitzahl", A.PLZ); S_EINGABE("Ort", A.Ort); printf("\n"); return A; } void PrintADR(ADR A) { printf(AFMT, A.Vorname, A.Name); printf(AFMT, A.Strasse, A.Nummer); printf("\t%i\t%s\n\n", A.PLZ, A.Ort); }
pkt.h
struct adresse { char Name[20]; char Vorname[20]; char Strasse[40]; char Nummer[10]; int PLZ; char Ort[40]; }; typedef struct adresse ADR; ADR ScanADR(); void PrintADR(ADR A);
quelle.cpp
#include"pkt.h" #include<stdio.h> void main() { ADR x; x = ScanADR; PrintADR(x); }
habe Problem mit scan von zahlen. Wenn ich "PLZ" eingebe, dann springt direkt zum Ende. Komme nicht an eingabe von "ORT"
benutze VS 2015
-
- Funktionsmakros sein lassen.
- Nicht scanf und gets mischen, außer man weiß, wie es richtig geht.
- Postleitzahlen sind sowieso keine Integer, sondern Ziffernfolgen.
- fflush(stdin) ist Schrott.
- Wenn man schon die _s-Funktionen benutzt, dann sollte man auch wissen, wie sie aufzurufen sind. Das sollte aber bloß nicht als Aufforderung verstanden werden, gets zu nutzen.
- void main ist falsch.
- Sauber und konsistent einrücken.
Kann gut sein, dass dein Problem nochmals irgendwo anders liegt, so vieles ist nicht gut in dem Programm.
-
ich habe mit Prof. zusammen programmiert. er nutzt "vs2010" dort c11 kann er gets nutzen. VS2015 gibts kein gets mehr sondern gets_s
-
Das ist ja auch gut so. Nutze niemals gets! Aber lies noch einmal meine Antwort genau, was ich dazu gesagt habe.
-
SeppJ schrieb:
[*]Nicht scanf und gets mischen, außer man weiß, wie es richtig geht
Muss ich nochmal zeigen, wie man sowas crasht?
-
EOP schrieb:
SeppJ schrieb:
[*]Nicht scanf und gets mischen, außer man weiß, wie es richtig geht
Muss ich nochmal zeigen, wie man sowas crasht?
Ich glaube, du redest von was anderem.
-
hab jetzt mit "scanf" umgeändert. Aber irgendwie soll doch auch mit "gets_s" funktionieren.
gets_s = "-1"
-
Du kannst auch immer gets_s nehmen, wo ist das Problem?
gets_s = "-1"
Ich weiß nicht, was du mir damit sagen möchtest.