2 qq 32742637 qq_32742637 于 2016.04.23 20:01 提问

求大神赐教,关于文件读写,fun1正常fun2就会输出乱码
c++

#define _CRT_SECURE_NO_WARNINGS
#include
#include
#include
#include
using namespace std;
class Worker
{
public:
int num;
char name[20];
int age;
int wage;
};
Worker work[5] = { 12, "Zhang", 22, 10000, 4, "Li", 23, 1000, 2, "Fan", 52, 100, 8, "Wu", 24, 10, 6, "Ha", 28, 12000 };
void swap(Worker worker[], int i, int j)
{
int temp1, temp2, temp3;
char temp4[20];
temp1 = worker[i].num;
temp2 = worker[i].age;
temp3 = worker[i].wage;
strcpy(temp4, worker[i].name);
worker[i].num = worker[j].num;
worker[i].age = worker[j].age;
worker[i].wage = worker[j].wage;
strcpy(worker[i].name, worker[j].name);
worker[j].num = temp1;
worker[j].age = temp2;
worker[j].wage = temp3;
strcpy(worker[j].name, temp4);

}
void fun1() //将5个工人数据写入到文件,fun1函数正常
{
ofstream outfile("work.txt", ios::out);
if (!outfile)
{
cerr << "open error!" << endl;
abort();
}
outfile.close();
fstream iofile("work.txt", ios::out | ios::in | ios::binary);
if (!iofile)
{
cerr << "open error!" << endl;
abort();
}
for (int i = 0; i < 4; i++)
{
for (int j = i; j < 4; j++)
{
if (work[i].num > work[j + 1].num)
{
swap(work, i, j);
}
}
}
for (int i = 0; i < 5; i++)
{
iofile.write((char )&work[i], sizeof(work[i]));
iofile.seekg(i*sizeof(work[i]), ios::beg);
iofile.read((char *)&work[i], sizeof(work[i]));
cout << work[i].num << " " << work[i].name << " " << work[i].age << " " << work[i].wage << endl;
}
iofile.close();
}
void fun2()//输出乱码,为什么
{
ofstream outfile("work.txt", ios::app|ios::binary);
if (!outfile)
{
cerr << "open error!" << endl;
abort();
}
Worker worker[2] = { 101, "Lin", 72, 10800, 104, "Ka", 29, 10020 };
for (int i = 0; i < 2; i++)
{
outfile.write((char
)&worker[i], sizeof(worker[i]));
}
outfile.close();
Worker all_work[7];
ifstream infile("work.txt", ios::in|ios::binary);
if (!infile)
{
cerr << "open error!" << endl;
abort();
}
for (int i = 0; i < 7; i++)
{
infile.seekg(i*sizeof(all_work[i]), ios::beg);
infile.read((char*)&all_work[i], sizeof(all_work[i]));
cout << all_work[i].num << " " << all_work[i].name << " " << all_work[i].age << " " << all_work[i].wage << endl;
}
infile.close();
}
void main()
{
fun1();
fun2();
system("pause");
}

1个回答

qq423399099
qq423399099   Ds   Rxr 2016.04.23 20:24
已采纳

确定你的iofile.write((char )&work[i], sizeof(work[i]));是对的?
而不是iofile.write((char *)&work[i], sizeof(work[i])); ?

qq_32742637
qq_32742637 回复小灸舞: 刚才找到原因了,不知道为什么,我这里复制粘贴总是会漏掉星号。哈哈。谢啦
大约 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
求最大公约数和最小公倍数-C语言
本题为中国mooc课堂北京理工大学课程C语言程序设计(下)第一单元的课后测试题1 题目内容:   编写程序,在主函数中输入两个正整数 a,b,调用两个函数 fun1() 和 fun2(),分别求 a 和 b 的最大公约数和最小公倍数,在主函数中输出结果。 输入格式:   两个正整数 输出格式:   最大公约数和最小公倍数 输入样例:
第一周编程作业--1求最大公约数和最小公倍数2排序并插入
2排序并插入(15分) 题目内容: 编写程序,在主函数中定义一个有10个元素的整型一维数组,用户输入9个数据,调用函数,对数组元素进行从小到大排序后,在函数中输入一个数,插入到数组中正确的位置,并输出。 输入格式: 9个整数和1个整数 输出格式: 10个整数 输入样例: 2,3,1,5,6,76,89,31,90[回车] 7[回车] 输出样例: 1,2,3,5,6,
求定积分的通用函数
#include #include int main() { float y1,y2,y3,y4,y5; float f1(float); float f2(float); float f3(float); float f4(float); float f5(float); float integral (float a,float b,float(*fun)(fl
python 闭包函数
简单闭包函数例子:def one1(x): def one2(y): return x * y return one2b = one1(3) print(b(4)) # print(one1(3)(4))返回值是 12def fun1(): x = 5 def fun2(): y = x + 6 return y
python局部变量实例
def Fun1(): x = 5 def Fun2(): x*=x return x return Fun2() 上面程序有问题,修改方法如下两种方案: def Fun1(): x = [5] def Fun2(): x[0] *= x[0] return x[0] return Fun2() def Fun1(): x = 5 def Fun2():
易错java初级面试题
class A { void fun1() { System.out.println(fun2()); } int fun2() { return 123; } } public class B extends A { int fun2() { return 456; } public static void main(String argv[]) { A a; B b = new B
虚函数&动态联编
#include #include #include #include #include using namespace std;    class A { public:     virtual void fun1() { cout     virtual void fun2() { cout     void fun3() { cout     vir
程序编写规范、优化时使用的关键字含义
最名不符实的关键字----static 不要误以为关键字 static 很安静,其实它一点也不安静。这个关键字在 C 语言里主要有两个作用 1、修饰变量 第一个作用:修饰变量。变量又分为局部和全局变量,但它们都存在内存的静态区。 静态全局变量,作用域仅限于变量被定义的文件中,其他文件即使用 extern 声明也没法 使用他。准确地说作用域是从定义之处开始,到文件结尾处结束,在定义之处
ubuntu 乱码 求大神赐教
windows下的东东在ubuntu下打开以后乱码,百度之后解决方案是: 1.打开终端,在其中输入命令: gconf-editor 并回车。 2. 在新开的窗口里,在左边依次展开“apps”、“gedit-2”、“preferences”、“encodings”。 3. 在右边的窗口里,双击“auto_detected”。 4. 在弹出的对话框里,单
零基础入门学习Python(19)--函数:我的地盘听我的
知识点 函数与过程 在许多编程语言中,函数(function)是有返回值的,过程(procedure)是简单、特殊并且没有返回值的。而在Python中,严格来说只有函数没有过程。 例如: &amp;gt;&amp;gt;&amp;gt; def hello(): print('hello fishc!') &amp;gt;&amp;gt;&amp;gt; temp = hello() hello fishc! &amp;g...