PDA

View Full Version : وارد کردن کاراکتر به جاى عدد و خطاى سر ریز C++



m.soleimani
شنبه 17 فروردین 1387, 10:22 صبح
سلام خسته نباشید
من یک برنامه در کنسول نوشتم که یکى از موارد اون گرفتن یه مقدار عددى از کاربر هست که این مقدار میشه جزوى از یک آرایه int هست ... بگذریم

در هنگام گرفتن ورودى اگر کاربر به جاى عدد از کاراکتر استفاده کند برنامه با خطاى سر ریز خاتمه پیدا میکند

آیا باید از تابع خاصى براى چک کردن این مورد استفاده کنم یا کد خاصى باید بنویسم ؟

دوستان یه لطف کنن بگن چه کارى باید انجام بدم البته من گشتم ولى چیزى تو سایت نجستم که احتمالآ باشه و یه خواهش دیگه هم دارم اینه که اگر براتون امکان داره جواب بدید بله من هم بیشتر مطالب را خوندم که اینجا براى کسى برنامه نوشته نمیشه و شما شروع کن اگه مشکل داشتى بپرس :اشتباه: با اجازه یه چیزى سر هم کردم که توى یه تابع به صورت تک تک اعضاى آرایه را چک میکنه که ببینه عدد هست یا نه که البته فقط فکر کنم ایده این کار درست باشه او تابع را با یه قسمت از کد اضافه میکنم شاید این سوال برا خیلى ها پیش اومده باشه به هر حال تازه کار بودن هست هزار درد :خجالت:


bool FindCaracter( int iVar )
{

bool OK;
switch( iVar )
{
case 0 || 1 || 2 || 3 || 4 || 5 || 6 || 7 || 8 || 9:
{
OK = true;
break;
}
default:
{
OK = false;
break;
}
}
return OK;
}

bool TestIntegrity( int iVar[] )
{
bool OK;
for( int i = 0; iVar[i] != NULL; i++ )
{
OK = FindCaracter( iVar[i] );
if( OK == false )
returnfalse;
}
returntrue;
}

اینم قسمتى از تابع main


if( Question[0] == 'N' && Question[1] == NULL || Question[0] == 'n' && Question[1] == NULL )
{
cout << "\nPlease Enter Customer Number : ";
cin >> CN[cCN];
while( CN[cCN] <= 0 || TestIntegrity(CN) == false )
{
cout << "\n! Error Value you can't use caracter -> ( No Caracter No Alone 0 ) Only Number\n\n";
cout << "\nPlease Enter Customer Number : ";
cin >> CN[cCN];
}
}
cCN++;


باید ببخشید اگه توى متن ها یا خود برنامه اشتباه وجود داره این فقط براى آزمایش هست راستى میشه راهنمایى کنید مثل شما کد را بزارم با همون ترتیب ide که به هم نریزه بقیه بهتر بتونن از کد استفاده کنند به هر حال دست همه درد نکنه پیش پیش :تشویق:

emad_67
شنبه 17 فروردین 1387, 13:32 عصر
در صورتی که عددی که میخوای از ورودی بگیری 1 رقمی هست میتونی با تابع isdigit در هدر ctype.h چک کنی ببینی کاراکتری که وارد شده عدد هست یا نه. این تابع یک کاراکتر به عنوان ورودی میگیره و مشخص میکنه عدد هست یا نه.
در صورتی که عددت چند رقمی هست من تابعی رو برای این کار پیدا نکردم که این کارو بکنه ولی میتونی ابتدا عدد رو به صورت رشته از وزودی بگیری و بعد اونو توسط تابع atoi تبدیل کنی به عدد و مجددا عدد به دست اومده رو توسط itoa به رشته تبدیل کنی و بعد طول رشته رو با رشته اولیه مقایسه کنی. در صورتی که هر دو طولشون یکی بود یعنی رشته وارد شده عدد هست که میتونی اونو تو آرایه قرار بدی.
اینم برنامه ای که براش نوشتم:


#include <iostream.h>
#include <string.h>
#include<stdlib.h>
#include<ctype.h>
void main()
{
int a[10];
char temp[10];

cin>>temp;
int x=atoi(temp);
char xstr[10];

itoa(x,xstr,10);
if(strlen(temp)== strlen(xstr))
cout<<"string is integer\n";
else
cout<<"Not integer!\n";
}
توی برنامت یه جایی نوشتی :


switch( iVar )
{
case 0 || 1 || 2 || 3 || 4 || 5 || 6 || 7 || 8 || 9:

توی case نمیشه از || یا && استفاده کرد باید اینجوری بنویسی:


switch( iVar )
{
case 0:
case 1:
case 2:
...
{
OK = true;
break;
}
}

میشه راهنمایى کنید مثل شما کد را بزارم با همون ترتیب ide که به هم نریزه بقیه بهتر بتونن از کد استفاده کنند به هر حال دست همه درد نکنه پیش پیش :تشویق:باید کدت رو توی تگ کد قرار بدی. در ادیتور یه دکمه هست به شکل #، روی اون کیلیک کن و کدت رو بزار بین تگی که نوشته میشه.

m.soleimani
شنبه 17 فروردین 1387, 13:49 عصر
در صورتی که عددی که میخوای از ورودی بگیری 1 رقمی هست میتونی با تابع isdigit در هدر ctype.h چک کنی ببینی کاراکتری که وارد شده عدد هست یا نه. این تابع یک کاراکتر به عنوان ورودی میگیره و مشخص میکنه عدد هست یا نه.
در صورتی که عددت چند رقمی هست من تابعی رو برای این کار پیدا نکردم که این کارو بکنه ولی میتونی ابتدا عدد رو به صورت رشته از وزودی بگیری و بعد اونو توسط تابع atoi تبدیل کنی به عدد و مجددا عدد به دست اومده رو توسط itoa به رشته تبدیل کنی و بعد طول رشته رو با رشته اولیه مقایسه کنی. در صورتی که هر دو طولشون یکی بود یعنی رشته وارد شده عدد هست که میتونی اونو تو آرایه قرار بدی.
اینم برنامه ای که براش نوشتم:


#include <iostream.h>
#include <string.h>
#include<stdlib.h>
#include<ctype.h>
void main()
{
int a[10];
char temp[10];

cin>>temp;
int x=atoi(temp);
char xstr[10];

itoa(x,xstr,10);
if(strlen(temp)== strlen(xstr))
cout<<"string is integer\n";
else
cout<<"Not integer!\n";
}
توی برنامت یه جایی نوشتی :


switch( iVar )
{
case 0 || 1 || 2 || 3 || 4 || 5 || 6 || 7 || 8 || 9:

توی case نمیشه از || یا && استفاده کرد باید اینجوری بنویسی:


switch( iVar )
{
case 0:
case 1:
case 2:
...
{
OK = true;
break;
}
}
باید کدت رو توی تگ کد قرار بدی. در ادیتور یه دکمه هست به شکل #، روی اون کیلیک کن و کدت رو بزار بین تگی که نوشته میشه.


دست شما درد نکنه خیلى ممنون
ورودى قرار یه عدد چند رقمى باشه منم زیاد گشتم دنبال تابعى که این کار رو بکنه ولى نبود بازم ممنونم :قلب: