PDA

View Full Version : مشکل در کار با فایلها



white tower
سه شنبه 06 بهمن 1388, 21:35 عصر
سلام.من دارم با فایلها کار می کنم.الان یه قطعه کد نوشتم که اطلاعات n دانشجو رو از ورودی بگیره و وارد فایل کنه.این روش که رفتم درسته؟یعنی اطلاعات وارد فایل میشن؟فقط می خوام بدونم با این روش اطلاعات درست وارد فایل می شن یا نه؟

#include<iostream>
#include<fstream>
#include<cstdlib>
using namespace std;
struct jax{
string name, lname, stdno;
unsigned short int age;
float ave;
bool sex;
};
int main(){
ofstream out_to_file("/home/my/Desktop/11.dat");
bool flag = true;
jax temp_strt;

while(flag){
system("clear");
cout<<"enter name:";
cin>>temp_strt.name;
cout<<"enter last name:";
cin>>temp_strt.lname;
cout<<"enter age:";
cin>>temp_strt.age;
cout<<"enter stdno:";
cin>>temp_strt.stdno;
unsigned short int t_sex;
cout<<"enter sex (1-male 2-female) :";
cin>>t_sex;
switch(t_sex){
case 1 : temp_strt.sex = true;
break;
case 2 : temp_strt.sex = false;
break;
}
cout<<"enter average:";
cin>>temp_strt.ave;
out_to_file.write((char*)&temp_strt, sizeof(temp_strt));
unsigned short int conti;
cout<<"do you want to continue (1-Yes 2-No):";
cin>>conti;
if(conti == 2)
flag = false;
}

return 0;
}

qanewaisi
سه شنبه 06 بهمن 1388, 21:53 عصر
سلام
دوست عزیز من برنامه تو اجرا کردم ،ولی 17 تا error داشت!!!
اصل کاری از هدر cstdlib.h خطا می گرفت(با سه کامپایلر امتحان کردم)

white tower
چهارشنبه 07 بهمن 1388, 08:07 صبح
سلام
دوست عزیز من برنامه تو اجرا کردم ،ولی 17 تا error داشت!!!
اصل کاری از هدر cstdlib.h خطا می گرفت(با سه کامپایلر امتحان کردم)
می بخشید.شاید یه جاهاییش باید تغییر می دادم بعد می ذاشتم چون تو لینوکس می نویسم.البته ارور اونطوری نداشت مثلا شاید فقط آدرس فایلی که ذخیره می کنه تو ویندوز نشناسه.
من با C++‎‎ builder امتحان کردم بدون ارور کامپایل شد و توی بورلند سی پلاس هم فقط با دو تا تغییر کوچیک یکی واسه cstdlib که باید میشد stdlib و یکی هم فضای نامش رو بر داشتم همین.البته باید بگم که نمی دونم چرا هم gcc هم بورلند به نبود سرفایل string گیر ندادن!!به هر حال ممنون
فقط یه نگاه به تکنیک کارم بندازید باید متوجه بشید که درست انجام دادم یا نه؟فکر نمی کنم تست کردن بخواد.

white tower
پنج شنبه 08 بهمن 1388, 10:07 صبح
یعنی هیچکس اینجا بلد نیست یه رکورد رو بریزه تو فایل؟:متفکر:
نظری هم ندارید؟

#
include<iostream.h>
#include<fstream.h>
#include<string>

struct jax{
string name, lname, stdno;
unsigned short int age;
float ave;
bool sex;
};
int main(){
ofstream out_to_file("/home/my/Desktop/11.dat");
bool flag = true;
jax temp_strt;

while(flag){
//system("clear");
cout<<"enter name:";
cin>>temp_strt.name;
cout<<"enter last name:";
cin>>temp_strt.lname;
cout<<"enter age:";
cin>>temp_strt.age;
cout<<"enter stdno:";
cin>>temp_strt.stdno;
unsigned short int t_sex;
cout<<"enter sex (1-male 2-female) :";
cin>>t_sex;
switch(t_sex){
case 1 : temp_strt.sex = true;
break;
case 2 : temp_strt.sex = false;
break;
}
cout<<"enter average:";
cin>>temp_strt.ave;
out_to_file.write((char*)&temp_strt, sizeof(temp_strt));
unsigned short int conti;
cout<<"do you want to continue (1-Yes 2-No):";
cin>>conti;
if(conti == 2)
flag = false;
}

return 0;
}
اینم برنامه بدون ارور.اگه نگاه کنید اروری هم نداشت.فقط بفرمایید کاری که می کنم برای اضافه کردن به فایل درسته یا نه؟ممنون

