Как я могу определить, прочитал ли scanf то, что было указано в формате? - PullRequest
4 голосов
/ 18 ноября 2011

У меня есть программа, которая определяет переменную int data

Программа использует scanf("%d",&data) для чтения данных из стандартного ввода.Если данные из stdin не являются целыми числами, я должен напечатать сообщение об ошибке.

Я пытался if(scanf("%d",&data) ==EOF){ printf("error");return 1;}

Это не сработало для меня.Итак, как я могу определить, не удалось или не удалось выполнить scanf?

Ответы [ 2 ]

9 голосов
/ 18 ноября 2011
Возвращаемое значение

scanf является целым числом, указывающим, сколько элементов было успешно прочитано. Если ваше единственное целое число было прочитано успешно, scanf вернет 1.

например.

int items_read = scanf("%d", &data);

if (items_read != 1) {
    //It was not a proper integer
}

Здесь большое обсуждение чтения целых чисел здесь, о переполнении стека .

4 голосов
/ 18 ноября 2011

scanf возвращает количество успешно прочитанных элементов. Вы можете проверить, не удалось ли это, проверив 1, потому что вы читаете один элемент:

if (scanf("%d", &data) != 1)
    // error
...