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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.04.2014, 11:09   #1
guroDragon
Пользователь
 
Регистрация: 09.09.2013
Сообщений: 83
По умолчанию extern для проверки вводимого int'а на ошибку (язык C)

Всем привет.
Помогите, плиз, с проблемкой.
Код служит проверкой вводимого int'а на ошибку (введут не int - будет ошибка). Если его делать без ф-и, то всё ок. Но так как у меня в задачи будет часто проверка, хотел сделать всё максимально компактно и мило :3 Мне намекнули, что проблема в переменных и надо юзать extern. Но я не могу никак врубится как её объявлять.
Спасибо.

Код:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>

int checkInt(int number)
{
	scanf("%d",&number);
	while ((scanf("%d",&number))!=1)
	{
		fflush(stdin);
	fflush(stdout);
		printf("Error...\n");
	}
	return number;
	
}

int main ()
{
	int number;
	checkInt(number);
	printf("%d",number);
	getch ();
	return 0;
}
guroDragon вне форума Ответить с цитированием
Старый 03.04.2014, 23:51   #2
niwssg
Пользователь
 
Регистрация: 12.11.2012
Сообщений: 35
По умолчанию

Код:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>

int main(void)
{
    int num, *pt;
    pt=&num;
    printf("\n%d", checkInt(pt));
}

int checkInt(int *pt)
{
    char term;
    if(scanf("%d%c", &(*pt), &term) != 2 || term != '\n')
    {
        printf("\nerror");
    }
    else
    {
        printf("\nvalid integer");
        return *pt;
    }
}
Такой вариант. Если ненужно чтобы num был в main в случае ошибки можно объявить его глобально. Нет защиты от слишком больших значений int.
niwssg вне форума Ответить с цитированием
Старый 04.04.2014, 00:09   #3
guroDragon
Пользователь
 
Регистрация: 09.09.2013
Сообщений: 83
По умолчанию

Цитата:
Сообщение от niwssg Посмотреть сообщение
Код:
    char term;
    if(scanf("%d%c", &(*pt), &term) != 2 || term != '\n')
А можешь, плиз, объяснить, что это?
guroDragon вне форума Ответить с цитированием
Старый 04.04.2014, 00:26   #4
niwssg
Пользователь
 
Регистрация: 12.11.2012
Сообщений: 35
По умолчанию

Проверка на символы кроме цифр во входном потоке.
niwssg вне форума Ответить с цитированием
Старый 04.04.2014, 02:08   #5
guroDragon
Пользователь
 
Регистрация: 09.09.2013
Сообщений: 83
По умолчанию

Цитата:
Сообщение от niwssg Посмотреть сообщение
Проверка на символы кроме цифр во входном потоке.
Скажи, плиз. А почему !=2? Понять не могу. И еще, ты сказал, что нет защиты от слишком больших чисел. То бишь нельзя проверить, было ли переполнение переменной?
guroDragon вне форума Ответить с цитированием
Старый 04.04.2014, 11:41   #6
niwssg
Пользователь
 
Регистрация: 12.11.2012
Сообщений: 35
По умолчанию

Функция scanf() возвращает число, равное количеству полей, для которых успешно присвоены значения.
Код:
!= 2 || term != '\n')
Проверка что присвоено два значения и term получил значение новой строки.
niwssg вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа, которая для вводимого текста (строки) подсчитывает количество слов, разделенных пробелами yuyuli Помощь студентам 2 18.04.2012 08:15
проблема с типами(char и int) в опз (язык с++) allozavr Помощь студентам 0 19.02.2012 14:39
функция float average(int arrray[],int from,int to) yuliyayuliya Помощь студентам 0 25.04.2011 21:55
Не могу найти ошибку в перехвате int 9 Kastaneda Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 10 24.03.2010 11:37
Проверка – является ли раскладка клавиатуры правильной для вводимого текста Xandr Общие вопросы Delphi 7 02.11.2007 09:25