Использование fgets после scanf - PullRequest
0 голосов
/ 06 мая 2020

Я хочу избавиться от переполнения буфера и использую fgets вместо scanf, чтобы ограничить количество символов. Но всякий раз, когда я ввожу что-то с scanf перед fgets, это больше не работает правильно.

Этот код работает правильно

#include <stdio.h>
int main()
{
 char name[10];
 printf("Who are you? \n");

 fgets(name,10,stdin);                   

 printf("Good to meet you, %s.\n",name);
 return(0);
}

Этот код не читает имя правильно

#include <stdio.h>
#include <stdlib.h>
#define MAX 15

int new_acc();
int view_list();
int main(){    
    int one=1, two=2, three=3, four=4, five=5, six=6, seven=7, choice;
    int new_account, list;

    printf("%d. Create new account\n",one);

    printf("Enter you choice: ");
    scanf("%d",&choice);

    if (choice==one){new_account = new_acc();}
    return 0;
}

int new_acc(){
    char name[MAX], address, account;

    printf("Enter your name: ");
    fgets(name, MAX, stdin);          /* it is the code */
}

Почему это происходит и как это исправить?

1 Ответ

1 голос
/ 06 мая 2020

Не смешивайте scanf() с fgets() в одном коде.

scanf("%d",&choice); не использует всю строку - он оставляет завершающую '\n' для последующего использования fgets() как пустую строку.

scanf() трудно использовать безопасным способом.

...