VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 402|回复: 1

【实用C++】零基础入门教程43课IO操作打开和关闭疑问!

[复制链接]
85_avatar_middle
最佳答案
0 
donate_vip 发表于 2019-7-30 17:17:55 | 显示全部楼层 |阅读模式
  1. #include<fstream>
  2. using namespace std;
  3. int main()
  4. {
  5.         int var = 20000;
  6.         ofstream fs;
  7.         fs.open("d:\\123.txt");
  8.         if (!fs.good())
  9.         {
  10.                 cout << "文件fs打开失败" << endl;
  11.                 return 0;
  12.         }
  13.         fs << 1112 << endl;//写入1112
  14.     fs << 202<< endl;//写入202
  15.         fs.write((const char*)&var, sizeof(int));//写入100
  16.         fs.close();

  17.         ifstream fs2;
  18.         fs2.open("d:\\123.txt");
  19.         if (!fs.good())
  20.         {
  21.                 cout << "文件fs2打开失败" << endl;
  22.                 return 0;
  23.         }
  24.         var = 0;
  25.                  //读1112
  26.                  fs2 >> var;
  27.                  bool f_is_fail = fs2.fail();
  28.                  bool f_is_bad = fs2.bad();
  29.                  bool f_is_end = fs2.eof();
  30.                  bool f_is_good = fs2.good();
  31.                  
  32.                  cout << var << ",f_is_fail =" << f_is_fail << ",f_is_bad =" << f_is_bad << ",f_is_end =" << f_is_end << ",f_is_good =" << f_is_good << endl;
  33.                  //读202.5
  34.                  fs2 >> var;
  35.                  f_is_fail = fs2.fail();
  36.                  f_is_bad = fs2.bad();
  37.                  f_is_end = fs2.eof();
  38.                  f_is_good = fs2.good();
  39.                  cout << var << ",f_is_fail =" << f_is_fail << ",f_is_bad =" << f_is_bad << ",f_is_end =" << f_is_end << ",f_is_good =" << f_is_good << endl;
  40.         ////读20000

  41.         fs2.read((char*)&var, sizeof(var));
  42.         f_is_fail = fs2.fail();
  43.         f_is_bad = fs2.bad();
  44.         f_is_end = fs2.eof();
  45.         f_is_good = fs2.good();
  46.         cout << var << ",f_is_fail =" << f_is_fail << ",f_is_bad =" << f_is_bad << ",f_is_end =" << f_is_end << ",f_is_good =" << f_is_good << endl;
  47.         fs2.close();
  48.         return 0;
  49. }
复制代码

在执行这段程序的时候前2个数读取都正常,第三个数读取出现问题,正常应该是20000,但是读取出来是25610如图1;但是程序如果是不读取前2个数字,直接读取20000是正常的如图2
  1. #include<fstream>
  2. using namespace std;
  3. int main()
  4. {
  5.         int var = 20000;
  6.         ofstream fs;
  7.         fs.open("d:\\123.txt");
  8.         if (!fs.good())
  9.         {
  10.                 cout << "文件fs打开失败" << endl;
  11.                 return 0;
  12.         }

  13.         fs.write((const char*)&var, sizeof(int));//写入100
  14.         fs.close();

  15.         ifstream fs2;
  16.         fs2.open("d:\\123.txt");
  17.         if (!fs.good())
  18.         {
  19.                 cout << "文件fs2打开失败" << endl;
  20.                 return 0;
  21.         }
  22.         var = 0;

  23.         ////读20000

  24.         fs2.read((char*)&var, sizeof(var));
  25.         bool f_is_fail = fs2.fail();
  26.         bool f_is_bad = fs2.bad();
  27.         bool f_is_end = fs2.eof();
  28.         bool f_is_good = fs2.good();
  29.         cout << var << ",f_is_fail =" << f_is_fail << ",f_is_bad =" << f_is_bad << ",f_is_end =" << f_is_end << ",f_is_good =" << f_is_good << endl;
  30.         fs2.close();
  31.         return 0;
  32. }
复制代码

图1

图1

图2

图2




上一篇:为什么我设置了开机启动后,没有开机自启,而是打开了C:\Documents呢?
下一篇:为什么指针在32位操作系统占4个字节,64位是8个字节
20_avatar_middle
最佳答案
0 
online_vip 发表于 2019-8-3 15:57:20 | 显示全部楼层
本帖最后由 68ui 于 2019-8-3 16:06 编辑

解决方法,在这句代码前:
  1. fs2.read((char*)&var, sizeof(var));
复制代码

添加
  1. fs2.seekg(2, fs2.cur); // Windows中endl为crlf(如果不是以binary方式打开)
复制代码


建议了解一下文本和二进制,以及seek相关知识,百度即可,这里不多解释了。
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号 )|网站地图wx_jqr

GMT+8, 2020-11-26 09:49

Powered by CcTry.CoM

© 2009-2020 cctry.com

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