PDA

View Full Version : اشکالات این کد



fshb_ 1370
جمعه 21 مرداد 1390, 15:15 عصر
سلام
من ی تابع دارم ک میخواد یک pointer-to-char رو برابر یک آرایه ای از char قرار میده. من این رو نوشتم ولی اررور میده.(g.fullname=*name;) در تابعvoid setgolf(golf &g,const char *name,int hc

تابع int setgolf(golf &g) مقدار g.fullname رو با cin دریافت نمیکنه و ی سری شکل و عدد نشون میده.
میخوام اگر در fullname نامی وارد کردم عدد 1 رو return کنه و اگر fullname خالی بود عدد 0 رو return کنه، ولی نمیدونم باید براش چه کدی بنویسم.
ممنون میشم کسی توضیح بده.
PR2.h


#ifndef PR2_H_
#define PR2_H_
const int Len=40;
struct golf
{
char fullname[Len];
int handicap;
};
void setgolf(golf &g,const char *name,int hc);
int setgolf(golf &g);
void handicap(golf &g,int hc);
void showgolf(const golf &g);
#endif


PR2.cpp


#include <iostream>
using namespace std;
#include "PR2.h"
void setgolf(golf &g,const char *name,int hc)
{
g.fullname=*name; //error
g.handicap=hc;
}
int setgolf(golf &g)
{
cout<<"Enter fullname: ";
cin>>g.fullname;
cout<<"\nEnter handicap: ";
cin>>g.handicap;
cout<<"\n";
/*if()
return 1;
else
return 0;*/
return 0;
}
void handicap(golf &g,int hc)
{
g.handicap=hc;
}
void showgolf(const golf &g)
{
cout<<"fullname:"<<g.fullname<<", handicap:"<<g.handicap<<"\n";
}


PR2M.cpp


#include<iostream>
using namespace std;
#include "PR2.h"
int main()
{
golf ann;
setgolf(ann,"Hashemian",20); //error
showgolf(ann);
return 0;
}

_hamid
جمعه 21 مرداد 1390, 16:44 عصر
اینو امتحان کن
g.fullname=name;
اونی که تو نوشتی داره محتوا رو مساوی نام آرایه(یعنی اشاره گر) می کنه که اشتباهه.
اگر بخوای محتوا رو نسبت بدی باید مثلا اینجوری کنی:
if (nlen=strlen(name) < Len) {
for(int i=0;i<nlen;i++)
g.fullname[i]=name[i];
}
برای اینکه بفهمی وارد کرده یا نه هم می تونی از strcmp یا strlen استفاده کنی.

ahmad-hagh
شنبه 22 مرداد 1390, 01:26 صبح
به جا g.fullname=*name; از تابع strcpy یا از حلقه تکرار واسه کپی رشتت استفاده کن
و برای مقایسه رشته هات (تو if ) از strlen استفاده کن که طول رشتت رو میده

fshb_ 1370
شنبه 22 مرداد 1390, 10:37 صبح
ممنون از پاسختون
من ب ی مشکلی برخوردم، اگر من ی pointer تعریف کنم، اسم pointer آدرس متغیری که به اون اشاره میکنه هست و *اسم پوینتر محتویات اون متغیری که pointer بهش اشاره میکنه.درسته؟


int a=4;
int *p-a=&a;

در اینجا p-a یک اشاره گر هست که آدرس a رو در حافظه نشون میده و *p-a محتویات a رو نشون میده. درسته؟؟؟

_hamid
شنبه 22 مرداد 1390, 13:37 عصر
اون کدی که خودت زدی اشتباهه.
int a = 4;
int *p = &a;

الان p آدرس متغییر a در حافظه است. یعنی &a و *p محتوای متغییر a یعنی 4 .
اینو هم ببین:
#include <iostream>
using std::endl;
using std::cout;
int main()
{
int a=4;
int*p=&a;
cout << p << endl;
p = p-a;
cout << p << endl;
return 0;
}

اول آدرس خود a رو چاپ می کنه بعد آدرس هونجا منهای ۴ تا خونه قبل تر.