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


  • Mod

    • 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


  • Mod

    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?


  • Mod

    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"


  • Mod

    Du kannst auch immer gets_s nehmen, wo ist das Problem?

    gets_s = "-1"

    Ich weiß nicht, was du mir damit sagen möchtest.


Anmelden zum Antworten