会飞的长毛象 发表于 2019-4-4 10:29:28

c++文件

c++各位大佬这个从文件读出来的数据怎么是地址呢 有没有从文件读出各种类型数据的方法呀
#include "stdafx.h"
#include <fstream>
#include<iostream>
using namespace std;
int main()
{
        int a, b,i;
        ifstream indata;
        ofstream outdata("D:\\sh.txt", ios::app);
        if (!outdata)
        {
                cerr << "打开失败!";
                return -1;
        }
        for (i = 0; i < 8; i++)
        {
                cin >> a;
        }
        for (i = 0; i < 8; i++)
        {
                outdata << a;
        }
        outdata.close();
        indata.open("D:\\sh.txt");
        for (i = 0; i < 8; i++)
        {
                indata >> b;
        }
        for (i = 0; i < 8; i++)
        {
                cout << b;
        }
        indata.close();
    return 0;
}

wwhywhy 发表于 2019-4-4 10:38:27

有两个问题:
1. 定义的数组变量int a, b,在使用之前要初始化。
2. 这条语句:indata >> b;是不是应该是:
                   indata >> b;
这么使用是越界了。所以变量b的值就是随机数。

会飞的长毛象 发表于 2019-4-4 11:08:25

wwhywhy 发表于 2019-4-4 10:38
有两个问题:
1. 定义的数组变量int a, b,在使用之前要初始化。
2. 这条语句:indata >> b;是 ...

我按你说的改了 还是地址 不行
for (i = 0; i < 8; i++)
      {
                indata >> b;
      }
应该是这一句的问题

会飞的长毛象 发表于 2019-4-4 11:09:11

wwhywhy 发表于 2019-4-4 10:38
有两个问题:
1. 定义的数组变量int a, b,在使用之前要初始化。
2. 这条语句:indata >> b;是 ...

文件里的数据 就没有到 b 里面

Croper 发表于 2019-4-4 14:58:55

首先,你输出的时候使用的app模式
ofstream outdata("D:\\sh.txt", ios::app);
那么输出内容的时候只会在之后附加内容,
而打开文件的时候是从头开始读取的,那么sh.txt之前包含的东西便会影响输出结果

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

问题就这两个问题,修改后的程序如下#include <fstream>
#include<iostream>
using namespace std;
int main()
{
        int a, b, i;
        ifstream indata;
        ofstream outdata("D:\\sh.txt");//去掉ios:app标识
        if (!outdata)
        {
                cerr << "打开失败!";
                return -1;
        }
        for (i = 0; i < 8; i++)
        {
                cin >> a ;
        }
        for (i = 0; i < 8; i++)
        {
                outdata << a <<" ";//加入分隔符
        }
        outdata.close();
        indata.open("D:\\sh.txt");
        for (i = 0; i < 8; i++)
        {
                indata >> b;
        }
        for (i = 0; i < 8; i++)
        {
                cout << b<<" ";
        }
        indata.close();
        system("pause");
        return 0;
}
页: [1]
查看完整版本: c++文件