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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.05.2012, 16:22   #1
Valentina2011
 
Регистрация: 13.12.2011
Сообщений: 9
Восклицание Ошибка проверки корректности ввода

Подскажите почему программа выдает ошибку при первом запуске, а дальше работает нормально?
Код:
#include <iostream>
#include <cstdlib>
#include <string>
using namespace std;
int istrue(string); 
struct library 
{
  int month;
	int day;
    int year;//дата
};
void createstruct();
int main() {int filecase;
		  
		setlocale (LC_CTYPE,"rus");
		cout<<"Введите 1, если нужно ввести данные";
					cin>>filecase;
					switch(filecase)
					 case 1:{createstruct(); break;}
					 return 0;
}

//--------------------------------

void createstruct()   // получение длины от пользователя
{		  library l1;
    string instr;             // для входной строки
  
  cout<<"\nВведите дату:";
   while(true)               // цикл, пока футы 
                            // не будут правильными
    {
    cout << "\n\nВведите день месяца: ";
    cin.unsetf(ios::skipws);// не пропускать
                            // разделители
    getline(cin, instr); 
	
    if( istrue(instr) )     // правильное значение?
      {        //да
      cin.ignore(10, '\n'); // съесть символы,
                            // включая разделитель строк
	  l1.day = atoi( instr.c_str() ); // перевести
                                    // значение в целочисленное
      break;                // выход из цикла 'while'
      }                     // нет, не целое
    cin.ignore(10, '\n');   // съесть символы, включая
                            // разделитель строк
    cout << "Дата должна быть целым числом, месяц не имеет более чем 31 день!\n";
   }}  //конец цикла while для дня
  

//конец цикла while для футов
//---------------------------------------------------------
int istrue(string str)      // true если введена строка
  {  library l1;                       // с правильным значением 
  int slen = str.size();    // получить длину
  if(slen==0 || slen > 2)   // не было или слишком много
                            // данных
    return 0;               // не целое
  for(int j=0; j<slen; j++) // проверить каждый символ
                            // если не цифра или минус
  if(str[j] < '0' || str[j] > '9')
      return 0;             // строка неправильных 
  int  n = atoi( str.c_str() ); // перевод в double
  if( n<0 || n>31   )         // вне допустимых значений?
    return 0;  
  // если да, неправильно
  
  return 1;                  // правильно
}
Valentina2011 вне форума Ответить с цитированием
Старый 13.05.2012, 17:47   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Запустил твою прогу. Ошибок не выдала. Запросила данные и завершилась.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.05.2012, 17:54   #3
Valentina2011
 
Регистрация: 13.12.2011
Сообщений: 9
По умолчанию

Она и не выдает ошибок. Проблема в том, что она не дает ввести первый раз данные и сразу выводит ошибку, а уже со второго раза все вводится нормально.Если убрать оператор switch в функции main и написать просто функцию, тогда программа работает корректно, но мне он нужен((
Изображения
Тип файла: jpg Безымянный.jpg (15.2 Кб, 133 просмотров)
Valentina2011 вне форума Ответить с цитированием
Старый 13.05.2012, 20:40   #4
Valentina2011
 
Регистрация: 13.12.2011
Сообщений: 9
По умолчанию

Всем спасибо, уже все работает.
Valentina2011 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка корректности даты Oleg Romanchuk Общие вопросы Delphi 3 09.07.2011 07:13
Ошибка ввода Petros Общие вопросы по Java, Java SE, Kotlin 4 26.06.2011 16:25
Контроль корректности ввода данных SergSpectr Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 23.12.2010 11:27
C#. Внешнее завершение метода методом проверки ввода killo C# (си шарп) 1 16.11.2010 12:53
Помогите написать скрипт для проверки правильности ввода числа в строке DiSpalL JavaScript, Ajax 6 19.06.2009 16:48