#include<fstream>
using namespace std;
int map_w,map_h; //地图宽度,高度
unsigned char*map;
int title_num(int x,int y){return x*map_w+y;}//将 x,y 坐标转换为地图上块的编号
int title_x(int n){return n/map_w;}//由块编号得出 x,y 坐标
int title_y(int n){return n%map_w;}
int main()
{
int i,j;
ifstream fin("input.dat");
fin>>map_w>>map_h;
map=new unsigned char[map_w*map_h];
for(i=0;i<map_w*map_h;++i)fin>>map[i];
fin.close();
ofstream fout("output.dat");
for(i=0;i<map_h;++i)
{
for(j=0;j<map_w;++j)fout<<map[title_num(i,j)];
fout<<endl;
}
fout.close();
delete [] map;
system("PAUSE");
return 0;
}
这个程序从文件input.dat读取地图然后输出到output.dat文件上,编译的时候没出错,可是输出的时候老不对,帮忙看看,谢谢了,下面是读取文件
80 24
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
o-----------------------------------------------------------------------------o
o--s--------------------------------------------------------------------------o
o----------------------------oooooooooooooo-----------------------------------o
o-----------------------------------------o-----------------------------------o
ooooooooooo-------------------------------o-----------------------------------o
o---------o------ooooooo-----oooooooooooooo-------oooooooo--------------------o
o----oooooo------o-----oooo-----------------------o------o--------------------o
o----------------o--------o-----------------------ooo ooo---------------------o
o----------------oooo--oooo---------------------------------------------------o
o--------------------------------oooooooooooooooooooooooooooooooooooooooooooooo
o-----------------------------------------------------------------------------o
o-----------------------------------------------------------------------------o
o-----------------------------------------------------------------------------o
oooooooooooooooooooooooooooooooooooooooooooo----------------------------------o
o-------o-----------------------------------------------------------ooooooooooo
o-------o---ooooooo--------------------------------------oooooooo-------------o
o-------o---------o--------------------------------------o------o-------------o
o-------ooooooooooo--------oooooooooo--------------------o------o-------------o
o--------------------------oe-------ooo------------------o------o-------------o
o--------------------------ooooo------o------------------o------o-------------o
o-------------------------------------o------------------o--------------------o
o------------------------------o------o------------------o--------------------o
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
32 个解决方案
#1
21 6
ooooooooooooooooooooo
o------ooooooo------o
o--s----------------o
o----ooooo----------o
o-------------------o
ooooooooooooooooooooo
像这么小的地图可以正常输出,可大点的地图就不行了
ooooooooooooooooooooo
o------ooooooo------o
o--s----------------o
o----ooooo----------o
o-------------------o
ooooooooooooooooooooo
像这么小的地图可以正常输出,可大点的地图就不行了
#2
这样的帖我喜欢...
如果学校批的话...
我就开始学游戏编程了.................
到时候大家支持..帮助
如果学校批的话...
我就开始学游戏编程了.................
到时候大家支持..帮助
#3
map=new unsigned char[map_w*map_h];这里分配的空间太小了吧
#4
程序没出错的话我怀疑是你窗口的问题(显示范围不够,就换行显示), 你设置一下窗口的属性.
#5
不好意思, 看错了, 你是文件输出的.
#6
to:flying_dancing(小混混-_-) 是分配空间大小
我是输出到文件output.dat,应该不存在窗口问题吧
我是输出到文件output.dat,应该不存在窗口问题吧
#7
UP
#8
你忽视了文件中的换行符。
#9
那要怎么改,楼上的帮忙下,还有那小地图就可以不用考虑换行符了吗
#10
要改两个地方:
1,文件打开方式要改成二进制方式,避免系统对换行符的特殊处理。
参考文章:http://www.vckbase.com/document/viewdoc/?id=1439
2,分配内存要分配文件大小而不是长乘宽
1,文件打开方式要改成二进制方式,避免系统对换行符的特殊处理。
参考文章:http://www.vckbase.com/document/viewdoc/?id=1439
2,分配内存要分配文件大小而不是长乘宽
#11
好,我去看看先,多谢
#12
晕咯,改半天还是不对,谁来帮忙下,谢谢了
#13
mark
#14
主要是要处理换行符,下面ok了:
#include<iostream>
#include<fstream>
using namespace std;
int map_w,map_h; //地图宽度,高度
unsigned char*map;
int title_num(int x,int y){return x*map_w+y;}//将 x,y 坐标转换为地图上块的编号
int title_x(int n){return n/map_w;}//由块编号得出 x,y 坐标
int title_y(int n){return n%map_w;}
int main()
{
int i,j;
ifstream fin("input.dat");
fin>>map_w>>map_h;
map=new unsigned char[1024*1024];
//把第一行读出不要
char* temp = new char[map_w];
fin.getline(temp,map_w);
delete[] temp;
//一行行的读
for(i=0;i<map_h;++i)fin.getline((char*)(map+i*map_w),map_w);
fin.close();
ofstream fout("output.dat");
for(i=0;i<map_h;++i)
{
for(j=0;j<map_w;++j)fout<<map[title_num(i,j)];
fout<<endl;
}
fout.close();
delete [] map;
system("PAUSE");
return 0;
}
#include<iostream>
#include<fstream>
using namespace std;
int map_w,map_h; //地图宽度,高度
unsigned char*map;
int title_num(int x,int y){return x*map_w+y;}//将 x,y 坐标转换为地图上块的编号
int title_x(int n){return n/map_w;}//由块编号得出 x,y 坐标
int title_y(int n){return n%map_w;}
int main()
{
int i,j;
ifstream fin("input.dat");
fin>>map_w>>map_h;
map=new unsigned char[1024*1024];
//把第一行读出不要
char* temp = new char[map_w];
fin.getline(temp,map_w);
delete[] temp;
//一行行的读
for(i=0;i<map_h;++i)fin.getline((char*)(map+i*map_w),map_w);
fin.close();
ofstream fout("output.dat");
for(i=0;i<map_h;++i)
{
for(j=0;j<map_w;++j)fout<<map[title_num(i,j)];
fout<<endl;
}
fout.close();
delete [] map;
system("PAUSE");
return 0;
}
#15
好,谢谢大家了^_^嘿嘿,
还有个问题就是为什么地图比较小的时候不考虑换行符问题,也可以正常输出,而地图大了就必须要考虑呢
还有个问题就是为什么地图比较小的时候不考虑换行符问题,也可以正常输出,而地图大了就必须要考虑呢
#16
to: horisly(SUN YAT-SEN UNIVERSITY (逸仙先生))
还是不对咯,输出会有乱码
还是不对咯,输出会有乱码
#17
呵呵....我认为没换行
存入和取出是相反的...存入之前,在文件能显示...取出也应该是一样
----
只是猜测
存入和取出是相反的...存入之前,在文件能显示...取出也应该是一样
----
只是猜测
#18
我就是把你的地图copy过来测试的,没问题啊。
你把我的源代码copy过去试多一次
你把我的源代码copy过去试多一次
#19
不好意思咯,刚才搞错了,
#20
还有为什么小地图可以一起读,而不用一行一行的读?^_^
#21
我试怎么不对
这是结果output.dat
oooooooooooooooooooo
屯屯屯屯屯屯屯屯屯屯
屯屯屯屯屯屯屯屯屯屯
屯屯屯屯屯屯屯屯屯屯
屯屯屯屯屯屯屯屯屯屯
屯屯屯屯屯屯屯屯屯屯
input.dat 存的是小的地图...
这是结果output.dat
oooooooooooooooooooo
屯屯屯屯屯屯屯屯屯屯
屯屯屯屯屯屯屯屯屯屯
屯屯屯屯屯屯屯屯屯屯
屯屯屯屯屯屯屯屯屯屯
屯屯屯屯屯屯屯屯屯屯
input.dat 存的是小的地图...
#22
小地图在我写的程序里面可以正常显示
#23
to: horisly(SUN YAT-SEN UNIVERSITY (逸仙先生))
小地图在你的程序里面怎么不能正常显示了
oooooooooooooooooooo
屯屯屯屯屯屯屯屯屯屯
屯屯屯屯屯屯屯屯屯屯
屯屯屯屯屯屯屯屯屯屯
屯屯屯屯屯屯屯屯屯屯
屯屯屯屯屯屯屯屯屯屯
小地图在你的程序里面怎么不能正常显示了
oooooooooooooooooooo
屯屯屯屯屯屯屯屯屯屯
屯屯屯屯屯屯屯屯屯屯
屯屯屯屯屯屯屯屯屯屯
屯屯屯屯屯屯屯屯屯屯
屯屯屯屯屯屯屯屯屯屯
#24
呵呵,我也发现了。再研究研究,io这东西是挺烦的。
#25
char* temp = new char[map_w];
fin.getline(temp,map_w);
delete[] temp;
删了,就没了..所以就不能保存了
fin.getline(temp,map_w);
delete[] temp;
删了,就没了..所以就不能保存了
#26
这个不是删除第一行吗,怎么大地图里面删除了就没事
#27
UP。。。。。。。。。。。。
#28
呵呵,我找到问题症结了,楼主粗心了。
在大地图中,
char str[] = "ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo";
cout<<strlen(str)<<endl;
这里输出是 79,但是你文件里说是80,
而在小地图
char str[] = "ooooooooooooooooooooo";
cout<<strlen(str)<<endl;
输出为21,文件里面也是21。
而我用getline的时候读的是每行map_w,大地图为80,但实际上为79,小地图为21,实际也是21。
因为getline是以\0为结束的,所以小地图读了第一行(没有读\0),下面是一个\0,所以后面读的都没有字符,因为这里有个\0阻塞了。
而读大地图时候,比实际读多了一个\0,下面的行就不会阻塞了。
呵呵,所以会出现这些问题了。
下面的修改过来了:
#include<iostream>
#include<fstream>
using namespace std;
int map_w,map_h; //地图宽度,高度
unsigned char*map;
int title_num(int x,int y){return x*map_w+y;}//将 x,y 坐标转换为地图上块的编号
int title_x(int n){return n/map_w;}//由块编号得出 x,y 坐标
int title_y(int n){return n%map_w;}
int main()
{
int i,j;
// ifstream fin("inputBig.dat");
ifstream fin("input.dat");
fin>>map_w>>map_h;
cout<<map_w<<map_h<<endl;
map=new unsigned char[(map_w+1)*map_h];
//把第一行读出不要
char* temp = new char[map_w];
fin.getline(temp,map_w);
delete[] temp;
//一行行的读
//这里每次读 map_w + 1 个字符
for(i=0;i<map_h;++i){fin.getline((char*)(map+i*map_w),map_w+1);cout<<(map+i*map_w)<<endl;}
fin.close();
ofstream fout("output.dat");
for(i=0;i<map_h;++i)
{
for(j=0;j<map_w;++j)fout<<map[title_num(i,j)];
//fout.write((char*)(map+i*map_w),map_w);
fout<<endl;
}
fout.close();
delete [] map;
system("PAUSE");
return 0;
}
在大地图中,
char str[] = "ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo";
cout<<strlen(str)<<endl;
这里输出是 79,但是你文件里说是80,
而在小地图
char str[] = "ooooooooooooooooooooo";
cout<<strlen(str)<<endl;
输出为21,文件里面也是21。
而我用getline的时候读的是每行map_w,大地图为80,但实际上为79,小地图为21,实际也是21。
因为getline是以\0为结束的,所以小地图读了第一行(没有读\0),下面是一个\0,所以后面读的都没有字符,因为这里有个\0阻塞了。
而读大地图时候,比实际读多了一个\0,下面的行就不会阻塞了。
呵呵,所以会出现这些问题了。
下面的修改过来了:
#include<iostream>
#include<fstream>
using namespace std;
int map_w,map_h; //地图宽度,高度
unsigned char*map;
int title_num(int x,int y){return x*map_w+y;}//将 x,y 坐标转换为地图上块的编号
int title_x(int n){return n/map_w;}//由块编号得出 x,y 坐标
int title_y(int n){return n%map_w;}
int main()
{
int i,j;
// ifstream fin("inputBig.dat");
ifstream fin("input.dat");
fin>>map_w>>map_h;
cout<<map_w<<map_h<<endl;
map=new unsigned char[(map_w+1)*map_h];
//把第一行读出不要
char* temp = new char[map_w];
fin.getline(temp,map_w);
delete[] temp;
//一行行的读
//这里每次读 map_w + 1 个字符
for(i=0;i<map_h;++i){fin.getline((char*)(map+i*map_w),map_w+1);cout<<(map+i*map_w)<<endl;}
fin.close();
ofstream fout("output.dat");
for(i=0;i<map_h;++i)
{
for(j=0;j<map_w;++j)fout<<map[title_num(i,j)];
//fout.write((char*)(map+i*map_w),map_w);
fout<<endl;
}
fout.close();
delete [] map;
system("PAUSE");
return 0;
}
#29
每次读的时候要比实际的字符多读一个。
fin.getline((char*)(map+i*map_w),map_w+1);
所以分配空间应该为:
map=new unsigned char[(map_w+1)*map_h];
fin.getline((char*)(map+i*map_w),map_w+1);
所以分配空间应该为:
map=new unsigned char[(map_w+1)*map_h];
#30
哦,懂了,是我粗心了,谢谢你了horisly(SUN YAT-SEN UNIVERSITY (逸仙先生)) ^_^
#31
好样的........
#32
#include<iostream>
#include<fstream>
using namespace std;
int map_w,map_h; //地图宽度,高度
unsigned char*map;
int title_num(int x,int y){return x*map_w+y;}//将 x,y 坐标转换为地图上块的编号
int title_x(int n){return n/map_w;}//由块编号得出 x,y 坐标
int title_y(int n){return n%map_w;}
int main()
{
int i,j;
ifstream fin("input.dat");
fin>>map_w>>map_h;
cout<<map_w<<map_h<<endl;
char *s=new char [1024*1024];
int k=0;
while(fin.get(s[k++]))
s[k]='\0';
cout<<s<<endl;
fin.close();
system("PAUSE");
return 0;
}////////做游戏不能直接读和存吗???有必要这样吗??
#include<fstream>
using namespace std;
int map_w,map_h; //地图宽度,高度
unsigned char*map;
int title_num(int x,int y){return x*map_w+y;}//将 x,y 坐标转换为地图上块的编号
int title_x(int n){return n/map_w;}//由块编号得出 x,y 坐标
int title_y(int n){return n%map_w;}
int main()
{
int i,j;
ifstream fin("input.dat");
fin>>map_w>>map_h;
cout<<map_w<<map_h<<endl;
char *s=new char [1024*1024];
int k=0;
while(fin.get(s[k++]))
s[k]='\0';
cout<<s<<endl;
fin.close();
system("PAUSE");
return 0;
}////////做游戏不能直接读和存吗???有必要这样吗??
#1
21 6
ooooooooooooooooooooo
o------ooooooo------o
o--s----------------o
o----ooooo----------o
o-------------------o
ooooooooooooooooooooo
像这么小的地图可以正常输出,可大点的地图就不行了
ooooooooooooooooooooo
o------ooooooo------o
o--s----------------o
o----ooooo----------o
o-------------------o
ooooooooooooooooooooo
像这么小的地图可以正常输出,可大点的地图就不行了
#2
这样的帖我喜欢...
如果学校批的话...
我就开始学游戏编程了.................
到时候大家支持..帮助
如果学校批的话...
我就开始学游戏编程了.................
到时候大家支持..帮助
#3
map=new unsigned char[map_w*map_h];这里分配的空间太小了吧
#4
程序没出错的话我怀疑是你窗口的问题(显示范围不够,就换行显示), 你设置一下窗口的属性.
#5
不好意思, 看错了, 你是文件输出的.
#6
to:flying_dancing(小混混-_-) 是分配空间大小
我是输出到文件output.dat,应该不存在窗口问题吧
我是输出到文件output.dat,应该不存在窗口问题吧
#7
UP
#8
你忽视了文件中的换行符。
#9
那要怎么改,楼上的帮忙下,还有那小地图就可以不用考虑换行符了吗
#10
要改两个地方:
1,文件打开方式要改成二进制方式,避免系统对换行符的特殊处理。
参考文章:http://www.vckbase.com/document/viewdoc/?id=1439
2,分配内存要分配文件大小而不是长乘宽
1,文件打开方式要改成二进制方式,避免系统对换行符的特殊处理。
参考文章:http://www.vckbase.com/document/viewdoc/?id=1439
2,分配内存要分配文件大小而不是长乘宽
#11
好,我去看看先,多谢
#12
晕咯,改半天还是不对,谁来帮忙下,谢谢了
#13
mark
#14
主要是要处理换行符,下面ok了:
#include<iostream>
#include<fstream>
using namespace std;
int map_w,map_h; //地图宽度,高度
unsigned char*map;
int title_num(int x,int y){return x*map_w+y;}//将 x,y 坐标转换为地图上块的编号
int title_x(int n){return n/map_w;}//由块编号得出 x,y 坐标
int title_y(int n){return n%map_w;}
int main()
{
int i,j;
ifstream fin("input.dat");
fin>>map_w>>map_h;
map=new unsigned char[1024*1024];
//把第一行读出不要
char* temp = new char[map_w];
fin.getline(temp,map_w);
delete[] temp;
//一行行的读
for(i=0;i<map_h;++i)fin.getline((char*)(map+i*map_w),map_w);
fin.close();
ofstream fout("output.dat");
for(i=0;i<map_h;++i)
{
for(j=0;j<map_w;++j)fout<<map[title_num(i,j)];
fout<<endl;
}
fout.close();
delete [] map;
system("PAUSE");
return 0;
}
#include<iostream>
#include<fstream>
using namespace std;
int map_w,map_h; //地图宽度,高度
unsigned char*map;
int title_num(int x,int y){return x*map_w+y;}//将 x,y 坐标转换为地图上块的编号
int title_x(int n){return n/map_w;}//由块编号得出 x,y 坐标
int title_y(int n){return n%map_w;}
int main()
{
int i,j;
ifstream fin("input.dat");
fin>>map_w>>map_h;
map=new unsigned char[1024*1024];
//把第一行读出不要
char* temp = new char[map_w];
fin.getline(temp,map_w);
delete[] temp;
//一行行的读
for(i=0;i<map_h;++i)fin.getline((char*)(map+i*map_w),map_w);
fin.close();
ofstream fout("output.dat");
for(i=0;i<map_h;++i)
{
for(j=0;j<map_w;++j)fout<<map[title_num(i,j)];
fout<<endl;
}
fout.close();
delete [] map;
system("PAUSE");
return 0;
}
#15
好,谢谢大家了^_^嘿嘿,
还有个问题就是为什么地图比较小的时候不考虑换行符问题,也可以正常输出,而地图大了就必须要考虑呢
还有个问题就是为什么地图比较小的时候不考虑换行符问题,也可以正常输出,而地图大了就必须要考虑呢
#16
to: horisly(SUN YAT-SEN UNIVERSITY (逸仙先生))
还是不对咯,输出会有乱码
还是不对咯,输出会有乱码
#17
呵呵....我认为没换行
存入和取出是相反的...存入之前,在文件能显示...取出也应该是一样
----
只是猜测
存入和取出是相反的...存入之前,在文件能显示...取出也应该是一样
----
只是猜测
#18
我就是把你的地图copy过来测试的,没问题啊。
你把我的源代码copy过去试多一次
你把我的源代码copy过去试多一次
#19
不好意思咯,刚才搞错了,
#20
还有为什么小地图可以一起读,而不用一行一行的读?^_^
#21
我试怎么不对
这是结果output.dat
oooooooooooooooooooo
屯屯屯屯屯屯屯屯屯屯
屯屯屯屯屯屯屯屯屯屯
屯屯屯屯屯屯屯屯屯屯
屯屯屯屯屯屯屯屯屯屯
屯屯屯屯屯屯屯屯屯屯
input.dat 存的是小的地图...
这是结果output.dat
oooooooooooooooooooo
屯屯屯屯屯屯屯屯屯屯
屯屯屯屯屯屯屯屯屯屯
屯屯屯屯屯屯屯屯屯屯
屯屯屯屯屯屯屯屯屯屯
屯屯屯屯屯屯屯屯屯屯
input.dat 存的是小的地图...
#22
小地图在我写的程序里面可以正常显示
#23
to: horisly(SUN YAT-SEN UNIVERSITY (逸仙先生))
小地图在你的程序里面怎么不能正常显示了
oooooooooooooooooooo
屯屯屯屯屯屯屯屯屯屯
屯屯屯屯屯屯屯屯屯屯
屯屯屯屯屯屯屯屯屯屯
屯屯屯屯屯屯屯屯屯屯
屯屯屯屯屯屯屯屯屯屯
小地图在你的程序里面怎么不能正常显示了
oooooooooooooooooooo
屯屯屯屯屯屯屯屯屯屯
屯屯屯屯屯屯屯屯屯屯
屯屯屯屯屯屯屯屯屯屯
屯屯屯屯屯屯屯屯屯屯
屯屯屯屯屯屯屯屯屯屯
#24
呵呵,我也发现了。再研究研究,io这东西是挺烦的。
#25
char* temp = new char[map_w];
fin.getline(temp,map_w);
delete[] temp;
删了,就没了..所以就不能保存了
fin.getline(temp,map_w);
delete[] temp;
删了,就没了..所以就不能保存了
#26
这个不是删除第一行吗,怎么大地图里面删除了就没事
#27
UP。。。。。。。。。。。。
#28
呵呵,我找到问题症结了,楼主粗心了。
在大地图中,
char str[] = "ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo";
cout<<strlen(str)<<endl;
这里输出是 79,但是你文件里说是80,
而在小地图
char str[] = "ooooooooooooooooooooo";
cout<<strlen(str)<<endl;
输出为21,文件里面也是21。
而我用getline的时候读的是每行map_w,大地图为80,但实际上为79,小地图为21,实际也是21。
因为getline是以\0为结束的,所以小地图读了第一行(没有读\0),下面是一个\0,所以后面读的都没有字符,因为这里有个\0阻塞了。
而读大地图时候,比实际读多了一个\0,下面的行就不会阻塞了。
呵呵,所以会出现这些问题了。
下面的修改过来了:
#include<iostream>
#include<fstream>
using namespace std;
int map_w,map_h; //地图宽度,高度
unsigned char*map;
int title_num(int x,int y){return x*map_w+y;}//将 x,y 坐标转换为地图上块的编号
int title_x(int n){return n/map_w;}//由块编号得出 x,y 坐标
int title_y(int n){return n%map_w;}
int main()
{
int i,j;
// ifstream fin("inputBig.dat");
ifstream fin("input.dat");
fin>>map_w>>map_h;
cout<<map_w<<map_h<<endl;
map=new unsigned char[(map_w+1)*map_h];
//把第一行读出不要
char* temp = new char[map_w];
fin.getline(temp,map_w);
delete[] temp;
//一行行的读
//这里每次读 map_w + 1 个字符
for(i=0;i<map_h;++i){fin.getline((char*)(map+i*map_w),map_w+1);cout<<(map+i*map_w)<<endl;}
fin.close();
ofstream fout("output.dat");
for(i=0;i<map_h;++i)
{
for(j=0;j<map_w;++j)fout<<map[title_num(i,j)];
//fout.write((char*)(map+i*map_w),map_w);
fout<<endl;
}
fout.close();
delete [] map;
system("PAUSE");
return 0;
}
在大地图中,
char str[] = "ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo";
cout<<strlen(str)<<endl;
这里输出是 79,但是你文件里说是80,
而在小地图
char str[] = "ooooooooooooooooooooo";
cout<<strlen(str)<<endl;
输出为21,文件里面也是21。
而我用getline的时候读的是每行map_w,大地图为80,但实际上为79,小地图为21,实际也是21。
因为getline是以\0为结束的,所以小地图读了第一行(没有读\0),下面是一个\0,所以后面读的都没有字符,因为这里有个\0阻塞了。
而读大地图时候,比实际读多了一个\0,下面的行就不会阻塞了。
呵呵,所以会出现这些问题了。
下面的修改过来了:
#include<iostream>
#include<fstream>
using namespace std;
int map_w,map_h; //地图宽度,高度
unsigned char*map;
int title_num(int x,int y){return x*map_w+y;}//将 x,y 坐标转换为地图上块的编号
int title_x(int n){return n/map_w;}//由块编号得出 x,y 坐标
int title_y(int n){return n%map_w;}
int main()
{
int i,j;
// ifstream fin("inputBig.dat");
ifstream fin("input.dat");
fin>>map_w>>map_h;
cout<<map_w<<map_h<<endl;
map=new unsigned char[(map_w+1)*map_h];
//把第一行读出不要
char* temp = new char[map_w];
fin.getline(temp,map_w);
delete[] temp;
//一行行的读
//这里每次读 map_w + 1 个字符
for(i=0;i<map_h;++i){fin.getline((char*)(map+i*map_w),map_w+1);cout<<(map+i*map_w)<<endl;}
fin.close();
ofstream fout("output.dat");
for(i=0;i<map_h;++i)
{
for(j=0;j<map_w;++j)fout<<map[title_num(i,j)];
//fout.write((char*)(map+i*map_w),map_w);
fout<<endl;
}
fout.close();
delete [] map;
system("PAUSE");
return 0;
}
#29
每次读的时候要比实际的字符多读一个。
fin.getline((char*)(map+i*map_w),map_w+1);
所以分配空间应该为:
map=new unsigned char[(map_w+1)*map_h];
fin.getline((char*)(map+i*map_w),map_w+1);
所以分配空间应该为:
map=new unsigned char[(map_w+1)*map_h];
#30
哦,懂了,是我粗心了,谢谢你了horisly(SUN YAT-SEN UNIVERSITY (逸仙先生)) ^_^
#31
好样的........
#32
#include<iostream>
#include<fstream>
using namespace std;
int map_w,map_h; //地图宽度,高度
unsigned char*map;
int title_num(int x,int y){return x*map_w+y;}//将 x,y 坐标转换为地图上块的编号
int title_x(int n){return n/map_w;}//由块编号得出 x,y 坐标
int title_y(int n){return n%map_w;}
int main()
{
int i,j;
ifstream fin("input.dat");
fin>>map_w>>map_h;
cout<<map_w<<map_h<<endl;
char *s=new char [1024*1024];
int k=0;
while(fin.get(s[k++]))
s[k]='\0';
cout<<s<<endl;
fin.close();
system("PAUSE");
return 0;
}////////做游戏不能直接读和存吗???有必要这样吗??
#include<fstream>
using namespace std;
int map_w,map_h; //地图宽度,高度
unsigned char*map;
int title_num(int x,int y){return x*map_w+y;}//将 x,y 坐标转换为地图上块的编号
int title_x(int n){return n/map_w;}//由块编号得出 x,y 坐标
int title_y(int n){return n%map_w;}
int main()
{
int i,j;
ifstream fin("input.dat");
fin>>map_w>>map_h;
cout<<map_w<<map_h<<endl;
char *s=new char [1024*1024];
int k=0;
while(fin.get(s[k++]))
s[k]='\0';
cout<<s<<endl;
fin.close();
system("PAUSE");
return 0;
}////////做游戏不能直接读和存吗???有必要这样吗??