Schlagen Sie eine alternative für gets () - Funktion, mit gcc-compiler

Versucht, die Eingabe mehr als einen einzigen string in meinem Programm Zeichenfolgen-array, für die verwendet werden :

scanf("%80[^\r\n]", strings[i]);

fgets(string[i], MAXLEN, stdin);

eine maßgeschneiderte Funktion wurde auch verwendet:

int getString(char s[]) {

    char ch;
    int i=0;

    while( (ch = getchar()) != '\n'   &&   ch != EOF ) {
        s[i] = ch;
        ++i;
    }

    s[i] = '\0';

    fflush(stdin);

    return i;
}

aber nicht in der Lage eine Eingabe mit mehr als einem string-jeweils inklusive Leerzeichen

Funktion gets() verwendet, um die Arbeit früher für mich, aber da es veraltet ist, keine alternative gefunden werden kann

Dies ist, wo es verwendet wurde :

int getString(char s[]) {

char ch;
int i=0;

while( (ch = getchar()) != '\n'   &&   ch != EOF ) {
    s[i] = ch;
    ++i;
}

s[i] = '\0';

fflush(stdin);

return i;
}


struct vechileData
{
char vechileType[MAXLEN];
int begin_month;
int end_month;
    double price;
} data[5];


int main(int argc, char const *argv[])
{
printf("Input Vechile data: \n");

int i=0;
while(i < 5) {
    printf("Input vechile Type : \n");
    fgets(data[i].vechileType, MAXLEN, stdin);

    printf("Input begin month : \n");
    scanf("%d", &data[i].begin_month);

    printf("Input end monhth : \n");
    scanf("%d", &data[i].end_month);

    printf("Input price : \n");
    scanf("%lf", &data[i].price);

    ++i;
}

printf("Input Vechile Type to display information about the vechile : \n");
char vech[MAXLEN];
fgets(vech, MAXLEN, stdin);

i=0;
while(i < 5) {
    if (strcmp(vech,data[i].vechileType) == 0)
    {
        printf("vechileType: %s\n", data[i].vechileType);
        printf("Begin month: %d\n", data[i].begin_month);
        printf("End month: %d\n", data[i].end_month);
        printf("Price : %lf\n", data[i].price);
    }
    ++i;        
}

return 0;
}

Überspringt die nächste Eingabe zu einem string-Anweisung während der Laufzeit "scheint"

  • Es ist eine schlechte Idee zu fflush() die standard-Eingabe, wird die Spülung ist nur gut definiert für output-streams.
  • Was ist deine eigentliche Frage? Die Funktion fgets nennen sollte funktionieren und das richtige zu tun. Sie wahrscheinlich deklarierten strings falsch, wenn es nicht funktioniert.
  • können Sie ein Beispiel mit fgets, dass doesnot Arbeit? Ich Frage deshalb, weil es Sie geben sollte eine ganze Zeile bis zum \n, haben Sie vielleicht noch ein Fehler irgendwo.
  • Die alternative zu gets ist fgets.
  • Nicht aufgeben gets(), nur weil es veraltet. Aufgeben gets(), weil es gefährlich ist.
  • die alternative ist bereits beantwortet in diese Frage

Schreibe einen Kommentar