关于I/O流的一些小问题

时间:2021-03-31 17:36:20
小弟刚到CSDN来,身无分文,请大家帮帮忙,我问题比较多,谢谢了.
# include<fstream.h>
void main(void)
{
ifstream ifs("abc.txt");
char c;
int n=0;

while(!ifs.eof())
{
ifs>>c;
cout<<c;
n++;
}
cout<<endl<<"字符个数:"<<n<<endl;
ifs.close();
}

1,我创建了一个abc文件,内容是abc,但是输出字符个数是4个对的,但为什么输出字符变成了abcc,按照教材上的应该是abc啊,很想不通!
2,问一下(!ifs.eof())是什么意思,教材上没说.
3,今天我用VISTA系统和XP系统上同时测试代码,发现有些代码在VISTA系统老是有错,是不是系统问题,不会是编辑器问题吧.
4,其实教材上的文件是DAT格式的,但我不会创建DAT格式,问一下什么是DAT文件,怎样创建DAT文件?
5,还有我对当前工作目录这个概念有点模糊,请讲下,谢谢了.

5 个解决方案

#1


我想第四个字符是换行符好, 为什么会输出abcc, 因为ifs>>c出错了, 但是并没有改写c的值, 这样差事之前的值。

ifs.eof是判断是否到达文件结尾。

DAT文件是二进制文件(关键看你怎么使用, 所有文件都可以看成binary文件), 重命名为abc.DAT 就可以了. 

当前工作目录就是程序运行的时候使用的目录, 一般是程序所在目录. 比如你使用相对路径abc.txt文件, 这个文件就必须在当前目录中. 

#2


这样改写程序就OK了,
while(ifs>>c) 

cout < <c; 
n++; 

#3


楼主用string来接收文件流,然后输出string长度看下。

#4


>>1,我创建了一个abc文件,内容是abc,但是输出字符个数是4个对的,但为什么输出字符变成了abcc,按照教材上的应该是abc啊,很想不通! 
当从文件读入3个字符的时候,还不能判断文件是否结束,所以会循环4次。第4次,到达文件末尾,无法读入任何字符,c保持了上一次的值,仍然是'c',所以输出两个'c'
通常不用eof判断,而是直接判断输入是否成功,如下:
while(ifs>>c)
{
   cout<<c;
   n++; 
}

>>2,问一下(!ifs.eof())是什么意思,教材上没说. 
eof()判断是否到达输入流的尾部了;即读文件是否结束了。它跟C的feof意思差不多。

>>3,今天我用VISTA系统和XP系统上同时测试代码,发现有些代码在VISTA系统老是有错,是不是系统问题,不会是编辑器问题吧. 
要看具体什么代码。两个系统不同,也许有些代码本来有错误,XP系统没报错而已。我没用过VISTA,不知道具体在哪些方面会影响。

>>4,其实教材上的文件是DAT格式的,但我不会创建DAT格式,问一下什么是DAT文件,怎样创建DAT文件? 
DAT文件是.DAT为后缀的文件。创建一个文件,改后缀名就可以了啦。C++创建的话,ofstream ofs("test.dat")就可以

#5



看看这个

while(!ifs.eof())
{
    n++;
    ifs>>c;
    if(ifs=='\0') break;
    cout <<c;
}


#1


我想第四个字符是换行符好, 为什么会输出abcc, 因为ifs>>c出错了, 但是并没有改写c的值, 这样差事之前的值。

ifs.eof是判断是否到达文件结尾。

DAT文件是二进制文件(关键看你怎么使用, 所有文件都可以看成binary文件), 重命名为abc.DAT 就可以了. 

当前工作目录就是程序运行的时候使用的目录, 一般是程序所在目录. 比如你使用相对路径abc.txt文件, 这个文件就必须在当前目录中. 

#2


这样改写程序就OK了,
while(ifs>>c) 

cout < <c; 
n++; 

#3


楼主用string来接收文件流,然后输出string长度看下。

#4


>>1,我创建了一个abc文件,内容是abc,但是输出字符个数是4个对的,但为什么输出字符变成了abcc,按照教材上的应该是abc啊,很想不通! 
当从文件读入3个字符的时候,还不能判断文件是否结束,所以会循环4次。第4次,到达文件末尾,无法读入任何字符,c保持了上一次的值,仍然是'c',所以输出两个'c'
通常不用eof判断,而是直接判断输入是否成功,如下:
while(ifs>>c)
{
   cout<<c;
   n++; 
}

>>2,问一下(!ifs.eof())是什么意思,教材上没说. 
eof()判断是否到达输入流的尾部了;即读文件是否结束了。它跟C的feof意思差不多。

>>3,今天我用VISTA系统和XP系统上同时测试代码,发现有些代码在VISTA系统老是有错,是不是系统问题,不会是编辑器问题吧. 
要看具体什么代码。两个系统不同,也许有些代码本来有错误,XP系统没报错而已。我没用过VISTA,不知道具体在哪些方面会影响。

>>4,其实教材上的文件是DAT格式的,但我不会创建DAT格式,问一下什么是DAT文件,怎样创建DAT文件? 
DAT文件是.DAT为后缀的文件。创建一个文件,改后缀名就可以了啦。C++创建的话,ofstream ofs("test.dat")就可以

#5



看看这个

while(!ifs.eof())
{
    n++;
    ifs>>c;
    if(ifs=='\0') break;
    cout <<c;
}