shahab_sh
سه شنبه 19 دی 1385, 14:57 عصر
با سلام:لبخندساده:
من دارم با فایلها در c++ کار میکنم و برای تمرین یه برنامه نوشتم ولی به یه مشکل نسبتا عجیب برخوردم.:افسرده: البته این برنامه رو تکه تکه کامپایل کرده ام و هیچ مشکلی نداشت. ببینید برنامه باید اینجوری کار بکنه:
با استفاده از حلقه while از شما چندین اسم و شماره تلفن و میخواد و آنها رو در فایلphoneNo.dat ذخیره میکنه و برای خارج شدن از حلقه هم بجای اسم باید ctrl+z رو وارد کنید.
بعد میاد اسمها و شماره ها رو از فایل میخونه و لیست میکنه. بعدش از شما میخواد که یه اسم رو وارد کنید (اشکال برنامه همینجاست) اون اسم رو پیدا میکنه و از شما یه شماره تلفن جدید میخواد. شماره رو وارد میکنید و اطلاعات رو از اول توی یک فایل جدید به نام temp1.dat مینویسه. نوشتن اطلاعات که تموم شد، فایل phoneNo.dat رو delete میکنه و اسم فایل temp1.dat رو به phoneNo.dat تغییر میده. درواقع فایل رو ویرایش میکنه.
وقتی که دیباگش کردم متوجه شدم که وقتی میخوام اسم رو وارد کنم به دستور cin>>name2 که میرسه خودش دستور رو رد میکنه و برنامه تموم میشه. یعنی اصلا منتظر نمیشه که من یه اسم رو وارد کنم!
حالا من کد برنامه رو میزارم اینجا. جلوی اون دستور cin>>name2 هم با کامنت مشخص کردم.
خیلی ممنون میشم اگه بگید مشکل از کجاست.:لبخندساده:
#include<fstream.h>
#include<iostream.h>
#include<conio.h>
#include<string.h>
int main() {
char name[21],name2[21],phoneNo[21];
int i;
clrscr();
ofstream pno("phoneNo.dat");
if(!pno) {
cout << "\nunable to creat file!";
getch();
return 0;
}
while (1) {
cout << "Enter name, phone No. : ";
cin >> name;
if (!name[0])
break;
cin >> phoneNo;
pno << name << " " << phoneNo << " ";
}
pno.close();
viewlist:
ifstream pni("phoneNo.dat");
if(!pni) {
cout << "\nUnable to open file!";
getch();
return 0;
}
clrscr();
cout << "---Name----------------------PhoneNo.----------------";
for (i=3; ;i++) {
pni >> name >> phoneNo;
if(!name[0])
break;
gotoxy(4,i);
cout << name;
gotoxy(30,i);
cout << phoneNo;
}
pni.close();
cout << "\n\n-----------------------------------------------------";
cout << "\nEnter a name to search:";
cin >> name2; //***Problem is here!***
if (!name2[0])
return 0;
ofstream tmp1("temp1.dat");
ifstream pni2("phoneNo.dat");
while(1) {
pni2 >> name >> phoneNo;
if(!name[0])
break;
if(!strcmp(name,name2)) {
cout << "\nEnter a new phoneNo. for " << name2 << " : ";
cin >> phoneNo;
}
tmp1 << name << " " << phoneNo << " ";
}
tmp1.close();
pni2.close();
remove("phoneNo.dat");
rename("temp1.dat", "phoneNo.dat");
cout << "\n press a key to view the new list...";
goto viewlist;
}
من دارم با فایلها در c++ کار میکنم و برای تمرین یه برنامه نوشتم ولی به یه مشکل نسبتا عجیب برخوردم.:افسرده: البته این برنامه رو تکه تکه کامپایل کرده ام و هیچ مشکلی نداشت. ببینید برنامه باید اینجوری کار بکنه:
با استفاده از حلقه while از شما چندین اسم و شماره تلفن و میخواد و آنها رو در فایلphoneNo.dat ذخیره میکنه و برای خارج شدن از حلقه هم بجای اسم باید ctrl+z رو وارد کنید.
بعد میاد اسمها و شماره ها رو از فایل میخونه و لیست میکنه. بعدش از شما میخواد که یه اسم رو وارد کنید (اشکال برنامه همینجاست) اون اسم رو پیدا میکنه و از شما یه شماره تلفن جدید میخواد. شماره رو وارد میکنید و اطلاعات رو از اول توی یک فایل جدید به نام temp1.dat مینویسه. نوشتن اطلاعات که تموم شد، فایل phoneNo.dat رو delete میکنه و اسم فایل temp1.dat رو به phoneNo.dat تغییر میده. درواقع فایل رو ویرایش میکنه.
وقتی که دیباگش کردم متوجه شدم که وقتی میخوام اسم رو وارد کنم به دستور cin>>name2 که میرسه خودش دستور رو رد میکنه و برنامه تموم میشه. یعنی اصلا منتظر نمیشه که من یه اسم رو وارد کنم!
حالا من کد برنامه رو میزارم اینجا. جلوی اون دستور cin>>name2 هم با کامنت مشخص کردم.
خیلی ممنون میشم اگه بگید مشکل از کجاست.:لبخندساده:
#include<fstream.h>
#include<iostream.h>
#include<conio.h>
#include<string.h>
int main() {
char name[21],name2[21],phoneNo[21];
int i;
clrscr();
ofstream pno("phoneNo.dat");
if(!pno) {
cout << "\nunable to creat file!";
getch();
return 0;
}
while (1) {
cout << "Enter name, phone No. : ";
cin >> name;
if (!name[0])
break;
cin >> phoneNo;
pno << name << " " << phoneNo << " ";
}
pno.close();
viewlist:
ifstream pni("phoneNo.dat");
if(!pni) {
cout << "\nUnable to open file!";
getch();
return 0;
}
clrscr();
cout << "---Name----------------------PhoneNo.----------------";
for (i=3; ;i++) {
pni >> name >> phoneNo;
if(!name[0])
break;
gotoxy(4,i);
cout << name;
gotoxy(30,i);
cout << phoneNo;
}
pni.close();
cout << "\n\n-----------------------------------------------------";
cout << "\nEnter a name to search:";
cin >> name2; //***Problem is here!***
if (!name2[0])
return 0;
ofstream tmp1("temp1.dat");
ifstream pni2("phoneNo.dat");
while(1) {
pni2 >> name >> phoneNo;
if(!name[0])
break;
if(!strcmp(name,name2)) {
cout << "\nEnter a new phoneNo. for " << name2 << " : ";
cin >> phoneNo;
}
tmp1 << name << " " << phoneNo << " ";
}
tmp1.close();
pni2.close();
remove("phoneNo.dat");
rename("temp1.dat", "phoneNo.dat");
cout << "\n press a key to view the new list...";
goto viewlist;
}