文件阅读问题 [英] file reading problem

查看:46
本文介绍了文件阅读问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我在文件中阅读的方法:


静态房间:: file2Room(int rnum){

ostringstream filename;

filename<< " ../ gamefiles /房间/" << rnum<<

" .room";

ifstream infile(filename.str()。c_str());

string roomNameIn,roomDescriptionIn;

int roomExitsIn [6];

infile>> rnum;

getline(infile,roomNameIn);

getline(infile,roomDescriptionIn);

infile>> roomExitsIn [0]>> roomExitsIn [1]>>

roomExitsIn [2]>> roomExitsIn [3]>> roomExitsIn [4]>> roomExitsIn [5];

房间r;

r.setRoomNumber(rnum);

r.setRoomName(roomNameIn);

r.setRoomDescription(roomDescriptionIn);

r.setRoomExits(roomExitsIn [0],roomExitsIn [1],

roomExitsIn [2],roomExitsIn [3] ,roomExitsIn [4],roomExitsIn [5]);

返回r;

}


没有编译错误但是它读取的文件不正确。


这里是它所读取的文件:

0

测试室

你站在一个测试室

1 2 -1 4 5 6

当我将结果输出到屏幕时出现:

测试室

[]

而不是:

测试室

你站在一个测试室

[nswud]


我一直试图解决这个问题大约6小时仍然无法找到

问题。

任何帮助将不胜感激。

here is my method for reading in a file:

static room room::file2Room(int rnum){
ostringstream filename;
filename << "../gamefiles/rooms/" << rnum <<
".room";
ifstream infile(filename.str().c_str());
string roomNameIn, roomDescriptionIn;
int roomExitsIn[6];
infile >> rnum;
getline(infile, roomNameIn);
getline(infile, roomDescriptionIn);
infile >> roomExitsIn[0] >> roomExitsIn[1] >>
roomExitsIn[2] >> roomExitsIn[3] >> roomExitsIn[4] >> roomExitsIn[5];
room r;
r.setRoomNumber(rnum);
r.setRoomName(roomNameIn);
r.setRoomDescription(roomDescriptionIn);
r.setRoomExits(roomExitsIn[0], roomExitsIn[1],
roomExitsIn[2], roomExitsIn[3], roomExitsIn[4], roomExitsIn[5]);
return r;
}

there are no compile errors but it reads in the file incorrectly.

here is the file it reads from:
0
Test Room
You are standing in a test room
1 2 -1 4 5 6
when i output the result to the screen it comes up:
Test Room
[ ]
instead of:
Test Room
You are standing in a test room
[ n s w u d ]

ive been trying to fix this for about 6hrs and still cant find the
problem.
any help will be appreciated.

推荐答案



" ; Felix85" <一个****** @ gmail.com>。在消息中写道

新闻:11 ********************** @ i39g2000cwa.googlegr oups.com ...

"Felix85" <a.******@gmail.com> wrote in message
news:11**********************@i39g2000cwa.googlegr oups.com...
这是我在文件中阅读的方法:

static room room :: file2Room(int rnum){
ostringstream filename;
filename<< " ../ gamefiles /房间/" << rnum<<
" .room" ;;
ifstream infile(filename.str()。c_str());


if(!infile.open())

//这里做错误的事情。

//显示信息,返回r与rnum -1或者什么

string roomNameIn,roomDescriptionIn;
int roomExitsIn [6];
infile>> RNUM;


if(!infile>> rnum)

//这里做错误的事情。

//显示一个消息,返回r与rnum -1或其他东西

getline(infile,roomNameIn);


if(!getline(infile,roomNameIn))

//这里做错误的事情。

//显示一个消息,返回r与rnum -1或其他东西

getline(infile,roomDescriptionIn);


if(!getline(infile,roomDescriptionIn))

//这里做错误的事情。

//显示一个消息,返回r与rnum -1或其他东西

infile>> roomExitsIn [0]>> roomExitsIn [1]>>
roomExitsIn [2]>> roomExitsIn [3]>> roomExitsIn [4]>> roomExitsIn [5];


if if !!!!!! > roomExitsIn [3]>> roomExitsIn [4]>> roomExitsIn [5])
//在这里做一些错误。

