PDA

View Full Version : سوال: توضیح و اشکال در کد



hafez1
یک شنبه 21 خرداد 1391, 15:21 عصر
این برنامه یه فایل متنی با نام input.txt دارد.که حاوی محتویات زیر است:
hello C++‎‎ programmers
به این کدها بنگرید!


#include<iostream>
#include<fstream>
class myfirstclass
{
public:
void greeting();
myfirstclass();
private:
char msg[22];
int loopcounter;
fstream myfile;
};
myfirstclass::myfirstclass()
{
//open the file with the data
myfile.open("input.txt",ios ::in);
myfile.getline(msg,22);
}
void myfirstclass::greeting()
{
cout<<msg<<"\n";
}
int main()
{
myfirstclass myfirstobject;
myfirstobject.greeting()
return 0;
}

اول اینکه یکم توضیح در باره روند کلی برنامه نیاز دارم.
در خط 16 ios::in یعنی چی؟
در خط 17 getline چی کار می کنه؟
ودر آخر :چرا ارور می ده؟؟؟؟؟؟؟؟؟؟؟؟/:متعجب:

#target
یک شنبه 21 خرداد 1391, 16:47 عصر
ios::in یعنی ورودی
getline ی خط میگیره از فایل

کل برنامه هم خط اول از فایل متنی رو میخونه چاپ میکنه
برنامه کامپایل میشه و ایرادی نداره (البته خط 26 آخرش یک ; نذاشتین )
با iostram.h , fstream.h تست کنید یا با همون هیدرها
using namespace std ; رو در خط 3 اضافه کنین

MAN_UNITED
یک شنبه 21 خرداد 1391, 16:55 عصر
سلام دوست عزیز
این برنامه یک مثال ساده است که هم از کلاس استفاده کرده هم از استریم ها برای کار با فایل ها
در خط 16 ios::in به کامپایلر میگه که این استریم نقش ورودی داره ، این کدها اصطلاحاً وضعیت استریم رو نشون میدن که بهشون میگن ios state حالا چرا اینجا وضعیت و نوشتیم چون شی استریم از کلاس fstream هستش این کلاس شی هاش هم میتونن ورودی باشن هم خروجی و هم ورودی و خروجی
اگه از کلاس ifstream بود نیازی به نوشتن وضعیت نبود چون به صورت پیش فرض وضعیت ios کلاس in هستش و از اسم کلاس هم معلومه چون اولش i هستش، برای شی های فقط خروجی از ofstream استفاده میشه
در خط 17 هم متد getline هستش که این متد آرایه کاراکتری می خونه یعنی اینجا از فایل ورودی میخونه تا پایان خط
الان این جا یکی از اطلاعات ورودی تابع (آرگومان) کمه ولی اشکال نداره و به اون کاراکتر نگهبان میگن که به صورت پیش فرض کاراکتر اینتر ('n\') هستش یعنی جمله ای رو در فایل میخونه تا به اولین اینتر برسه و در msg ذخیره میکنه
می تونستیم اینجوری هم بنویسیم
myfile.getline(msg,22,'\n')
یه مورد دیگه یه تابع معمولی هم به نام getline وجود داره که اون رشته کلاس string می خونه و شی کلاس string یکی از آرگومان اون تابع هست و به اینصورت فراخوانی میشه
getline(myfile,str,'\n')
که اینجا str یک شی از کلاس string هستش

و بالاخره چرا ارور میده دلیلش ننوشتن
using namespace std;
در بالای کد ها بعد از include ها هستش