Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.04.2014, 20:09   #1
NorthBerserk
Новичок
Джуниор
 
Регистрация: 15.04.2014
Сообщений: 1
Восклицание как обрабатывать ошибки scanf (при вводе большого числа)

Есть функция ввода массива с клавиатуры и последующий вывод её на экран.
Код:
#include <stdio.h>
#include <stdlib.h>

int main(void) {
	int i, a[10];
	for (i=0;i<10;i++) {
		scanf("%d", &a[i]);
		printf("a[%d]=%d \n", i, a[i]);
	}

	return EXIT_SUCCESS;
}
Вопрос: как сделать чтобы при вводи огромного числа(скажем, 9*10^10) нам выдавало ошибку(через "puts" например)/другой контроль ввода?
PS пытался использовать fgets , но не понял как (эта тема http://www.programmersforum.ru/showthread.php?t=44478 не помогла, данный там код:
Код:
#include <stdio.h>
      main()
      {
        char buffer[225];
        int buflen;
        char *result;
        buflen=255;
        fputs("Введите строку данных\n", stdout);
        result=fgets(buffer, buflen, stdin);
        if (!result)
            printf("\n конец файла (EOF) или ошибка
                                               (ERROR)\n");
        else fputs(buffer, stdout);
      }
не работает у меня в eclipse, выдаёт ошибку "binary not found") Так что поясните насчёт функции fgets тоже.
Заранее спасибо.
NorthBerserk вне форума Ответить с цитированием
Старый 17.04.2014, 23:01   #2
NomenEstOmen
Пользователь
 
Регистрация: 11.04.2014
Сообщений: 21
По умолчанию

Ну можно брать scanf() в if:
Код:

#include <stdio.h>
#include <stdlib.h>

int main(void) {
	int i, a[10];
	for (i=0;i<10;i++) {
		if(scanf("%d", &a[i])>0)
		    printf("a[%d]=%d \n", i, a[i]);
                else --i;
	}

	return EXIT_SUCCESS;
}

По идее, должно работать так (не могу сейчас проверить):
Если число слишком большое, после считывания, на экране ничего не отобразится. И так прога будет читать числа до тех пор, пока не наберется 10 "хороших".

P.S. А нет, не работает. scanf() удаётся даже для очень больших чисел, но в a[i] в этом случае записывается что-то другое.
Но можно ограничить ввод числом 999999999, которое влезет в int, а все остальные - игнорить:
Код:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define MIL 9
#define MSS 256
int main(void) {
	int i, a[10];
	char temp[MSS];
	for (i=0;i<10;i++) {
        gets(temp);
        if (strlen(temp)<=MIL)
        {
            a[i]=atoi(temp);
            printf("a[%d]=%d \n", i, a[i]);
		    
       }
       else --i;
         
	}


	return EXIT_SUCCESS;
}

Последний раз редактировалось NomenEstOmen; 18.04.2014 в 12:51. Причина: Проверил
NomenEstOmen вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод ошибки при неправильном вводе пароля Arinka Помощь студентам 6 12.06.2010 13:51
обработка ошибки, scanf(), Си. krwlr Помощь студентам 3 05.04.2010 16:58
Выдача ошибки при вводе 2 нулей в Edit1..Edit5 prikolist Общие вопросы C/C++ 5 11.04.2009 22:44
Вывод ошибки при вводе цифры 1..5 в поле Edit prikolist Общие вопросы C/C++ 2 16.03.2009 00:22