PDA

View Full Version : مشکل در عدد علامت دار



farzad.sharifi
شنبه 01 تیر 1387, 08:53 صبح
سلام دوستان
من دو عدد رو بصورت رشته گرفتم( با دستور gets) که هر دو باید حتما علامت دار باشند (علامت + یا _ ) مثلا 234+ و 54- ، این دستور رو اضافه کردم که اگه دو عدد ورودی فاقد علامت بودن Error بده اما نمیدونم چرا وقتی دو عدد اگه علامت هم داشته باشند باز هم Error میده در حالی که باید بره خط های بعدی برنامه رو اجرا کنه ؟ ممنون میشم کسی راهنمائی کنه

این کدی که استفاده میکنم اما گویا ایراد داره


if(num1[0]!='-'||num1[0]!='+'&&num2[0]!='-'||num2[0]!='+')
{
printf("\n ERROR! Enter + or -");
return 0;
}

Arash m
یک شنبه 02 تیر 1387, 19:39 عصر
سلام.
کدی رو که خواسته بودی نوشتم :

if((*num1!='-'&&*num1!='+')||(*num2!='-'&&*num2!='+')){
cout<<"ERROR";
getch();
return 0;
}ولی چه بهتره که از این کد استفاده کنی :


do{
cout<<"Enter num1 , num2 :";
cin>>num1>>num2;
if((*num1!='-'&&*num1!='+')||(*num2!='-'&&*num2!='+'))
cout<<"Please enter \"-\" or \"+\" + number.please again."<<endl;
}while((*num1!='-'&&*num1!='+')||(*num2!='-'&&*num2!='+'));

تا اگه کاربر بدون علامت وارد کرد خطا بده و دباره از کاربر بگیره تا وقتی که کاربر با علامت وارد بکنه.

درضمن دوست عزیز چه بهتره که به جای stdio.h از iostream.h استفاده بکنی چون
که توی iostream.h به جای دستور scanf از دستور cin و به جای printf از دستور cout استفاده میشه که هم خیلی بهتره و هم ساده تر.
من توی این برنامه از این دستورات استفاده کردم.

farzad.sharifi
سه شنبه 04 تیر 1387, 08:54 صبح
واقعا ممنون درست شد فقط یک سوال این کدی که نوشتین


if((*num1!='-'&&*num1!='+')||(*num2!='-'&&*num2!='+'))

از کجا می فهمه که اگه آرایه اول عدد وارد شده مثبت یا منفی نبود error بده ؟ کار *که قبل num1 و num2 گذاشتین چیه؟ مرسی

Arash m
سه شنبه 04 تیر 1387, 16:26 عصر
سلام.
در واقع آرایه نوعی اشاره گر هست و خانه های آریه هم پشت سر هم هست.
دسترسی به خانه های اشره گر هم با * امکان پذیره.
من وقتی مینویسم :

*(str+1)یعنی اشاره میکنم به خانه ی بعدی که اشاره گر به اونجا اشاره میکنه چون خانه های آرایه هم پشت سر هم هستن :


*(str+2)این دستو اشاره مینه به دو خانه بعد از اشاره گر که میشه خانه سوم آرایه

پس:

*(str+2) مساوی است با str[2]یعنی این دو دستور هیچ فرقی با هم ندارن.
یعنی این دستور اشاره مینه به حرف سوم این رشته.
چون ممکه پا مفهوم هایی که گفتم زیاد آشنا نباشی به من حتما بگو تا بیشتر توضیح بدم
حتماً حتماً بگو.

farzad.sharifi
سه شنبه 04 تیر 1387, 18:24 عصر
واقعا ممنونم
یعنی تو این کدی که نوشتین اشاره گر به تک تک آرایه های num1 یا num2 اشاره میکنه و اگر هیچ کدام از آرایه های num1 یا num2 ، منفی یا مثبت نبود error میدهد؟ درسته؟

Arash m
سه شنبه 04 تیر 1387, 18:55 عصر
من با دستور
*num1در واقع به خود آرایه اشاره میکنم و چون اون رو علاوه هیچ چیزی نمیکنم اشاره میکنه به خانه ی اول آرایه یا همون حرف اول رشته.
وقتی ما با دستوری آرایه ای رو درست میکنیم کامپایلر یه اشاره گر به نام آرایه ایجاد میکنه و به تعداد خانه هایی که نوشتیم در حافظه خانه رزرو مینه و آدرس اولین خانه رو میزاره تو اون(اشاره گر یا همون آرایه).
وقتی من این کد رو مینویسم یعنی به خانه اول آرایه اشاره میکنم.
با نوشتن این دستور:

char str[50];با نوشتن این دستور در واقع کامپایلر این دستور رو اجرا میکنه:

char *str;
str=new char[50];

توضیح : دستور new برای رزرو خانه در حافظه به کار میره.

باید اضافه بکنم که آرایه نوع Const اشاره گر هست چون نمیشه آدرس آرایه رو تغییر داد ولی مال اشاره گر رو میشه تغییر داد.
امیوارم متوجه شده باشی.
مرسی از اینکه میپرسی.:چشمک: