PDA

View Full Version : سوال: مشکل در return مقدار مورد نظر



K.Mohammadreza
یک شنبه 10 اردیبهشت 1391, 19:21 عصر
با سلام من با برنامه c free کار میکنم و یک console app با زبان c++ نوشتم یک کلاس برای تاریخ تعریف کردم به شکل زیر



#include <iostream>
#include <fstream>
#include <cctype>
#include <iomanip>

using namespace std;

class Date
{
public:
Date();
void SPrint();
float DPrint();

void SetDay(int = 1);
void SetMonth(int = 1);
void SetYear(int yr = 1900){year = yr;}

int GetDay(){return day;}
int GetMonth(){return month;}
int GetYear(){return year;}

private:
int month; // 1-12
int day; // 1-31 based on month
int year; // any year

};


Date::Date()
{
day = 1;
month = 1;
year = 1900;
}

float Date::DPrint()
{
return(year*10000 + month*100 + day);
}

void Date::SPrint()
{
cout<<year<<"/"<<month<<"/"<<day;
}

void Date::SetDay(int dy)
{
static const int daysPerMonth[ 13 ] =
{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

if ( dy > 0 && dy <= daysPerMonth[ month ] )
{
day = dy;
}
if ( month == 2 && // February: Check for leap year
dy == 29 &&
( year % 400 == 0 ||
( year % 4 == 0 && year % 100 != 0 ) ) )
{
day = dy;
}
}

void Date::SetMonth(int mn)
{
if ( mn > 0 && mn <= 12 ) // validate the month
{
month = mn;
}
else
{
month = 1;
}
}


مشکل تابع SPrint() می باشد میخوام بجای چاپ تاریخ به آن شکل دقیقا به همان شکل به عنوان خروجی تابع فرستاده شود یعنی
char *SPrint()
و زمانیکه تابع SPrint() را فراخوانی مبکنم متغیر منصوب مقداری شبیه 1391/02/10 گرفته باشد.

با تشکر

K.Mohammadreza
سه شنبه 12 اردیبهشت 1391, 19:20 عصر
هیچ کس هیچ جوابی ندارد

one hacker alone
سه شنبه 12 اردیبهشت 1391, 20:17 عصر
سلام
کد رو سر سری دیدم ظاهرا توابع روز و ماه وسال تک تک کار خودشون رو انجام میدن و خروجیشون رو تو متغیر حالا تابع دیگه ای داری که کارش چاپ این متغییر ها به قالب تاریخ هست که این کار رو دستی انجام دادی و میخوای به شکلی باشه که با صدا زدن متد sprint از کلاس data خروجی به شکل قالب تاریخ داشته باشی اره؟
یعنی به شکل زیر؟

cout<<date.sprint();


اگه این رو میخوای باید نوع بازگشتی sprint رو به جای void از نوع *char تعریف کنی



*char Date::SPrint()
{
char *str;
strcat(str,year);
strcat(str,"/");
strcat(str,month);
strcat(str,"/");
strcat(str,day);
return str
}


یه همچین چیزی میشه فقط اگه گیر داد سال و روز ماه رو به رشته تبدیل کن

K.Mohammadreza
سه شنبه 12 اردیبهشت 1391, 22:57 عصر
ممنون ولی توی c free تابع تبدیل عدد به رشته نداره ولی vc داره itoa داره چطوری میتونم شبیه این تابع بنویسم

K.Mohammadreza
سه شنبه 12 اردیبهشت 1391, 23:06 عصر
کدش را نوشتم جهت استفاده سایر دوستان میذارمش توی سایت



char * numtochar(int num, int &length)
{
int temp = num;
int counter = 0;
bool IsNegative = false;

if(num<0)
{
counter++;
IsNegative = true;
}


// find the length of the number
while(temp != 0)
{
temp /= 10;
counter++;
}

length = counter;

char * String = new char[counter];

for(int i=counter-1; i>=0; i--)
{
temp = num%10;

if(IsNegative == true)
temp *= -1;

switch(temp)
{
case 0: String[i] = '0'; break;
case 1: String[i] = '1'; break;
case 2: String[i] = '2'; break;
case 3: String[i] = '3'; break;
case 4: String[i] = '4'; break;
case 5: String[i] = '5'; break;
case 6: String[i] = '6'; break;
case 7: String[i] = '7'; break;
case 8: String[i] = '8'; break;
case 9: String[i] = '9'; break;
}

num /= 10;
}

if(IsNegative==true)
String[0] = '-';

return(String);
}