PDA

View Full Version : سوال: سوال در خصوص ساختمان



HESAM ONLINE
شنبه 02 بهمن 1389, 01:18 صبح
سلام دوستان خسته نباشید.

یه سوال داشتم، من چطوری میتونم یکی از فیلدهای ساختمان از نوع متن رو به یک آرایه منتقل کنم؟ مستقیم که این کار رو میکنم پیغام خطا ظاهر میشه. Lvalue required




struct meminfo
{
char name[21];
char edu[21];
} member;


char name[20]
name=member.name



یه مشکل دیگه‌ای که هست اینه که اعضاء ساختمان که از نوع متن هستند، تو مقایسه‌هایی مثل زیر جواب نمیدن! علت چیه؟ ممنون میشم راهنمایی کنید.






cin>>name;
while(msrch.read((char *) &member, sizeof(struct meminfo))){
if (member.name==name
{

ghasemweb
شنبه 02 بهمن 1389, 02:46 صبح
راه حل مشكل اول :


name[1]=member.name[1]

مشكل دوم رو منظورت رو نگرفتم !

tdkhakpur
یک شنبه 03 بهمن 1389, 02:05 صبح
راه حل مشكل اول :


name[1]=member.name[1]

به این شکل شما فقط بایت اول رو کپی میکنید.

یه سوال داشتم، من چطوری میتونم یکی از فیلدهای ساختمان از نوع متن رو به یک آرایه منتقل کنم؟ مستقیم که این کار رو میکنم پیغام خطا ظاهر میشه

برای این کار از ابزار های استاندارد مثل strcpy و memcpy استفاده کنید اما بهتره راه اینه که از memcpy استفاده کنید.


memcpy(name,member.name, 21);


یه مشکل دیگه‌ای که هست اینه که اعضاء ساختمان که از نوع متن هستند، تو مقایسه‌هایی مثل زیر جواب نمیدن! علت چیه؟ ممنون میشم راهنمایی کنید.

برای این کار هم میتوانید از memcmp استفاده کنید البته مانند زیر.


if( memcmp(name,member.name, 21)==0){ // اگر دو رشته مساوی باشه
}

ghasemweb
یک شنبه 03 بهمن 1389, 11:26 صبح
برای این کار از ابزار های استاندارد مثل strcpy و memcpy استفاده کنید اما بهتره راه اینه که از memcpy استفاده کنید.
کد:
memcpy(name,member.name, 21);


ممنون من هم ميدونستم ولي خواستم كاربري كه تايپيك رو ايجاد كرده خودش به مسئله پي ببره تا بهتر درك كنه

Salar Ashgi
یک شنبه 03 بهمن 1389, 20:52 عصر
یک مثال بهتر :


#include <iostream>
#include <conio>
#include <string>
using namespace std;
struct Student{
string name;
int id;};
//----------------
int main(){
Student st1;
st1.name = "ali";
st1.id=250;
string str = st1.name;
cout<<str<<endl;
getch();
}


موفق باشید ./

HESAM ONLINE
پنج شنبه 14 بهمن 1389, 17:39 عصر
ممنون دوستان، خیلی کمک کردید. مشکلم حل شد.

یه سوال دیگه هم داشتم که اگه مقدوره راهنمایی کنید. چطوری میشه نوع اطلاعات ورودی توسط کاربر رو کنترل کرد؟ بیشتر منظورم داده‌ی عددی هست.

تابعی وجود داره که نوع داده‌ی متنی رو از عددی تشخیص بده؟

ghasemweb
جمعه 15 بهمن 1389, 18:33 عصر
شما باید از کد اسکی استفاده کنید تا بتونی کاراکترهای ورودی رو چک کنید که معتبره یا نه فکر.
دقیقا میخوای چه کاری انجام بدی یعنی میخوای فقط عدد رو بگیره یا فقط حروف؟

HESAM ONLINE
جمعه 15 بهمن 1389, 22:36 عصر
ممنون دوست عزیز.

فقط عدد!

من این کار رو انجام دادم.

لطفا کد زیر رو نگاه کنید. من نیاز دارم در خروجی تابع عدد مورد نظر در یک متغیر عددی قرار بگیره. باید چیکار کنم؟

اصلا این راهی که من رفتم درسته؟




#include <iostream.h>
#include <conio.h>

int chk (char id[],int len);

int main()
{
char id[11];
int num;
cout<<"Enter ID:";
cin>>id;
num=chk(id,11);
if (num==-1)
cout<<"\nincorrect number";
else
cout<<"\ncorrect number";

getch();
return 0;
}

int chk (char id[],int len)
{
int code,counter=0;
int dig;
int tnum[20];
char digit;
for (counter;counter<len-1;counter++)
{
if (!id[counter])
break;
digit=id[counter];
code=int(digit);
if (code<48 || code>57)
{
return -1;
break;
}
else
dig=digit-'0';
//return ????;

}
}

.:saeed:.
شنبه 16 بهمن 1389, 00:49 صبح
اگه نیاز داری که رشته شما به یه عدد تبدیل بشه باید علاوه بر این کارا ، هر مرتبه تو حلقه ات رقمو با یه توانی از ده ضرب کنی و با عددی که قراره از تابعت برگشت داده بشه جمع کنی
فرض کن رشتت این باشه "4352" خوب تو وقتی کاراکتر چهار را به عدد چهار تبدیل میکنی باید ضرب در 1000 کنی و مثلا توی یه متغیری نگهش داری بعدش 3 رو در 100 ضرب کنی و با 4000 قبلی جمع کنی و به همین صورت تا آخر

HESAM ONLINE
شنبه 16 بهمن 1389, 12:23 عصر
آقا سعید و آقا قاسم ممنون. به نتیجه رسید. :چشمک:





#include <iostream.h>
#include <conio.h>
#include <math.h>
#include <string.h>


long int chk (char id[],int len);

int main()
{
char id[11];
long num;
cout<<"Enter number:";
cin>>id;
num=chk(id,11);
if (num==-1)
cout<<"\nincorrect input";
else{
cout<<"\ncorrect input";
cout<<"\nnumber is:"<<num;
}

getch();
return 0;
}

long int chk (char id[],int len)
{
int code,dig,idlen,counter=0;
long int renum=0;
char digit;
idlen=strlen(id);
while(counter<idlen)
{
digit=id[counter];
code=int(digit);
if (code<48 || code>57)
{
return -1;
break;
}
dig=digit-'0';
renum+=pow(10,(idlen-1)-counter)*dig;
counter++;
}
return renum;
}

ghasemweb
دوشنبه 18 بهمن 1389, 19:36 عصر
خواهش میکنم دوست عزیز .
من یه سورس نوشتم که فکر کنم بهینه تر باشه اگه خواستی ازش استفاده کن


#include <iostream.h>
#include <conio.h>
void main()
{
char id[11];
int p=0;
int code;
cout<<"Enter ID:";
while(p<11)
{
if(kbhit())
{
code=getch();
if (code>=48 && code<=57)
{
id[p++]=code;
cout <<id[p-1];
}
}
}

cout<<"\nInput:"<<id;

}

موفق باشید