我不明白为什么如果我插入一个字母,那么程序会在for循环之后执行<script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
<div class="switch-3d-permissao" data-id="status" checked>Pode fazer login no sistema?</div>
,而不会让我在for循环之后插入printf
的值。
scanf
答案 0 :(得分:1)
因为当您输入字母来中断for
循环时,输入的值在stdin缓冲区中仍未消耗。由于格式匹配失败,%f
不使用输入。
您需要自己清除所有此类未使用的输入。例如,您可以具有清除功能:
void clear_stdin(void)
{
int c;
while ((c = getchar()) != '\n' && c != EOF);
}
并调用它:
printf("Inserisci ascissa: (oppure inserisci una lettera per terminare): ");
if(scanf("%f", &ascissa) != 1) {
clear_stdin();
break;
}
类似地,您需要进行错误检查并清除所有scanf调用。
相关:Why does everyone say not to use scanf? What should I use instead?