scanf("%d", &jogadores[pos].dados[4][2]);
while (jogadores[pos].dados[4][2] < 0) {
printf("O valor não pode ser menor que 0, introduz novamente: ");
scanf("%d", &jogadores[pos].dados[4][2]);
};
你知道这段代码有什么问题,我认为它会跳过第一个scanf
,因为它会一直打印O valor não pode ser menor que 0, introduz novamente:
答案 0 :(得分:2)
通过检查输出变量,无法检查scanf
成功解析输入,您必须将返回值与预期的数字转换进行比较。此外,如果转换失败,违规字符将保留在输入流中,因此再次调用scanf
而不先读取它们将再次失败,并再次失败......
以下是修复代码的方法:
for (;;) {
if (scanf("%d", &jogadores[pos].dados[4][2]) != 1) {
int c;
while ((c = getchar()) != EOF && c != '\n')
continue;
if (c == EOF) {
printf("unexpected end of file\n");
exit(EXIT_FAIL);
}
printf("invalid input, try again (non falo brasileiro)\n");
continue;
}
if (jogadores[pos].dados[4][2] < 0) {
printf("O valor não pode ser menor que 0, introduz novamente: ");
continue;
}
break;
}