C++输入输出流问题

int main()
{
Student aStudent;
ofstream outFile;
outFile.open("Students.dat“, ios::out|ios::binary);
cout<<"Enter ID, name, and grade point average"<<endl;
cout<<"Enter end-of-file key combination to end ";
while (cin>>aStudent) {
outFile.write((char*)&aStudent,sizeof(Student));
cout<<"Enter ID, name, and grade point average"<< endl;
cout<<"Enter end-of-file key combination to end ";
outFile.close();
}请问ios::in与ios::out有什么用呢?我不写跟写了也一样的,一样可以读文件,一样可以把文件写到外面的txt文件,如果文件有内容就自动清空。
还有的就是:
outFile.write((char*)&aStudent,sizeof(Student));这个是什么意思呢?为什么又有char指针又有&在同一行呢?能详细点解释一下吗?求解

第1个回答  2019-03-26
有的,有这样的几个系统函数
isalnum
判断一个字符是否是字符类的数字或者字母
isalpha
判断一个字符是否是字母
isblank
判断一个字符是空白字符(空格和水平制表符Tab)
iscntrl
判断一个控制符(ascii码0-31之间的字符)
isdigit
判断一个字符是否是字符类的数字
isgraph
判断一个字符是否是可打印字符(ascii码33-126之间的字符)
islower
判断一个字符是否是小写字母
isprint
判断一个字符是否是包含空格在内的可打印字符(ascii码32-126之间的字符)
ispunct
判断一个字符是否是除空格,字母,数字外的标点符号
isspace
判断一个字符是空白字符(空格,换行符(\n),走纸符(\f),回车符(\r),垂直制表符(\v),水平制表符(\t))
isupper
判断一个字符是否是大写字母
isxdigit
判断一个字符是否是一个十六进制的数字
tolower
将大些字符转换为小写
toupper
将小写字符转换为大写
isalnum()函数的作用是判断一个字符是否是字符类的数字或者字母:
#include
<ctype.h>这个是他们的头文件
希望对你有所帮助
第2个回答  2011-10-03
编程要习惯给常量,尤其是标志性常量定义有直观意义的宏或变量,以增强程序可读性,便于后期维护调试。这里in out实际就是常量,但是ios给其定义了一个变量,以表明该常量代表的含义。ofstream的open函数默认第二个参数为out,调用时候可以不给出。
&是取地址,然后由char*进行强制转换。追问

outFile.write((char*)&aStudent,sizeof(Student))中的write是什么意思呢?为什么要把地址强制转换成char指针(还是字符串)呢?这条语句有什么用嗯?

追答

write函数要求第一个参数必须为char*类型,表示向outFile写入以内存地址(char*)&aStudent开始,Student长度的数据。

追问

所以outFile.write((char*)&aStudent,sizeof(Student));
意思就是把储存在地址aStudent的数据从第一个地址开始,写入到outFile的文件中,长度为sizeof(Student)?而转换了的(char*)就是地址

追答

是的。

追问

哦,谢谢,能加你qq之类的联系方式吗,因为最近学这个感觉还挺难的?

本回答被提问者采纳
第3个回答  2011-10-03
ios::与ios::out是打开方式
ios::in 是以输入方式打开,ios::out是输出方式打开。系统默认的是out,也就是写和读的方式。
in方式打开后,文件指针指向的是文件的开头,所以你再写文件的时候会清空。
write函数的要求吧,看样子应该是强制转换为字符串类型char*,Student是什么类型?结构体?追问

弄懂了,谢谢啦,请问能留一下qq吗?蛮多这一方面的问题的

追答

慢慢搞。。这个急不来,不懂的先看下MSDN啊

相似回答