//显示一条消息,用rnum -1或者其他东西返回一个

房间r;
r.setRoomNumber(rnum);
r.setRoomName(roomNameIn);
r .setRoomDescription(roomDescriptionIn);
r.setRoomExits(roomExitsIn [0],roomExitsIn [1],
roomExitsIn [2],roomExitsIn [3],roomExitsIn [4],roomExitsIn [5]);
返回r;
}
没有编译错误,但是文件读取错误。

这里是它读取的文件:
0
测试室
你站在一个测试室
1 2 -1 4 5 6

当我将结果输出到屏幕时它出现了:测试室
[]

而不是:
测试室
你站在测试室
[nswud]

我一直试图解决这个问题大约6小时仍然无法找到
问题。
任何帮助将不胜感激。
here is my method for reading in a file:

static room room::file2Room(int rnum){
ostringstream filename;
filename << "../gamefiles/rooms/" << rnum <<
".room";
ifstream infile(filename.str().c_str());
if ( ! infile.open() )
// Do something for error here.
// Display a message, return an r with rnum -1 or something
string roomNameIn, roomDescriptionIn;
int roomExitsIn[6];
infile >> rnum;
if ( ! infile >> rnum )
// Do something for error here.
// Display a message, return an r with rnum -1 or something
getline(infile, roomNameIn);
if ( ! getline( infile, roomNameIn ) )
// Do something for error here.
// Display a message, return an r with rnum -1 or something
getline(infile, roomDescriptionIn);
if ( ! getline(infile, roomDescriptionIn) )
// Do something for error here.
// Display a message, return an r with rnum -1 or something
infile >> roomExitsIn[0] >> roomExitsIn[1] >>
roomExitsIn[2] >> roomExitsIn[3] >> roomExitsIn[4] >> roomExitsIn[5];
if ( ! infile >> roomExitsIn[0] >> roomExitsIn[1] >>
roomExitsIn[2] >> roomExitsIn[3] >> roomExitsIn[4] >> roomExitsIn[5] )
// Do something for error here.
// Display a message, return an r with rnum -1 or something
room r;
r.setRoomNumber(rnum);
r.setRoomName(roomNameIn);
r.setRoomDescription(roomDescriptionIn);
r.setRoomExits(roomExitsIn[0], roomExitsIn[1],
roomExitsIn[2], roomExitsIn[3], roomExitsIn[4], roomExitsIn[5]);
return r;
}

there are no compile errors but it reads in the file incorrectly.

here is the file it reads from:
0
Test Room
You are standing in a test room
1 2 -1 4 5 6
when i output the result to the screen it comes up:
Test Room
[ ]
instead of:
Test Room
You are standing in a test room
[ n s w u d ]

ive been trying to fix this for about 6hrs and still cant find the
problem.
any help will be appreciated.




输入测试代码,看看你是否在任何地方都出现错误。


否则,信息不足。让我们看看如何定义类r。

让我们看看你在哪里展示类r。



Put in the testing code and see if you get an error anywhere.

Otherwise, not enough information. Let us see how the class r is defined.
Let us see where you are trying to display the class r.


房间对象:

room(int rnum,string rname,string rdesc,int rexits []){

roomNumber = rnum;

roomName = rname;

roomDescription = rdesc;

int i;

for(i = 0; i< sizeof(roomExits); i ++){

roomExits [i] = rexits [i];

}

}


字符串化房间对象:

朋友ostream&运算符<< (ostream& os,room& r){

string rooms;

if(r.roomExits [0]> = 0){

rooms + =" n" ;;

}

if(r.roomExits [1]> = 0){

rooms + =" s" ;;

}

if(r.roomExits [2]> = 0){

rooms + =" e" ;;

}

if(r.roomExits [3]> = 0){

rooms + =" w"

}

if(r.roomExits [4]> = 0){

rooms + =" u;

}

if(r.roomExits [5]> = 0){

rooms + =" d" ;;

}

return os<< r.roomName<< " \\\
" <<

r.roomDescription<< " \\\
" << " [" <<房间<< " ] \ n" ;;

}

