"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;» считается плохой практикой?