-
اسامي ماكروهاي از پيش تعريف شده
اسامي تعداد 5 ماكرو ( قبلا"تعريف شده است ) كه به همراه كامپايلر استاندارد
زبان C وجود دارند ، عبارتند از : - LINE( -1
- FILE( -2
- DATE( -3
- TIME( -4
- STDC( -5
ماكروي -LINE- حاوي شماره دستوري از فايل برنامه است كه در حال ترجمه شدن
مي باشد .
ماكروي -FILE- حاوي نام فايلي است كه اكنون در حال ترجمه شدن مي باشد .
ماكروي -DATE- حاوي رشته اي بصورت mm/dd/yy است و حاوي تاريخي است كه فايل
برنامه ، ترجمه شده است ( mm براي بيان ماه ، dd براي بيان روز و yy براي بيان
سال است ) .
ماكروي -TIME- حاوي رشته اي بصورت hh:mm:ss است و شامل زماني است كه فايل
برنامه ، ترجمه شده است ( hh براي بيان ساعت ، mm براي بيان دقيقه و ss براي
بيان ثانيه است ) .
ماكروي -STDC- مشخص مي كند كه كامپايلر مورد استفاده استاندارد است يا خير.
اگر محتويات اين ماكرو برابر با يك (1) باشد ، كامپايلر استاندارد و در غير د استاندارد نيست .
-
دستور پيش پردازنده #line
دستور # line محتويات دو ماكروي -LINE و -FILE - را تغيير مي دهد . دستور # line
به صورت زير بكار مي رود : "
نام فايل " <شماره > # line
شماره ، يك عدد صحيح مثبت است كه مقدار جديد ماكروي -LINE- را مشخص مي كند
و " نام فايل " كه اختياري نيز هست ، محتويات جديد ماكروي -FILE- را تعيين
مي كند . ماكروي # line براي اشكال زدايي برنامه مفيد است .
مثال : #include "stdio.h"
#line 100
main)(
{
printf("\nprintf start at address:");
printf("%d\n"/_LINE)_;
}
در مثال بالا مقدار اوليه اي كه در ماكروي -LINE- قرار مي گيرد برابر با 100
است . لذا شماره دومين دستورprintf برابر با 105 خواهد بود. اين مطلب از خروجي امه كه چاپ محتويات ماكروي -LINE- است مشخص مي گردد .
-
دستور پيش پردازنده # error
دستور # error موجب جلوگيري از ادامه ترجمه برنامه توسط كامپايلر شده و به
زير بكار مي رود :
پيام خطا # error
پيام خطا ، جمله اي است كه كامپايلر پس از رسيدن به اين دستور ، آن را بصورت
زير در صفحه نمايش ظاهر مي كند :
پيام خطا:Error directive شماره خط نام فايل :Error
مثال : main)(
{
int arr[4] / i ;
for( i=0 ; i < 100 ; i++)
{
if ( i > 4)
#error enter less than 20 ;
else
scanf("%d"/&arr[i] );
}
در حين ترجمه برنامه مثال بالا پيام زير صادر مي شود : Error directive : enter less than 20
-
ساختمان ها
قبلا" مشاهده كرديم كه چگونه يك متغير ، يك قلم از داده را در خود نگهداري
مي كند و همچنين ديديم كه چگونه مي توان چند عنصر همنوع را در يك آرايه ذخيره
كرد . گاهي لازم است ، چند عنصر غير همنوع را تحت يك نام در حافظه ذخيره نمود .
ولي با مطالبي كه تاكنون گفته شد انجام اين كار ممكن نيست . بعنوان مثال ، اگر
بخواهيم اطلاعات مربوط به كارمندان موسسه اي را كه شامل نام كارمند ( از نوع
كاراكتري ) ، شماره كارمندي ( از نوع عدد صحيح ) ، حقوق ( از نوع عددي صحيح )
غيره است ، تحت يك نام ذخيره كنيم . در اين صورت متغير معمولي و آرايه جوابگوي
نياز ما نيستند . براي رفع اين مشكل در زبان C ، از نوعي داده به نام ساختمان
استفاده مي شود . بنابراين مي توان گفت كه : " ساختمان " در زبان C نامي براي ه اي از متغيرها است كه اين متغيرها مي توانند همنوع نباشند .
-
تعريف نوع ساختمان
براي تعريف نوع ساختمان ، از دستور struct بصورت زير استفاده مي شود : {
<نام ساختمان > struct
اجزاي ساختمان };
نام ساختمان ، از قانون نامگذاري براي متغيرها تبعيت مي كند. اجزاي ساختمان
متغيرهايي هستند كه قسمتي از ساختمان مي باشند و همانند يك متغير معمولي و يا
آرايه بايد اسم و نوع هر كدام مشخص باشد. به يك ساختمان نمونه كه براي نگهداري
اسم ، شماره كارمندي و حقوق كارمندان نوشته شده است توجه نماييد : struct personel {
char name [31];
int person;
int salary;
};
در تعريف نوع ساختمان بايد موارد زير را در نظر داشت : 1
حرف { مي تواند در همان خطي كه دستور struct آمده است نباشد . 2
دستور structبه ; ختم مي شود .
با مطالبي كه تاكنون گفته شد، روش تعريف نوع ساختمان مشخص گرديد. ولي تعريف
ساختمان براي استفاده از آن كافي نيست . بلكه پس از تعريف نوع ساختمان بايد
متغيرهايي از اين نوع را تعريف كرده وسپس اين متغيرها را در برنامه بكارگرفت .
براي روشن شدن موضوع ، يادآوري مي كنيم كه intو floatو دو نوع تعريف شده براي
كامپيوتر هستند كه بايد متغيرهايي از اين نوع ها تعريف و سپس از آنها استفاده
گردد . تعريف متغيرهايي از نوع ساختمان به دو روش امكان پذير است :
روش اول ) پس از تعريف نوع ساختمان ، متغيرهاي از نوع ساختمان با دستور struct
تعريف مي شوند .
در اين روش از شكل كلي زير استفاده مي شود : ;
نوع ساختمان <اسامي متغيرهاي ساختمان >struct "
نوع ساختمان " ، اسمي است كه قبلا" در دستور struct ساختار آن مشخص شده
است . " اسامي متغيرهاي ساختمان " ، متغيرهايي را مشخص مي كند كه بايد از نوع
ساختماني كه اسم آن در نوع ساختمان مشخص شده است باشد . اگر تعداد اين متغيرها
بيش از يكي باشد با كاما از يكديگر جدا مي شوند . بعنوان مثال ، دستور struct personel p1/p2;
دو متغير ساختمان به اسامي p1و p2و را تعريف مي كند كه از نوع ساختمان personel
هستند .
روش دوم ) در حين تعريف نوع ساختمان ( بلافاصله پس از تعريف نوع ) اسامي
متغيرهاي ساختمان مشخص مي گردند .
در اين روش از شكل كلي زير استفاده مي شود . {
اسم ساختمان struct
اجزاي ساختمان ;
اسامي متغيرهاي ساختمان }
در اين روش ، ذكر اسم ساختمان اجباري نيست . در دستور زير دقت كنيد : struct {
char name [31];
int persno;
int salary;
} p1/p2;
دستور فوق دو متغير ساختمان به اسامي p1و p2و را تعريف مي كند كه ساختار خص شده است .
-
دسترسي به اجزاي ساختمان
همانطوركه مشاهده شد هر ساختمان داراي چند جزئ است كه براي دسترسي به هر يك
از اجزاي آن از روش كلي زير استفاده مي شود :
<اسم متغير از نوع ساختمان >.<نام جزئ>
بعنوان مثال ، با فرض اين كه p1و p2و دو متغير از نوع ساختمان بوده و داراي 3
جزئ به اسامي name، person،و salaryو باشند ، دستورات زير موجب دسترسي به هر
يك از اجزاي متغير p1 مي شوند كه در مورد p2 نيز ميتوان به همين طريق عمل كرد: p1.name
p1.persno
p1.salary
اگر اجزاي ساختمان ، از نوع آرايه باشند ، ذكر انديس آرايه جهت دسترسي به
عناصر آن الزامي است . بعنوان مثال ، دستور زير را در نظر مي گيريم : struct student {
char name [31];
int cours [10];
int unit [10];
int grade [10];
int persno;
} st1.st2;
در دستور فوق بعضي از اجزاي ساختمان student بصورت آرايه اي تعريف شده اند .
دستورات زير موجب دسترسي به اجزاي متغير ساختمان st1 مي شوند : st1.cours [1]
st1.cours [i]
st1.name
همانطوركه مشاهده شد اگر اجزاي ساختمان رشته اي باشند ميتوان به تك تك عناصر
آن نيز دسترسي پيدا كرد (st1.name[i])
در مورد مقدار دادن به اجزاي ساختمان مي توان همانند يك متغير معمولي عمل
كرد . لذا با فرض اين كه st1 متغير ساختماني باشد كه قبلا" تعريف شده است
دستورات زير معتبر مي باشند : st1.persno=1243;( 1)
printf("\n %d"/st1.persno);( 2)
gets(st1.name);( 3)
for( i=0;i<10;i++( )4)
scanf("%d"/&st1.unit[i]);
مثال : برنامه اي كه دو عدد موهومي را از ورودي خوانده و مجموع آنها را
محاسبه مي كند و به خروجي مي برد . main)(
{
struct complex
{
int real ;
int unreal ;
} comp1 / comp2 /result ;
printf("\n enter the real part");
printf(" for number %d:"/1);
scanf("%d"/&comp1.real );
printf("\n enter the unreal part");
printf(" for number %d:"/1 );
scanf("%d"/&comp1.unreal );
printf("\n enter the real part ");
printf(" for number %d:"/2 );
scanf("%d"/&comp2.real );
printf("\n enter the unreal part");
printf(" for number %d:"/2 );
scanf("%d"/&comp2.unreal );
result.real=comp1.real+comp2.real;
result.unreal=
comp1.unreal+comp2.unreal;
printf("\nthe result of sum is:");
printf("\nreal part=" );
printf("%d"/result.real);
printf("\n unreal part" );
printf("=%d"/result.unreal);
}
نمونه اي از خروجي برنامه مثال بالا : enter the real part for number 1:12
enter the unreal part for number 1:25
enter the real part for number 2:5
enter the unreal part for number 2:19
the result of sum is:
real part=17
un
-
دسترسي به اجزاي ساختمان
همانطوركه مشاهده شد هر ساختمان داراي چند جزئ است كه براي دسترسي به هر يك
از اجزاي آن از روش كلي زير استفاده مي شود :
<اسم متغير از نوع ساختمان >.<نام جزئ>
بعنوان مثال ، با فرض اين كه p1و p2و دو متغير از نوع ساختمان بوده و داراي 3
جزئ به اسامي name، person،و salaryو باشند ، دستورات زير موجب دسترسي به هر
يك از اجزاي متغير p1 مي شوند كه در مورد p2 نيز ميتوان به همين طريق عمل كرد: p1.name
p1.persno
p1.salary
اگر اجزاي ساختمان ، از نوع آرايه باشند ، ذكر انديس آرايه جهت دسترسي به
عناصر آن الزامي است . بعنوان مثال ، دستور زير را در نظر مي گيريم : struct student {
char name [31];
int cours [10];
int unit [10];
int grade [10];
int persno;
} st1.st2;
در دستور فوق بعضي از اجزاي ساختمان student بصورت آرايه اي تعريف شده اند .
دستورات زير موجب دسترسي به اجزاي متغير ساختمان st1 مي شوند : st1.cours [1]
st1.cours [i]
st1.name
همانطوركه مشاهده شد اگر اجزاي ساختمان رشته اي باشند ميتوان به تك تك عناصر
آن نيز دسترسي پيدا كرد (st1.name[i])
در مورد مقدار دادن به اجزاي ساختمان مي توان همانند يك متغير معمولي عمل
كرد . لذا با فرض اين كه st1 متغير ساختماني باشد كه قبلا" تعريف شده است
دستورات زير معتبر مي باشند : st1.persno=1243;( 1)
printf("\n %d"/st1.persno);( 2)
gets(st1.name);( 3)
for( i=0;i<10;i++( )4)
scanf("%d"/&st1.unit[i]);
مثال : برنامه اي كه دو عدد موهومي را از ورودي خوانده و مجموع آنها را
محاسبه مي كند و به خروجي مي برد . main)(
{
struct complex
{
int real ;
int unreal ;
} comp1 / comp2 /result ;
printf("\n enter the real part");
printf(" for number %d:"/1);
scanf("%d"/&comp1.real );
printf("\n enter the unreal part");
printf(" for number %d:"/1 );
scanf("%d"/&comp1.unreal );
printf("\n enter the real part ");
printf(" for number %d:"/2 );
scanf("%d"/&comp2.real );
printf("\n enter the unreal part");
printf(" for number %d:"/2 );
scanf("%d"/&comp2.unreal );
result.real=comp1.real+comp2.real;
result.unreal=
comp1.unreal+comp2.unreal;
printf("\nthe result of sum is:");
printf("\nreal part=" );
printf("%d"/result.real);
printf("\n unreal part" );
printf("=%d"/result.unreal);
}
نمونه اي از خروجي برنامه مثال بالا : enter the real part for number 1:12
enter the unreal part for number 1:25
enter the real part for number 2:5
enter the unreal part for number 2:19
the result of sum is:
real part=17
un
-
ارزش دهي اوليه به ساختمان
مي توان به متغيرهاي از نوع ساختمان كه داراي كلاس حافظه استاتيك و خارجي
باشند ، همانند آرايه ها مقدار اوليه داد . براي اين منظور مقادير اوليه در بين {
و} قرار گرفته و با كاما از يكديگر جدا ميشوند. مقاديري كه به متغير ساختمان
قرار مي گيرند : اولين مقدار به اولين جزئ، دومين مقدار به دومين جزئ و n امين
مقدار به n امين جزئ نسبت داده مي شود . اگر تعداد مقادير ، از تعداد اجزاي
متغير ساختمان كمتر باشند ، مقدار بقيه اجزاي عددي برابر با صفر و مقدار بقيه
اجزاي رشته اي برابر با NULL ( كاراكتر تهي ) خواهد شد .
مثال : ساختمان student را كه در زير آمده است در نظر بگيريد : struct student {
char name[21] ;
char address[30] ;
int grade[10] ;
int stno ;
} s1/ s2 ;
اكنون مجموعه دستورات زير را ملاحظه نماييد : struct student st1={( 1)
"ali"/"mohammad"/
"{0}/15} ;
struct student st2={0} ;( 2)
struct student st3={( 3)
"ahmad"/
'\0'/{15/20}/0} ;
struct student st4={"reza"} ;( 4)
دستور (1) ، مقدار "ali"در nameر، "mohammad"،در addressر ، صفر در كليه
عناصر آرايه grade و 15در stnoر از متغير st1 قرار مي گيرد . در دستور (2)
كليه اجزاي عددي متغير st2 ، مقدار صفر و اجزاي كاراكتري ، مقدار تهي را
مي پذيرند ، در دستور (3) ، مقدار "ahmad"در nameر ، رشته تهي در address ، 15
و 20 بترتيب در محل هاي اول و دوم آرايه grade و صفر در stno متغير st3 قرار
مي گيرد . در دستور (4) ، مقدار "reza" در جزئ name از متغير st4 قرار گرفته و ن متغير مقدار صفر و اجزاي غيرعددي مقدار تهي را مي پذيرند.
-
نتساب ساختمانها به يكديگر
در گونه هاي اوليه زبان C ، انتساب يك ساختمان به ساختمان ديگر امكان پذير
نبود ولي در گونه هاي جديد C و همچنين در توربو C انتساب متغيرهاي ساختمان كه
از يك نوع باشند امكان پذير است .
مثال : برنامه اي كه مشخصات چند دانشجو را بهمراه معدل آنها از ورودي خوانده
و سپس دانشجويي را كه دومين معدل را از نظر بزرگي دارد پيدا مي كند . struct student {
char name[30] ;
float grade ;
} ;
main)(
{
int i / n ;
float y ;
struct student st1={0} ;
struct student st1={0}/ st ;
printf("\n enter the number " );
printf(" of student :" );
scanf("%d"/&n );
for( i=1 ; i <= n ; i++)
{
printf("\nenter name of student");
printf(" %d: "/i );
scanf("%s"/st.name );
printf("\nenter grade of student");
printf(" %d: "/i );
scanf("%f"/&y );
st.grade=y ;
if( st.grade > st1.grade)
{
st2=st1 ;
st1=st ;
}
else if( st.grade > st2.grade)
st2=st ;
}
printf("\nthe name of second ");
printf("student is: %s"/st2.name );
printf("\n\nthe grade of second" );
printf(" student is:" );
printf("%.2f"/st2.grade );
}
نمونه اي از خروجي برنامه مثال بالا : enter the number of student:5
enter name of student 1:ali
enter grade of student 1:12.6
enter name of student 1:sadegh
enter grade of student 2:18.2
enter name of student 3:reza
enter grade of student 3:14.5
enter name of student 4:mohammad
enter grade of student 4:12
enter name of student 5:ahmad
enter grade of student 5:15
the name of second student is:ahmad
the grade of second student is:15.00
-
آرايه اي از ساختمانها
يكي از بيشترين موارد كاربرد ساختمانها ، تعريف شدن بصورت آرايه مي باشد .
براي تعريف آرايه اي از ساختمان ، ابتدا بايد نوع ساختمان را تعريف كرده وهمانند
تعريف متغيرهاي معمولي ، آرايه اي از آن نوع را تعريف نمود . بعنوان مثال دستور struct personel st[100];
آرايه 100 عنصري st را كه هر عنصر آن از نوع ساختمان هستند تعريف مي كند .
اگر فرض شود كه persno يكي از اجزاي ساختمان personal باشد به طريق زير ميتوان
به اين جزئ دسترسي پيدا كرد و مقداري را به آن نسبت داد : st [i] .persno= 100;
دستور فوق موجب مي شود تا مقدار جزئ persno از عنصر i ام آرايه st برابر با 100
گردد .
مثال : برنامه اي كه مشخصات تعدادي از افراد را كه شامل نام و آدرس ( شامل :
خيابان ، شهر و ... ) است ، از ورودي خوانده و در آرايه اي از ساختمان ها قرار
مي دهد . اين برنامه قادر است : فردي را از آرايه حذف كند ، فرد جديدي را به
آرايه اضافه نمايد و محتويات كل آرايه را چاپ كند . قبل از نوشتن اين برنامه
جهت درك صحيح آن ، ساختار سلسله مراتبي و وظايف هر يك از توابع شكل ( الف ) را
بيان مي كنيم :
ؤؤؤؤؤؤؤؤؤؤؤؤ | main )(|
ؤؤؤؤؤؤؤؤؤؤؤؤ |
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤ
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ |menu_seletc)(| | enter )(| | delete )(| | list )(| |init_list )(|
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ |
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤ |find_free )(|
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤ
شكل ( الف ) . نمودار سلسله مراتبي برنامه مثال
وظيفه تابع ()main : تعريف ساختمان ها ، توابع و فراخواني توابع مطابق شكل
( الف ) .
وظيفه تابع ()menu-slselect : ظاهر نمودن منويي در صفحه نمايش جهت انتخاب
نوع عمل برنامه .
وظيفه تابع ()enter : فراخواني تابع ()find-fefree جهت پيدا كردن جاي خالي
در آرايه ، خواندن اطلاعات از صفحه كليد و وارد كردن آنها در جاي پيدا شده در
آرايه .
وظيفه تابع ()delete : حذف افراد از آرايه ( براي اين منظور اولين محل از
جزئ name را برابر با '\0' قرار مي دهد ) .
وظيفه تابع ()list : نمايش محتويات كامل آرايه .
وظيفه تابع ()init-lslist : ارزش دهي به عناصر آرايه ( اولين محل از جزئname
را برابر با '\0' قرار مي دهد ) .
وظيفه تابع ()find-fefree : پيدا كردن جاي خالي در آرايه جهت قرار دادن
اطلاعات جديد در آن محل . /* program example 8 - 4 */
#include "stdio.h"
#include "stdlib.h"
#define MAX 100
struct addr{
char name[10] ;
char street[15] ;
char city[10] ;
char state[3] ;
unsigned long int zip;
} addr_info[MAX] ;
void init_list(void)/enter(void );
void delete(void)/list(void );
int menu_select(void)/find_free(void);
main(void)
{
char choice / ch ;
init_list )(;
for(;;){
choice=menu_select )(;
switch(choice)
{
case 1;
enter{} ;
break ;
case 2;
delete )(;
break ;
case 3;
list )(;
break ;
case 4;
exit(0 );
}
}
}
void init_list(void)
{
register int t ;
for(t=0 ; t addr_info[t].name[0]='\0' ;
}
menu_select(void)
{
char s[10] ;
int c ;
clrscr )(;
gotoxy(29.6 );
printf("1 )<< enter a name >>");
gotoxy(29.8 );
printf("2 )<< delete a name >>");
gotoxy(29.10 );
printf("3 )<< list the file >>");
gotoxy(29.12 );
printf("4 )<< Quit >>");
do {
gotoxy(24/15 );
printf(" Please enter your" );
printf(" choice(1-4:)");
gets(s );
c=atoi(s );
} while(c < 0 || c > 4 );
return( c );
}
void enter(void)
{
int slot ;
char s[80] ;
slot=find_free )(;
if(slot==-1)
{
printf("\n list full");
return ;
}
gotoxy(5/17 );
printf("enter name:" );
gets(addr_info[slot].name);
gotoxy(40/17 );
printf("enter street:" );
gets(addr_info[slot].street);
gotoxy(5/19 );
printf("enter city:" );
gets(addr_info[slot].city);
gotoxy(40/19 );
printf("enter state:" );
gets(addr_info[slot].state);
gotoxy(22/21 );
printf("enter zip:" );
gets(s );
addr_info[slot].zip=
strtoul(s/'\0'/10 );
}
find_free(void)
{
register int t ;
for(t=0 ; addr_info[t].name[0]
&& t < MAX ; ++t );
if(t==MAX )return- 1 ;
return t ;
}
void delete(void)
{
int slot ;
gotoxy(28/19 );
printf("enter record #(0-99:)");
scanf("%d"/&slot );
if(slot>=0 && slot addr info[slot].name[0]='\0';
}
void list(void)
{
register int t ;
int r=0 ;
char ch ;
clrscr )(;
gotoxy(25/2 );
printf(" << all information in");
printf(" list are:>>" );
gotoxy(13/3 );
printf("**********************");
printf("*******************" );
printf("********************" );
gotoxy(10/4 );
printf(" name street");
printf(" city " );
printf(" state zip");
printf(" " );
gotoxy(10/5);
;
("ؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤ ")printf ;
(" ؤؤؤؤؤؤ ")printf ;
("ؤؤؤؤ ؤؤؤؤؤؤؤ ")printf printf(" " );
for(t=0;t {
if(addr_info[t].name[0])
{
gotoxy(14/6+r );
printf("%s "/addr_info[t].name);
gotoxy(26/6+r );
printf("%s "/addr_info[t].street);
gotoxy(40/6+r );
printf("%s "/addr_info[t].city);
gotoxy(54/6+r );
printf("%s "/addr_info[t].state);
gotoxy(70/6+r );
printf("%1u "/addr_info[t].zip);
r++ ;
}
}
gotoxy(13/6+r );
printf("********************");
printf("*********************" );
printf("********************" );
gotoxy(27/7+r );
printf("press any key to continue");
ch=getch )(;
}
نكته اي كه در مورد برنامه مثال بالا بايد در نظر داشت اين است كه در اين
برنامه از توابع كتابخانه اي ()gotoxy ، ()atoi و ()strtoul استفاده شده است .
نمونه اي از خروجي برنامه مثال بالا : 1 )<< enter a name >>
2 )<< delete a name >>
3 )<< list the file >>
4 )<< Quit >>
Please enter your choice(1-4:)1
enter name:mohammad
enter street:daneshgah
enter city:mashhad
enter state:23
enter zip:123
1 )<< enter a name >>
2 )<< delete a name >>
3 )<< list the file >>
4 )<< Quit >>
Please enter your choice(1-4:)2
enter name:naser
enter street:asrar
enter city:mashhad
enter state:34
enter zip:432
1 )<< enter a name >>
2 )<< delete a name >>
3 )<< list the file >>
4 )<< Quit >>
Please enter your choice(1-4:)3
***************************************
name street city state zip
--- ------ ------ ------- --------
mohammad daneshgah mashhad 23 123
naser asrar mashhad 34 432
***************************************
press