为什么我的程序跳过gets()函数?

时间:2018-05-25 15:28:45

标签: c

我正在学习测验,在编写代码时遇到了问题。

我的代码跳过了gets()功能。如果我使用scanf它不会跳过,但由于我使用scanf扫描全名会很麻烦,但由于某种原因会跳过gets()

struct Conta{

    char nomeDoCliente[50];
    int numeroDeConta;
    float saldoDeConta;

};
struct Conta conta1;

int main()
{
            switch (menu()){
            case 1 :
                defDadosDeConta();
                break;
            case 2 :
                break;
            case 3 :
                break;

            }
}

int menu(){
    int escolha;
    puts("1 - Definir dados da conta.");
    puts("2 - Depositar Dinheiro.");
    puts("3 - Levantar Dinheiro.");
    puts("4 - Sair.");
    printf("Escolha a sua operação: ");
    scanf("%d", &escolha);
    return escolha;
}
defDadosDeConta(){
    printf("Insira o seu nome: ");
    gets(conta1.nomeDoCliente);
    puts("Dados de conta guardados com sucesso!");


}

1 个答案:

答案 0 :(得分:2)

首先,never use gets因为它不安全。更安全的替代方案是fgets

即使你使用它,混合scanffgets会导致问题,因为前者可能会在输入缓冲区中留下一个换行符,导致后者在读取换行符后停止。

更改为scanf以阅读字符串:

scanf("%49[^\n]", conta1.nomeDoCliente);

格式说明符%49[^\n]表示最多可读取49个非换行符。