鱼C论坛

 找回密码
 立即注册
查看: 3020|回复: 4

c++文件

[复制链接]
发表于 2019-4-4 10:29:28 | 显示全部楼层 |阅读模式
5鱼币
c++  各位大佬这个从文件读出来的数据怎么是地址呢 有没有从文件读出各种类型数据的方法呀
#include "stdafx.h"
#include <fstream>
#include<iostream>
using namespace std;
int main()
{
        int a[8], b[8],i;
        ifstream indata;
        ofstream outdata("D:\\sh.txt", ios::app);
        if (!outdata)
        {
                cerr << "打开失败!";
                return -1;
        }
        for (i = 0; i < 8; i++)
        {
                cin >> a[i];
        }
        for (i = 0; i < 8; i++)
        {
                outdata << a[i];
        }
        outdata.close();
        indata.open("D:\\sh.txt");
        for (i = 0; i < 8; i++)
        {
                indata >> b[8];
        }
        for (i = 0; i < 8; i++)
        {
                cout << b[i];
        }
        indata.close();
    return 0;
}

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-4-4 10:38:27 | 显示全部楼层
有两个问题:
1. 定义的数组变量int a[8], b[8],在使用之前要初始化。
2. 这条语句:indata >> b[8];是不是应该是:
                   indata >> b[i];
这么使用是越界了。所以变量b的值就是随机数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-4-4 11:08:25 | 显示全部楼层
wwhywhy 发表于 2019-4-4 10:38
有两个问题:
1. 定义的数组变量int a[8], b[8],在使用之前要初始化。
2. 这条语句:indata >> b[8];是 ...

我按你说的改了 还是地址 不行
for (i = 0; i < 8; i++)
        {
                indata >> b[8];
        }
应该是这一句的问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-4-4 11:09:11 | 显示全部楼层
wwhywhy 发表于 2019-4-4 10:38
有两个问题:
1. 定义的数组变量int a[8], b[8],在使用之前要初始化。
2. 这条语句:indata >> b[8];是 ...

文件里的数据 就没有到 b 里面
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-4-4 14:58:55 | 显示全部楼层
首先,你输出的时候使用的app模式
ofstream outdata("D:\\sh.txt", ios::app);
那么输出内容的时候只会在之后附加内容,
而打开文件的时候是从头开始读取的,那么sh.txt之前包含的东西便会影响输出结果

第二、你输出的时候没有在数据中间加任何分隔符
          outdata << a[i];
试想,你a[0]到a[7]分别等于0 1 2 3 4 5 6 7,那么输出的时候是什么样
01234567 ,重新读取的时候会把这01234567当一个整体,于是
b[0]=1234567 ,而b[1]-b[7]读不出来任何东西,
反复执行的话,数据还会变成012345670123456701234567,这个时候再读,连b[0]都不能读出正确的数据了

问题就这两个问题,修改后的程序如下
#include <fstream>
#include<iostream>
using namespace std;
int main()
{
        int a[8], b[8], i;
        ifstream indata;
        ofstream outdata("D:\\sh.txt");  //去掉ios:app标识
        if (!outdata)
        {
                cerr << "打开失败!";
                return -1;
        }
        for (i = 0; i < 8; i++)
        {
                cin >> a[i] ;
        }
        for (i = 0; i < 8; i++)
        {
                outdata << a[i] <<" ";  //加入分隔符
        }
        outdata.close();
        indata.open("D:\\sh.txt");
        for (i = 0; i < 8; i++)
        {
                indata >> b[i];
        }
        for (i = 0; i < 8; i++)
        {
                cout << b[i]<<" ";
        }
        indata.close();
        system("pause");
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-17 04:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表