循环后扫描

时间:2019-02-22 19:02:09

标签: c scanf

我不明白为什么如果我插入一个字母,那么程序会在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

1 个答案:

答案 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?