چی میشه برای Cin زیر ارور نگرفت؟ :8:
char *name[5] ;s
cin >> name[i]; s
i هم که شمارنده حلقمونه. ارور Fatal و ... میده. چرا؟
Printable View
چی میشه برای Cin زیر ارور نگرفت؟ :8:
char *name[5] ;s
cin >> name[i]; s
i هم که شمارنده حلقمونه. ارور Fatal و ... میده. چرا؟
اول باید i رو تعریف کنید.بعد توی یک حلقه ی for بذارید.
اگر متن ارور و پی کد رو بذارید بهتر میشه کمک کرد.
دوست عزیز دیگه واسه اینکه تاپیک طولانی نشه گفتم i حلقمونه. در ضمن کاراکترها از input خونده میشن و نه Output
ارور Access violation میده تو Borland C++ 5.02کد:#include<iostream.h>
int main(){
char *list[5];
for (int i=0;i<5;i++)
cin >> list[i];
return 0;
}
و توی 4.5 ارور Exception
خب اینجا چرا دیگه * گذاشتین ؟
اینو حذف کنین حله .کد:char *list[5];
این آرایه ای از اشاره گر هاست. این طوریه حافظه فقط به اندازه طول رشته از سیستم عامل گرفته میشه و نه به اندازه یه آرایه 2 بعدی که ممکنه تعدادی از خونه های حافظه خالی بمونن. حتما میدونید!!؟
میشه اینطوریه مقدار اولیه داد بهشون ولی میخوام با Cin ردیفش کرد.
یا یک آرایه ی 2 بعدی درست کنی مقادیرش رو به آرایه ای از اشاره گرها اختصاص بدی.کد:char *list[5]={
"Ali",
"Vahid",
"Saman",
};
مثلا توی یه حلقه مقادیر آرایه 2 بعدی رو که گرفتی بگی list[i]= myArray[i] s که اینطوری بدجوری حافظه به فنا میره.
اٌه مای گاد ...
فک کردم یه استرینگ می خواین بگیرین .
آخه اینجوری نمیشه که . وقتی تو این حالت از یه اشاره گر استفاده می کنین یه آرایه بدون نام تو حافظه read-only ایجاد میشه و چنین آرایه ای رو نمیشه تغییر داد که سی این کردن به معنی همون تغییر دادنه .
من فکر کردم قراره از طریق کیبورد دیتا وارد بشه و بهمین دلیل از cinاستفاده کردید.خب اینطوری که مشکل داره عزیز.معلومه ارور میگیره.
ولی اگه Read-Only بود نمیشد اینطوری بهش مقدار داد. این Code منه.
اینجا چه خبره؟کد:
#include <iostream.h>
#include <conio.h>
void Fill(char Sptr[][15]){
for (int i=0;i<5;i++)
cin >> Sptr[i];
cout <<endl;
}
void PointerFill(char **myPointer,char FilledString[][15]){
for (int j=0;j<5;j++)
myPointer[j]= FilledString[j];
}
void PrintArraysOfPointers(char *strPrinter[]){
for (int k=0;k<5;k++)
cout << strPrinter[k]<<' ';
}
int main(){
char myString[5][15];// '5' Inputs With Maximum Length Of '15'
char *list[5];//Arrays Of Pointers
Fill(myString);//Fills The Array With desired Inputs.
PointerFill(list,myString);//Copies The 2D Array To 'Arrays Of Pointer'
PrintArraysOfPointers(list);
getch();
return 0;}
مشکل اینجاست.پسر خوب تو داری اینیشیالیزیشن می کنی؟چی کار می کنی؟این آرایه باید از یجایی بخونه.شما دستور cin رو دادی.اما...نقل قول:
[PHP]void Fill(char Sptr[][15]){
for (int i=0;i<5;i++)
cin >> Sptr[i];
cout <<endl;
}[/PHP]
چی چه خبره مهندس؟
منظورم از چه خبره همون داخل Code.
اینیشالایز تا اونجایی که من میدونم یعنی هر زمان مثلا گفتی int a سریع بعدش مساوی بذاری و مقدار بهش بدی.
اما کاری که من کردم مقداردهی پس از تعریفه؛ که با Cin مشکل داره؛ ولی با کپی از آرایه مشکلی نداره. ابهام من اینجاست.
---------- Post added at 11:09 PM ---------- Previous post was at 11:07 PM ----------
در ضمن من دارم با Cin توی آرایه می نویسم. مشکلش کجاست؟
تابحال جایی ندیدم که با cinمقداردهی کنن احتمالا امکانش هست.
این دستور مقادیر رو می خونه.درست؟این مقادیر باید از کجا خونده بشن؟درست.شما میگید می خواید تو آرایه بنویسید.اما چی رو می خواید بنویسید و این مقادیر باید از کجا خونده بشن؟و اینکه چطور یک آرایه یک بعدی می تونه تو انتساب با یک آرایه دوبعدی شرکت کنه؟من کد شما رو توی توربو ران کردم.اروری نداد.اما خب.نتیچه ای هم نداشت.
میخوای ارایه دوبعدی رو به صورت یه بعدی مقدار دهی کنی . مگه میشه.
شما برنامه رو اجرا کنید -> ورودی به برنامه بدید-> میبینید که مقادیر آرایه 2 بعدی رشته ای در داخل لیست قرار میگیره و چاپشون هم میکنه.
در ضمن همونطور که میدونید آرایه 2 بعدی رشته ای، محل 0اش به رشته اول اشاره میکنه و با دو اندیس مثل myString[0][2] s به کاراکتر اشاره میکنه پس مشکلی نیست که آرایه دو بعدی رو با یک اندیس به چیزی نسبت داد. (البته از نوع رشته ای)
چرا تو انتساب هم ارور میده .نقل قول:
شما اینجا دارین کل یه پوینتر رو به یکی دیگه انتساب میدین که اینجا آدرس ها کپی میشه و برا همین مقادیر هم یکی میشن . در واقع مقادیر داخل اینا اینجا کپی نمی شن . آدرسها کپی میشن .
ولی تو cin که یک جا نمی گیره و کاراکتر به کاراکتر میزنه ارور داده میشه . چون می خواد محتویاتو عوض کنه .
شما هم اگه بخواین کاراکتر به کاراکتر پوینتر رو کپی کنین باز Access Violation می گیرین .
هیچ خبر خاصی نیس .
sin2x=2sinxcosx تکنیک زدی در حد فراقاره!
پس نتیجه این شد که *list مثل یه اشاره گر معمولی آدرس ها رو نگه میداره و به خونه های myString اشاره میکنه.
خدا رو شکر که بالاخره مشکلتون رفع شد.اما برنامتون رو ران کردم و ورودی هم نخواست.
بله در واقع اینجا list پنج تا پوینتر می باشد که 5 آدرس رو نگه می داره .نقل قول:
واقعا چه بحث نفس گیری