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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.01.2013, 04:28   #1
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
Сообщение Оцените работу функции

Привет!
написал функцию для проверки на то, что пользователь ввел целое число...при этом, если число - не целое, то заставляем пользователя по новой его вводить
Вызов функции Integer Check(строка, количество цифр для ввода);
Код:
void IntegerCheck(char *digitstring, int digitsamnt) {
	int iterator=1;
	int step=0;
	int stepcurrent;
	int state=1;
	int retval;
	while (step<digitsamnt) {
	cout << "Enter digit string: ";
	cout << "[" << iterator << "]: ";
	gets(digitstring);
	stepcurrent=0;
	while ((stepcurrent<=strlen(digitstring)) && (!(state==0))) {
		if (digitstring[stepcurrent]=='.') {
			state=0;
		}
		stepcurrent=stepcurrent+1;
	}
	if (state==1) {
		retval=atoi(digitstring);
		step=step+1;
		iterator=iterator+1;
		cout << "digit: " << retval << "\n";
	}
	else {
		cout << "Wrong format! Re-enter: ";
		state=1;
	}
	}
	}
Пример вызова функции:
IntegerCheck(digit, 3);

Использование: вставьте функцию в ваш код (не в main!)
вызовите в main'е)

Все)
Откомментите работу, т.к функции пишк только второй день как) укажите на ошибки тоже))

Последний раз редактировалось Igor95; 11.01.2013 в 14:51.
Igor95 вне форума Ответить с цитированием
Старый 11.01.2013, 05:00   #2
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

Код:
int IntegerCheck(char *digitstring) {
	int stepcurrent;
	int state=1;
	cout << "Enter digit string: ";
	gets(digitstring);
	stepcurrent=0;
	while ((stepcurrent<=strlen(digitstring)) && (!(state==0))) {
		if (digitstring[stepcurrent]=='.') {
			state=0;
		}
		stepcurrent=stepcurrent+1;
	}
	if (state==1) {
		return state;
	}
	else
		return 0;
	}
теперь ф-ция фозвращает значения) так что ее вполне можно использовать))
Igor95 вне форума Ответить с цитированием
Старый 11.01.2013, 10:49   #3
Blind Guard
Форумчанин
 
Регистрация: 14.03.2012
Сообщений: 139
По умолчанию

Что делает эта функция я так и не понял, точнее ваше объяснение не совпадает с кодом
Цитата:
Сообщение от Igor95 Посмотреть сообщение
теперь ф-ция фозвращает значения) так что ее вполне можно использовать))
Её можно было и при void использовать
Blind Guard вне форума Ответить с цитированием
Старый 11.01.2013, 10:51   #4
sVasilich
Форумчанин
 
Аватар для sVasilich
 
Регистрация: 16.12.2009
Сообщений: 224
По умолчанию

Эм. Долго думал что оно делает. Вставил функцию из второго поста в main таким образом:

Код:

int main()
{
    char* dstr;
    int d = IntegerCheck(dstr);

    std::cout<<d;

    std::cin.get();

    return 0;
}
вот чего получилось на выходе:

Код:
[svasilich@localhost debug]$ ./test_pr 
Enter digit string: 123
1
[svasilich@localhost debug]$ ./test_pr 
Enter digit string: 123.123
0
[svasilich@localhost debug]$ ./test_pr 
Enter digit string: qwerty
1
[svasilich@localhost debug]$ ./test_pr 
Enter digit string: qwert.
0
[svasilich@localhost debug]$ ./test_pr 
Enter digit string: .
0
Оно что, просто проверяет есть ли точка в предложении? Или я чего не понял?
Люди бывают 10 типов: те, кто понимают двоичную систему счисления, и те, кто не понимают...
sVasilich вне форума Ответить с цитированием
Старый 11.01.2013, 10:59   #5
Perchik71
С++, Delphi
Форумчанин
 
Аватар для Perchik71
 
Регистрация: 24.11.2012
Сообщений: 495
По умолчанию

Поскольку я автора не понял, я прошёл мимо.
но ребят да точка ищиться
Код:
if (digitstring[stepcurrent]=='.')
Если помог, тут весы есть , Вам не сложно, а мне приятно.
Perchik71 вне форума Ответить с цитированием
Старый 11.01.2013, 11:41   #6
Blind Guard
Форумчанин
 
Регистрация: 14.03.2012
Сообщений: 139
По умолчанию

Цитата:
Использование: вставьте функцию в ваш код (не в main!)
вызовите в main'е)
Видно, что вы недопоняли принцип и сущность понятия "функция".
Вы запоминаете частные моменты, вместо того, чтобы выучить общие правила, которые объяснят любой частный момент.

Другими словами main это тоже функция; все функции вызываются так как вы описали, а не только ваша и т.д.
У меня такие же проблемы были — не понят материал (точнее даже не пробовал понять), а тупо заучен алгоритм

Последний раз редактировалось Blind Guard; 11.01.2013 в 11:45.
Blind Guard вне форума Ответить с цитированием
Старый 11.01.2013, 14:42   #7
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

Да, фактически, просто точку в предложении ищет...
Чтобы, затем использовать это число нужно применить функцию atoi
Буду учить, спасибо))
Все, исправил описание работы функции)

Последний раз редактировалось Igor95; 11.01.2013 в 14:52.
Igor95 вне форума Ответить с цитированием
Старый 12.01.2013, 10:22   #8
Perchik71
С++, Delphi
Форумчанин
 
Аватар для Perchik71
 
Регистрация: 24.11.2012
Сообщений: 495
По умолчанию

а если там будет текст? или 0px или 0em.
самы что не наесть. способ только один.. "мягкое конвертирование"
берём массив digits[] = "0123456789"; <-- все эти символы мы ищем.
способ простой идём до тех пор пока не увидим, то что нет в digits.
после чего.. строку преобразуем... от 0 до позиции.
если строка получилась пустая.. возвращать 0. или MAX_INT
Если помог, тут весы есть , Вам не сложно, а мне приятно.
Perchik71 вне форума Ответить с цитированием
Старый 12.01.2013, 11:21   #9
sVasilich
Форумчанин
 
Аватар для sVasilich
 
Регистрация: 16.12.2009
Сообщений: 224
По умолчанию

В принципе, символы от нуля до девяти в таблице ASCII идут подряд, поэтому проверку можно упростить. Вместо поиска по массиву символов, проверять лежит ли текущий символ в интервале от 48 (0), до 57 (9)

Код:
const int minDidgit = 48; //0
const int maxDidgit = 57; //9

....
int currentCode = static_cast<int>(digitstring[stepcurrent]);
if(currentCode<minDidgit || currentCode>maxDidgit){
    //это не число и можно завершить работу, вернув нулевое состояние
    return 0; //state
}
Люди бывают 10 типов: те, кто понимают двоичную систему счисления, и те, кто не понимают...
sVasilich вне форума Ответить с цитированием
Старый 14.01.2013, 23:02   #10
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

не работает такое((
Igor95 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
оцените работу Bek-Z Общие вопросы Delphi 0 27.12.2010 13:06
Оцените работу.. stainer Общие вопросы Delphi 1 17.11.2010 15:04
Устроился на работу. Оцените уровень. fs444 Свободное общение 20 31.10.2010 12:00
Angelic Player v1.0 (Оцените пожалуйста работу) SalasAndriy Софт 23 17.09.2009 20:57
Оцените пожалуйтса мою первую работу Kirill1 Свободное общение 5 02.09.2009 22:57