PDA

View Full Version : چرا این برنامه درست اجرا نمیشه؟



fshb_ 1370
شنبه 30 مرداد 1389, 10:00 صبح
سلام
چرا این برنامه ای که من نوشتم car_p[0].name رو دریافت نمیکنه؟


#include<iostream>
#include<cstring>
using namespace std;
int main()
{
struct car
{
char name[20];
int year_b;
};
int size;
cout<<"How many cars do you wish to catalog? ";
cin>>size;

car *car_p=new car[size];
for (int i=0;i<size;i++)
{
cout<<"car#"<<i+1<<":\n";
cout<<"please enter the make:";
cin.getline(car_p[i].name,20);
cout<<endl<<"please enter the year made:";
cin>>car_p[i].year_b;
cin.get();
}
cout<<"Here is your collection:"<<endl;
for(int i=0;i<size;i++)
cout<<car_p[i].year_b<<" "<<car_p[i].name<<endl;
return 0;
}

Salar Ashgi
شنبه 30 مرداد 1389, 12:30 عصر
اصلاح شد ./
(در بورلند کامپایل کردم ، جهت کامپایل در VC خودتون تغییرات لازمه
رو انجام بدید .)



#include <iostream>
#include <string>
#include <conio>
using namespace std;
struct car
{
char name[20];
int year_b;
};
int main()
{

int size;
cout<<"How many cars do you wish to catalog? ";
cin>>size;

car *car_p=new car[size];
for (int i=0;i<size;i++)
{
cout<<"car#"<<i+1<<":\n";
cout<<"please enter the make:\n";
cin>>car_p[i].name;
cout<<"please enter the year made:\n";
cin>>car_p[i].year_b;
cin.get();
}
cout<<"Here is your collection:"<<endl;
for(int i=0;i<size;i++)
cout<<car_p[i].year_b<<" "<<car_p[i].name<<endl;
getch();
}

fshb_ 1370
شنبه 30 مرداد 1389, 15:05 عصر
ممنون از جوابتون
یعنی اشکال کد من فقط استفاده از cin.getline بود؟ چرا؟

من تو کتاب خوندم cin مثل cin.get کاراکترهای new line و space ها رو در صف ورودی نگه نمیداره. پس باید بعد از وارد کردن اولی و زدن enter، خط جدید در متغیر دوم قرار بگیره. ولی این جوری نمیشه، چرا؟

من میخوام name از چند کلمه تشکیل بشه که بین کلمات فاصله است، ولی با cin نميشه و استفاده از cin.getline هم میشه برنامه قبلی خودم که مشکل داره، چی کار کنم؟:عصبانی++:

tdkhakpur
شنبه 30 مرداد 1389, 15:30 عصر
چرا از gets استفاده نمیکنید؟

fshb_ 1370
شنبه 30 مرداد 1389, 16:39 عصر
چرا از gets استفاده نمیکنید؟
gets چیه؟ من برای دریافت ورودی cin و cin.get و cin.getline خوندم.

Salar Ashgi
شنبه 30 مرداد 1389, 17:03 عصر
یعنی اشکال کد من فقط استفاده از cin.getline بود؟


شما Struct تون رو هم داخل Main تعریف کرده بودید ، که بهتره خارج از Main تعریف بشه !

matinfar1981
شنبه 30 مرداد 1389, 17:48 عصر
از cin.get استفاده کن . فقط باید دو تا cin.get() خالی یکی قبل و یکی بعدش باشه .
cout<<"Enter name :";

cin.get();
cin.get(ob.name,20,'\n');

cin.get();

tdkhakpur
شنبه 30 مرداد 1389, 17:53 عصر
gets چیه؟ من برای دریافت ورودی cin و cin.get و cin.getline خوندم.
خب میتونه ورودی را تا زمانی که کلید اینتر را نزده اید داخل حافظه کپی کنه مثل


gets(car_p[0].name);
یا
gets(car_p[i].name);

fshb_ 1370
چهارشنبه 03 شهریور 1389, 16:55 عصر
ممنون از پاسخ همه دوستان.
ولی همه این جواب ها باعث میشد که برنامه دیگه error نده، من میخوام بدونم چرا استفاده از cin.getline سبب میشه که متغیر car_p[0].name رو نتونه دریافت کنه؟

tdkhakpur
چهارشنبه 03 شهریور 1389, 17:42 عصر
ولی همه این جواب ها باعث میشد که برنامه دیگه error نده، من میخوام بدونم چرا استفاده از cin.getline سبب میشه که متغیر car_p[0].name رو نتونه دریافت کنه؟

برای اینکه cin داخل ساختار خودش احتیاج به کنترل داره و اگر شما بدون کنترل صحیح از این ابزار تقاضای ورودی میکنید اینگونه اتفاقات خواهد افتاد.
به همین دلیل قبل از هر cin کد زیر را هم قید کنید تا حافظه ریست شود.

cin >> ws;