clover
پنج شنبه 08 بهمن 1388, 11:10 صبح
اصل کاری از هدر cstdlib.h خطا می گرفت(با سه کامپایلر امتحان کردم)
علتش این هست که ما هدر فایلی با نام cstdlib.h نداریم ! این هدر فایل جزو هدر های جدید ++C هست و طبق استاندارد باید بدون h. نوشته شود. در ضمن در کامپایلری مثل TC 3 هم وجود ندارد.


یعنی هیچکس اینجا بلد نیست یه رکورد رو بریزه تو فایل؟
دوست عزیز، به عنوان تاپیکی که ایجاد کردید نگاه کنید. گفتید مشکل، بعد یه برنامه ی چند ده خطی گذاشتید که تقریبا هیچ مشکلی نداره (شاید چند خطای نحوی که در کد کار با فایل هم نیست ) بعد چه انتظاری دارید ؟
اینو به عنوان یک راهنمایی دوستانه از من قبول کنید :
اگر عنوان تاپیک مثلا به این صورت بود : "نحوه ی نوشتن یک ساختار در یک فایل ؟" و سوال شما هم جزئی تر (قطعه کد فقط مربوط به همین سوال) مطمئن باشید جواب های بیشتری می گرفتید.

اما در جواب سوالتون باید بگم : بله، نحوه نوشتن یک ساختار در یک فایل به همین صورتی هست که شما نوشته اید. البته فایل را باید به صورت باینری باز کنید. البته من خودم هنوز در ورودی و خروجی فایل با اشیاء ifstream، ofstream و fstream سولات بی جواب و ابهامات زیادی دارم که هنوز فرصت نکردم رفعشون کنم.
این هم یک نمونه و توضیحات از MSDN :


The write function writes a block of memory to an output file stream. The length argument specifies the number of bytes written. This example creates an output file stream and writes the binary value of the Date structure to it:


// write_function.cpp
// compile with: /EHsc
#include <fstream>
using namespace std;

struct Date
{
int mo, da, yr;
};

int main( )
{
Date dt = { 6, 10, 92 };
ofstream tfile( "date.dat" , ios::binary );
tfile.write( (char *) &dt, sizeof dt );
}


The write function does not stop when it reaches a null character, so the complete class structure is written. The function takes two arguments: a char pointer and a count of characters to write. Note the required cast to char* before the address of the structure object.
موفق باشید.

white tower
پنج شنبه 08 بهمن 1388, 15:10 عصر
علتش این هست که ما هدر فایلی با نام cstdlib.h نداریم ! این هدر فایل جزو هدر های جدید ++C هست و طبق استاندارد باید بدون h. نوشته شود. در ضمن در کامپایلری مثل TC 3 هم وجود ندارد.
والا من هم چنین کاری نکردم یعنی ctsdlib.h ننوشتم.

دوست عزیز، به عنوان تاپیکی که ایجاد کردید نگاه کنید. گفتید مشکل، بعد یه برنامه ی چند ده خطی گذاشتید که تقریبا هیچ مشکلی نداره (شاید چند خطای نحوی که در کد کار با فایل هم نیست ) بعد چه انتظاری دارید ؟
بابا خوب یکی مثل شما بیاد بگه ایرادی نداره.این قطعه کد اون نتیجه ای من می خوام رو بهم نمیده.هنوز هم معتقدم که نمیده.به نظر خودم این برنامه فقط یه رکورد رو وارد می کنه.
در نهایت ممنون بابت توجه تون.