我正在学习测验,在编写代码时遇到了问题。
我的代码跳过了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!");
}
答案 0 :(得分:2)
首先,never use gets
因为它不安全。更安全的替代方案是fgets
。
即使你使用它,混合scanf
和fgets
会导致问题,因为前者可能会在输入缓冲区中留下一个换行符,导致后者在读取换行符后停止。
更改为scanf
以阅读字符串:
scanf("%49[^\n]", conta1.nomeDoCliente);
格式说明符%49[^\n]
表示最多可读取49个非换行符。