به نقل از Arash_j13 :
برنامه را تغيير دادم تا در توربوسي چهار و نيم اجرا شود.
در كامپايلرهاي جديد به جاي <iostream.h> مي نويسند <iostream> كه من پسوند .h را اضافه كردم. و نمي دانم چرا روي ...
کد:
using std::cout;
using std::endl;
خطا داد كه حذف كردم.
کد:
// Fig. 6.1: fig06_01.cpp
// Create a structure, set its members, and print it.
#include <iostream.h>
struct Time { // structure definition
int hour; // 0-23
int minute; // 0-59
int second; // 0-59
};
void printMilitary( const Time & ); // prototype
void printStandard( const Time & ); // prototype
int main()
{
Time dinnerTime; // variable of new type Time
// set members to valid values
dinnerTime.hour = 18;
dinnerTime.minute = 30;
dinnerTime.second = 0;
cout << "Dinner will be held at ";
printMilitary( dinnerTime );
cout << " military time,\nwhich is ";
printStandard( dinnerTime );
cout << " standard time.\n";
// set members to invalid values
dinnerTime.hour = 29;
dinnerTime.minute = 73;
cout << "\nTime with invalid values: ";
printMilitary( dinnerTime );
cout << endl;
return 0;
}
// Print the time in military format
void printMilitary( const Time &t )
{
cout << ( t.hour < 10 ? "0" : "" ) << t.hour << ":"
<< ( t.minute < 10 ? "0" : "" ) << t.minute;
}
// Print the time in standard format
void printStandard( const Time &t )
{
cout << ( ( t.hour == 0 || t.hour == 12 ) ?
12 : t.hour % 12 )
<< ":" << ( t.minute < 10 ? "0" : "" ) << t.minute
<< ":" << ( t.second < 10 ? "0" : "" ) << t.second
<< ( t.hour < 12 ? " AM" : " PM" );
}
فرق توربو سي چهار و نيم و سه اينه كه بايد در انتهاي برنامه هاي توربو سي 3 يك getch(); بگذاريم. كه طبعا يك <conio.h> هم اولش مي خواهد.
خوبه هم كه اول برنامه هاي توربوسي 3 يك clrscr(); بگذاريم كه نتيجه اجراي قبلي پاك بشه تا محيط كار تميز باشه.header اين تابع هم conio.h است.
کد:
// Fig. 6.1: fig06_01.cpp
// Create a structure, set its members, and print it.
#include <iostream.h>
#include <conio.h>
struct Time { // structure definition
int hour; // 0-23
int minute; // 0-59
int second; // 0-59
};
void printMilitary( const Time & ); // prototype
void printStandard( const Time & ); // prototype
int main()
{
clrscr();
Time dinnerTime; // variable of new type Time
// set members to valid values
dinnerTime.hour = 18;
dinnerTime.minute = 30;
dinnerTime.second = 0;
cout << "Dinner will be held at ";
printMilitary( dinnerTime );
cout << " military time,\nwhich is ";
printStandard( dinnerTime );
cout << " standard time.\n";
// set members to invalid values
dinnerTime.hour = 29;
dinnerTime.minute = 73;
cout << "\nTime with invalid values: ";
printMilitary( dinnerTime );
cout << endl;
getch();
return 0;
}
// Print the time in military format
void printMilitary( const Time &t )
{
cout << ( t.hour < 10 ? "0" : "" ) << t.hour << ":"
<< ( t.minute < 10 ? "0" : "" ) << t.minute;
}
// Print the time in standard format
void printStandard( const Time &t )
{
cout << ( ( t.hour == 0 || t.hour == 12 ) ?
12 : t.hour % 12 )
<< ":" << ( t.minute < 10 ? "0" : "" ) << t.minute
<< ":" << ( t.second < 10 ? "0" : "" ) << t.second
<< ( t.hour < 12 ? " AM" : " PM" );
}
شرح برنامه:
ابتدا يك struct بيرون main تعريف شده.
کد:
struct Time { // structure definition
int hour; // 0-23
int minute; // 0-59
int second; // 0-59
};
بعد بلافاصله بعد شروع main ، يك نمونه از اين استراكت ساخته شده.
کد:
Time dinnerTime; // variable of new type Time
بعد به اعضاي اين استراكت نمونه ، مقدار اوليه داده:
کد:
// set members to valid values
dinnerTime.hour = 18;
dinnerTime.minute = 30;
dinnerTime.second = 0;
بعد دو تابع كه ساخته بوده قبلا را احضار كرده:
کد:
cout << "Dinner will be held at ";
printMilitary( dinnerTime );
cout << " military time,\nwhich is ";
printStandard( dinnerTime );
cout << " standard time.\n";
در مرحله بعداي هم باز مقدار اوليه به عناصر اين استراكت داده و توابع را باز احضار كرده.
نگاهي به درون اين توابع مي كنيم.
کد:
// Print the time in military format
void printMilitary( const Time &t )
{
cout << ( t.hour < 10 ? "0" : "" ) << t.hour << ":"
<< ( t.minute < 10 ? "0" : "" ) << t.minute;
}
// Print the time in standard format
void printStandard( const Time &t )
{
cout << ( ( t.hour == 0 || t.hour == 12 ) ?
12 : t.hour % 12 )
<< ":" << ( t.minute < 10 ? "0" : "" ) << t.minute
<< ":" << ( t.second < 10 ? "0" : "" ) << t.second
<< ( t.hour < 12 ? " AM" : " PM" );
}
چيز مهمي كه وجود دارد اين است كه struct را به تابع ارسال كرده ايم.
سئوالي كه براي من پيش آمده اين است كه درون تابع چگونه استراكت شناخته شده است؟
آيا به اين دليل نيست كه تعريف استراكت ، چون بيرون main است نوعي تعريف سراسري است؟
نكته بعدي ، استفاده از const است.
چرا اين كلمه استفاده شده؟
ايا براي حفظ عناصر استراكت از تغيير بوده؟
البته در اين برنامه تغيير آنها مهم نبوده ولي تابع در مكانهاي ديگر بايد بي تغيير ورودي ها ، فقط چاپگر باشد.
نكته ديگر علامت (؟ ) است . كار اين چيست؟
کد:
<< ( t.minute < 10 ? "0" : "" ) <<