c++文件读写的一个小问题
intbianma[500];ifstreaminf("codefile.txt");if(!inf)cout<<"wrong";for(intj=0;j<x;j++)i...
int bianma[500];
ifstream inf("codefile.txt");if(!inf)cout<<"wrong";
for(int j=0;j<x;j++)
inf>>bianma[j];
inf.close();
文件里面是数字010110111为什么读不进数组里面? 展开
ifstream inf("codefile.txt");if(!inf)cout<<"wrong";
for(int j=0;j<x;j++)
inf>>bianma[j];
inf.close();
文件里面是数字010110111为什么读不进数组里面? 展开
4个回答
展开全部
看你的程序似乎是要把010110111这个“数”一位一位地存到bianma[]中, 如果是这样, 那么这个程序有几个问题:
① 文件是流的方式打开的, 就是说文件内容如何, 取决于你的程序的解读。 010110111对程序而言,更像是字符串, 你按int读取, int有范围限制, 转换后, 被读成1011011, 前面的0被舍去, 后面的1被舍去, for循环其实只读了1次。 因此最起码, 你的数字直接应该用空格分开,即: 0 1 0 1 1 0 1 1 1 那么for循环会执行9次, 分别读入bianma[0]~bianma[8]。
② 对流的读取操作, 一般应该是while(!inf.eof()) {....} 这种方式的, 很少用for, 因为一般是读到流的尾巴, 自然结束。 即使要记数, 也是while里面作的。
③ 对文件的处理, 应该尽量都按字符串按行读取, 然后再作处理, 转换也好, 还是其它的转存。 这样最安全。 因此要事不该格式, 你应该:
...
int bianma[500];
char sline[128] = "\0";
ifstream inf("new_codefile.txt");
if (!inf)
{
cout << "wrong" << endl;
return (1);
}
while (!inf.eof())
{
inf.getline(sline, 128);
.... // if sline[0] is digital -> bianma[0] ....
}
inf.close();
...
① 文件是流的方式打开的, 就是说文件内容如何, 取决于你的程序的解读。 010110111对程序而言,更像是字符串, 你按int读取, int有范围限制, 转换后, 被读成1011011, 前面的0被舍去, 后面的1被舍去, for循环其实只读了1次。 因此最起码, 你的数字直接应该用空格分开,即: 0 1 0 1 1 0 1 1 1 那么for循环会执行9次, 分别读入bianma[0]~bianma[8]。
② 对流的读取操作, 一般应该是while(!inf.eof()) {....} 这种方式的, 很少用for, 因为一般是读到流的尾巴, 自然结束。 即使要记数, 也是while里面作的。
③ 对文件的处理, 应该尽量都按字符串按行读取, 然后再作处理, 转换也好, 还是其它的转存。 这样最安全。 因此要事不该格式, 你应该:
...
int bianma[500];
char sline[128] = "\0";
ifstream inf("new_codefile.txt");
if (!inf)
{
cout << "wrong" << endl;
return (1);
}
while (!inf.eof())
{
inf.getline(sline, 128);
.... // if sline[0] is digital -> bianma[0] ....
}
inf.close();
...
展开全部
我想问这是怎么通过编译的......x的定义在哪里......
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用inf.read
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个程序的定义是什么,而且那个数你再看看是不是超出定义的范围了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询