"ferror" тестирует ввод "scanf"

Я попытался ввести данные об ошибке в следующей программе, но она не может распознать ошибку, как только я ввел числовые данные, а в следующий раз ввел строковые данные, но программа не отреагировала:

      #include <iostream>
#include <cstdio>
#include <cstdlib>

using namespace std;

int main(void)
{


int i;



scanf("%d",&i);

if(ferror(stdin))
printf("Error is ocurred!");


return 0;
}

1 ответ

Не предполагайте, что делает функция. Прочитайте его документацию.

https://www.cplusplus.com/reference/cstdio/ferror/

int ferror ( FILE * stream );

Проверить индикатор ошибки

Проверяет, установлен ли индикатор ошибки, связанный с потоком, и возвращает значение, отличное от нуля, если это так.

Этот индикатор обычно устанавливается предыдущей операцией с потоком, которая завершилась неудачно, и очищается вызовом clearerr, rewind или freopen.

Так что это зависит от того, если scanfустановил индикатор ошибки, которого в данной ситуации нет.

Вместо этого используйте это:

      if(scanf("%d",&i) != 1) {
    // Error code

О, и не используйте use namespace std Почему «используется пространство имен std;» считается плохой практикой?

Другие вопросы по тегам