输出文件里的内容的小问题。

zhengart 2010-03-29 10:16:42
代码如下:
#include <iostream>
#include<fstream>
using namespace std;

struct student
{
char name[10];
char sex;
int age;
char university[20];
};

int main()
{
student stu1;
ifstream ifs("1.txt");
if(ifs)
{
while( !ifs.eof())
{
ifs>>stu1.name>>stu1.sex>>stu1.age>>stu1.university;
cout<<stu1.name<<' '<<stu1.sex<<' '<<stu1.age<<' '<<stu1.university<<endl;
}
ifs.close();
}
else
cout<<"error! Can't open the file."<<endl;
cout<<endl;
return 0;
}

输出如下:kjjh m 232 kjfhe
fefasf w 34 kfjef
w 34

问题:1.txt文件中只有两行数据,没有最后一行的(w 34)。
不过在提醒他文件的末尾不是kfjef结尾的,而是多了一个空格。
请问:为什么在输出到控制台时多出了w 34 这一行?空格与这一行的关系,其中原理是什么?
...全文
53 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
fjx1982441 2010-03-29
  • 打赏
  • 举报
回复
学习了。
zhengart 2010-03-29
  • 打赏
  • 举报
回复
原来是这样啊。。明白了。
我也调试了。不过开始的时候就是不明白为什么字符串的为什么会是返回空""
原来是c风格字符串会清0,我改string试了下,保持原来数据。
谢谢你。
cphj 2010-03-29
  • 打赏
  • 举报
回复
调试了一下,原来是>>输入符对于字符串输入失败会把字符串清0(第一个字节为\0),而对于基本类型则保持原数据,所以出现只输出w 34的现象
zhengart 2010-03-29
  • 打赏
  • 举报
回复
我知道多出空格是要多循环一次。

不过我想知道为什么会多输出了最后的一行"w 34".且为什么是"w 34"而不是其他的数据?
其中的最后一次空格的循环是怎么回到"w 34"这个位置的。

如果是回到w这里也应该是输出4个数据(最少也把最后的kfjef也一起输出才对啊),
为什么又只输出了2个数据。
FingerStyle 2010-03-29
  • 打赏
  • 举报
回复
最后一行应该跟第二行是一样的
lirg8405 2010-03-29
  • 打赏
  • 举报
回复
ifs.eof()
这个要多判断一次....因为在结尾了还是为真的
FingerStyle 2010-03-29
  • 打赏
  • 举报
回复
多了个空格 你的ifs.eof()判断的是否没到文件结尾 会继续下次循环

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