c++文件和重载输出符问题
发布网友
发布时间:2023-04-13 19:20
我来回答
共2个回答
热心网友
时间:2023-10-10 03:03
流运算符的重载要以友元函数的形式,并且声明和定义要放在一起。
改成这样,就可以了
#include<iostream>
#include<string>
#include<fstream>
#include<stdlib.h>
using namespace std;
class Cstudents
{
public:
int num;
char name[30];
char gender;
int age;
float match;
float pc;
float en;
float sum;
float average;
Cstudents()
{
num=0;
strcpy(name," ");
gender=' ';
age=0;
match=0;
pc=0;
en=0;
sum=0;
average=0;
}
friend istream& operator>>(istream& is,Cstudents& c)
{
is>>c.name>>c.gender>>c.age>>c.match>>c.pc>>c.en;
return is;
}
friend ostream& operator<<(ostream& os,Cstudents& c)// <<符号也输错了
{
os<<c.num<<c.name<<c.gender<<c.age<<c.match<<c.pc<<c.en;
return os;
}
};
void main()
{
Cstudents stu[20];
ofstream fout;
ifstream fin;
int i=1,n,max=1;
fout.open("students.txt",ios::out|ios::binary);
if(!fout)
{
cout<<"错误";
exit(1);
}
cout<<"输入学号:(0号为结束输入)";
while(cin>>n&&0!=n)
{
stu[n].num=n;
cout<<"输入名字 性别 年龄 数学 计算机 外语";
cin>>stu[n];
if(n>max)max=n;
}
while(i<max+1)
{
fout.write((char*)&stu[i],sizeof(Cstudents));
i++;
}
fout.close();
fin.open("students.txt",ios::in|ios::binary);
if(!fin)
{
cout<<"错误";
exit(1);
}
cout<<"num\t"<<"name\t"<<"sex"<<"age\t"<<"match\t"<<"pc\t"<<"en\t";
i=1;
while(fin&&i<max)
{
fin.read((char*)&stu[i],sizeof(Cstudents));
cout<<stu[i];
i++;
}
fin.close();
}
热心网友
时间:2023-10-10 03:03
第一个错误不是很明白,你试试这样
String str="";
strcpy(name,str);
第二个错误也不是很明白,因为没找到81行在哪儿。
c++中重载输出操作符,为什么要返回引用
1.第一个形参为对ostream对象的引用,在该对象上将产生输出,ostream为非const,因为写入到流会改变流的状态;该形参是一个引用,因为不能复制ostream对象(在c++中定义的标准输入输出流类istream和ostream,其中拷贝构造函数和赋值操作符函数都被放置在了private部分,且只有声明,没有定义)。2.第二个形...
C++中,complex重载输入输出操作符 error C2248: 'real' : cannot a...
同时:friend ostream& operator>>(ostream& os,const complex &c);ostream& operator >>( ostream &os,const complex c)//少了一个&
函数重载问题 这代码是例题啊 在VS2010中编译不通过 说 float double...
应该是跟库函数冲突了,你可以把abs函数名改成别的。
关于C++程序的问题 貌似是重载 请高人指点
cout=0; <= 你把C++的标准输出给重定义了,想干什么?for(k=0;k<j;k++)if(w[k]=='r'){ cout++;k=0;break;} 只要字符串里有字符'r',你就把循环变量k重新赋值为0,那不死循环了么?永远达不到k<j的条件。
c++重载小问题
一,对于isiahe给LZ的点评中,友元函数的重载是有两个参数,这点LZ是对的。二,isiahe的正解无法实现连加,比如z=z+x+x;会出现问题。返回一个局部变量的引用问题,不经常练习编程会常出现,通常的解决方法,个人心得:一是作为参数传递,如MSDN中定义的函数输出很多是通过这种方法。二是作为全局变量...
c不是指针吗,输出不是应该为一个地址吗?为什么输出1234
输出流遇到不同的数据类型时有不同的重载方式。当遇到char*类型时,输出字符串的内容,而不是字符指针所指的地址。
请教关于C++中重载的问题4
你的这个程序问题太多了,有很多地方似乎在想当然。上面的英文的大意是编译器内部错误。其实就是有很多错误,它也处理不过来。也有可能是 你的编译器本身没装好。1。matrix(){a[3]=0,0,0;b[3]=0,0,0;c[3]=0,0,0;} 这个赋值是不行的,数组在声明的时候才可以这样赋值。2。friend operator...
C语言的输入输出函数和C++的输入输出流有什么区别?
C++ 的IO流库使用面向对象方法写的,用户可以重载定制,并且有严格的类型检查机制和异常处理 但是C的IO为纯粹过程式完成,无法检查类型,并且没有合适的异常机制来制止不正确的输入
新手。。C/C++输出出现一串问号
printf("%s" , s);//输出乱码 果断切换成c++版本的cout发现可以正常输出。于是上网找答案,居然惊讶的发现printf输出字符串是针对char *的,换言之,printf只能输出c语言中的内置数据,string不是c语言内置数据。更深入的来说:s这个string类型的对象并非单单只有字符串,其内还有许多用于操作的函数,...
C语言 大神们帮我看看这个指数幂问题!!!不知道为什么我老是出错_百度知...
不过这个错误其实很奇怪,因为c不存在函数重载的,函数重载是C++的概念,所以对于纯C来说是不存在这个问题的。我估计是你的编译器设置的时候没有设置成为根据源文件后缀来自动识别语言。所以他还是按照C++的方式来进行编译。这种显式类型转换虽然可以让他编译过去,但是实际上是按照C++的方式编译的,不是C...