【发布时间】:2018-05-25 15:28:44
【问题描述】:
我正在为测验而学习,在编写代码时遇到了一个问题。
我的代码跳过了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!");
}
【问题讨论】:
-
可能是因为 scanf 将换行符留在缓冲区中,所以读取一个空行。
-
“跳过”是什么意思?是什么让您认为
gets()被跳过了? -
"%d' 表示在第一个非数字处停止并将其留在输入流中。因此该行末尾的换行符仍在等待读取。
-
初始化客户端名称,例如“未初始化”。然后看看能不能活下来。如果名称以“”结尾,即为空,则
gets()没有被跳过。
标签: c