The room object:
room(int rnum, string rname, string rdesc, int rexits[]){
roomNumber = rnum;
roomName = rname;
roomDescription = rdesc;
int i;
for(i = 0; i < sizeof(roomExits); i++){
roomExits[i] = rexits[i];
}
}

stringifying the room object:
friend ostream& operator << (ostream& os, room& r){
string rooms;
if(r.roomExits[0] >= 0){
rooms += " n";
}
if(r.roomExits[1] >= 0){
rooms += " s";
}
if(r.roomExits[2] >= 0){
rooms += " e";
}
if(r.roomExits[3] >= 0){
rooms += " w";
}
if(r.roomExits[4] >= 0){
rooms += " u";
}
if(r.roomExits[5] >= 0){
rooms += " d";
}
return os << r.roomName << "\n" <<
r.roomDescription << "\n" << "[" << rooms << " ]\n";
}


实际上这里是一个更好的主意,只是发布整个文件:


#include< iostream>

#include< string>

#include< fstream>

#include< sstream>


使用命名空间std;


class room {

public:

room(){}

room(int rnum,string rname,string rdesc,int rexits []){

roomNumber = rnum;

roomName = rname;

roomDescription = rdesc;

int i;

for(i = 0; i< sizeof(roomExits); i ++){

roomExits [i] = rexits [i];

}

}


void room :: setRoomNumber(int rnum){

roomNumber = rnum;

}


无效room :: setRoomName(string rname){

roomName = rname;

}


void room :: setRoomDescription(string rdesc ){

roomDescription = rdesc;

}


void room :: setRoomExits(int n,int s,int e,int w,int u,int d){

roomExits [0] = n ; roomExits [1] = s; roomExits [2] = e;

roomExits [3] = w; roomExits [4] = u; roomExits [5] = d;

}


int room :: getRoomNumber(){

return roomNumber;

}


string room :: getRoomName(){

return roomName;

}


string room :: getRoomDescription(){

return roomDescription;

}


int * room :: getRoomExits(){

return roomExits;

}


void room :: room2File(){

ostringstream filename;

filename<< " ../ gamefiles /房间/" << roomNumber<< " .room";

ofstream outfile(filename.str()。c_str());


outfile<< roomNumber<< " \ n";

outfile<< roomName<< " \ n";

outfile<< roomDescription<< " \ n";

outfile<< roomExits [0]<< " " ;;

outfile<< roomExits [1]<< " " ;;

outfile<< roomExits [2]<< " " ;;

outfile<< roomExits [3]<< " " ;;

outfile<< roomExits [4]<< " " ;;

outfile<< roomExits [5]<< " " ;;

outfile.close();

}

静态房间:: file2Room(int rnum){

ostringstream filename;

filename<< " ../ gamefiles /房间/" << rnum<< " .room";

ifstream infile(filename.str()。c_str());

string roomNameIn,roomDescriptionIn;

int roomExitsIn [6];

infile>> rnum;

getline(infile,roomNameIn);

getline(infile,roomDescriptionIn);

infile>> roomExitsIn [0]>> roomExitsIn [1]>> roomExitsIn [2]>>

roomExitsIn [3]>> roomExitsIn [4]>> roomExitsIn [5];

房间r;

r.setRoomNumber(rnum);

r.setRoomName(roomNameIn);

r.setRoomDescription(roomDescriptionIn);

r.setRoomExits(roomExitsIn [0],roomExitsIn [1],roomExitsIn [2],

roomExitsIn [3] ,roomExitsIn [4],roomExitsIn [5]);

返回r;

}


私人:

int roomNumber;

string roomName,roomDescription;

int roomExits [6];

friend ostream&运算符<< (ostream& os,room& r){

string rooms;

if(r.roomExits [0]> = 0){

rooms + =" n" ;;

}

if(r.roomExits [1]> = 0){

rooms + =" s" ;;

}

if(r.roomExits [2]> = 0){

rooms + =" e" ;;

}

if(r.roomExits [3]> = 0){

rooms + =" w"

}

if(r.roomExits [4]> = 0){

rooms + =" u;

}

if(r.roomExits [5]> = 0){

rooms + =" d" ;;

}

return os<< r.roomName<< " \\\
" << r.roomDescription<< " \\\
" << ["

<<房间<< " ] \ n" ;;

}

};


int main(无效){

房间r;

r.setRoomNumber(0);

r.setRoomName(" Test Room");

r.setRoomDescription( 你正站在考场;;

r.setRoomExits(1,2,-1,4,5,6);

r.room2File( );

cout<< r;


房间r2;

r2 = room :: file2Room(0);

cout<< r2;

返回0;

}

actually here is a better idea ill just post the whole file:

#include <iostream>
#include <string>
#include <fstream>
#include <sstream>

using namespace std;

class room {
public:
room() { }
room(int rnum, string rname, string rdesc, int rexits[]){
roomNumber = rnum;
roomName = rname;
roomDescription = rdesc;
int i;
for(i = 0; i < sizeof(roomExits); i++){
roomExits[i] = rexits[i];
}
}

void room::setRoomNumber(int rnum){
roomNumber = rnum;
}

void room::setRoomName(string rname){
roomName = rname;
}

void room::setRoomDescription(string rdesc){
roomDescription = rdesc;
}

void room::setRoomExits(int n, int s, int e, int w, int u, int d){
roomExits[0] = n; roomExits[1] = s; roomExits[2] = e;
roomExits[3] = w; roomExits[4] = u; roomExits[5] = d;
}

int room::getRoomNumber(){
return roomNumber;
}

string room::getRoomName(){
return roomName;
}

string room::getRoomDescription(){
return roomDescription;
}

int* room::getRoomExits(){
return roomExits;
}

void room::room2File(){
ostringstream filename;
filename << "../gamefiles/rooms/" << roomNumber << ".room";
ofstream outfile(filename.str().c_str());

outfile << roomNumber << "\n";
outfile << roomName << "\n";
outfile << roomDescription << "\n";
outfile << roomExits[0] << " ";
outfile << roomExits[1] << " ";
outfile << roomExits[2] << " ";
outfile << roomExits[3] << " ";
outfile << roomExits[4] << " ";
outfile << roomExits[5] << " ";
outfile.close();
}
static room room::file2Room(int rnum){
ostringstream filename;
filename << "../gamefiles/rooms/" << rnum << ".room";
ifstream infile(filename.str().c_str());
string roomNameIn, roomDescriptionIn;
int roomExitsIn[6];
infile >> rnum;
getline(infile, roomNameIn);
getline(infile, roomDescriptionIn);
infile >> roomExitsIn[0] >> roomExitsIn[1] >> roomExitsIn[2] >>
roomExitsIn[3] >> roomExitsIn[4] >> roomExitsIn[5];
room r;
r.setRoomNumber(rnum);
r.setRoomName(roomNameIn);
r.setRoomDescription(roomDescriptionIn);
r.setRoomExits(roomExitsIn[0], roomExitsIn[1], roomExitsIn[2],
roomExitsIn[3], roomExitsIn[4], roomExitsIn[5]);
return r;
}

private:
int roomNumber;
string roomName, roomDescription;
int roomExits[6];
friend ostream& operator << (ostream& os, room& r){
string rooms;
if(r.roomExits[0] >= 0){
rooms += " n";
}
if(r.roomExits[1] >= 0){
rooms += " s";
}
if(r.roomExits[2] >= 0){
rooms += " e";
}
if(r.roomExits[3] >= 0){
rooms += " w";
}
if(r.roomExits[4] >= 0){
rooms += " u";
}
if(r.roomExits[5] >= 0){
rooms += " d";
}
return os << r.roomName << "\n" << r.roomDescription << "\n" << "["
<< rooms << " ]\n";
}
};

int main(void){
room r;
r.setRoomNumber(0);
r.setRoomName("Test Room");
r.setRoomDescription("You are standing in a test room");
r.setRoomExits(1, 2, -1, 4, 5, 6);
r.room2File();
cout << r;

room r2;
r2 = room::file2Room(0);
cout << r2;
return 0;
}


这篇关于文件阅读问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