gaRRyk
http://xaa.su/7RY
Написал код, только сильно не пинайте и громко не смейтесь=)) программка чисто для практики, писал код собственными знаниями на данный момент никуда не подглядывая. Вообщем цель перевести строку даты в целочисленные тип данных. Помогите найти ошибки, с функцией, что-то не так, код компилится(13-я студия)
Код:
#include <iostream>
using namespace std;
bool preobrazStroki(char *); //прототип функции которая преобразует строку в числа int
struct day
{//вообщем глобальные переменные для хранения отработаных результатов
static char a, b;
};
struct mm
{
static char a, b;
};
struct year
{
static char a, b, c, d;
};
char day::a, day::b;
char mm::a, mm::b;
char year::a, year::b, year::c, year::d;
int main()
{
setlocale(LC_ALL, "rus");
char currentdate[11];//строка куда будем записывать дату
bool stop = true;//переменная для условия выхода из цикла while
//char *ptrcurrentdate = ¤tdate[11];
while (stop == true)
{
cout << "Введите сегодняшную дату в формате дд.мм.гггг" << endl;
gets_s(currentdate);//считываем символы с клавиатуры в строку п.с.и почему-то при повторном запуске цикла не запрашивает ввод данных
char *ptrcurrentdate = ¤tdate[11]; //так и не определился где лучше создать указатель вне цикла или внутри цикла...
cout << ptrcurrentdate << endl;//для проверки, но выпуливает какой-то шлак(((
if (currentdate[2] == '.' && currentdate[5] == '.')// первые условия правильности ввода даты
{
if (preobrazStroki(ptrcurrentdate))//если функция вернёт тру
{
int day1 = day::a - '0', day2 = day::b - '0', mm1 = mm::a - '0', mm2 = mm::b - '0';//конечные переменные с которымы
//в будущем можно будет работать и вычислять количество дней с вашего дня рождения =))))
int yy1 = year::a - '0', yy2 = year::b - '0', yy3 = year::c - '0', yy4 = year::d - '0';
cout << day1 << day2 << "." << mm1 << mm2 << ".";//печать даты уже в формате int
cout << yy1 << yy2 << yy3 << yy4 << endl;
}
}
else
{
cout << "Неверный формат даты, вводите в таком формате дд.мм.гггг!\n";
cout << "Если желаете продолжить нажмите 1, если хотите выйти, нажмите 0\n";//тут всё понятно я думаю
(cin >> stop).get();
}
}
system("pause");
return 0;
}
bool preobrazStroki(char *value)
{
//day day1;
//mm mm1;
//year year1;
while (*value != '\0')//пока указатель не будет указывать на asciiz
{//собственно сама функция и с ней что-то не то.
if (isdigit(*value))//если все if сработают функция вернёт true и дата запишется в глобальные переменные
{
day::a = *value;
value++;
}
else
{
cout << "neverniu format" << endl;
break;//было задумано, если программа находит какой-то символ, а не цифру, то функция возвращает false
}
if (isdigit(*value))
{
day::b = *value;
value += 2;
}
else
{
cout << "neverniu format" << endl;
break;
}
if (isdigit(*value))
{
mm::a = *value;
value++;
}
else
{
cout << "neverniu format" << endl;
break;
}
if (isdigit(*value))
{
mm::b = *value;
value += 2;
}
else
{
cout << "neverniu format" << endl;
break;
}
if (isdigit(*value))
{
year::a = *value;
value++;
}
else
{
cout << "neverniu format" << endl;
break;
}
if (isdigit(*value))
{
year::b = *value;
value++;
}
else
{
cout << "neverniu format" << endl;
break;
}
if (isdigit(*value))
{
year::c = *value;
value++;
}
else
{
cout << "neverniu format" << endl;
break;
}
if (isdigit(*value))
{
year::d = *value;
value++;
}
else
{
cout << "neverniu format" << endl;
break;
}
return true;
}
return false;
}
Останнє редагування: