# 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文件, 这个文件就必须在当前目录中.
ifs.eof是判断是否到达文件结尾。
DAT文件是二进制文件(关键看你怎么使用, 所有文件都可以看成binary文件), 重命名为abc.DAT 就可以了.
当前工作目录就是程序运行的时候使用的目录, 一般是程序所在目录. 比如你使用相对路径abc.txt文件, 这个文件就必须在当前目录中.
#2
这样改写程序就OK了,
while(ifs>>c)
{
cout < <c;
n++;
}
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")就可以
当从文件读入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文件, 这个文件就必须在当前目录中.
ifs.eof是判断是否到达文件结尾。
DAT文件是二进制文件(关键看你怎么使用, 所有文件都可以看成binary文件), 重命名为abc.DAT 就可以了.
当前工作目录就是程序运行的时候使用的目录, 一般是程序所在目录. 比如你使用相对路径abc.txt文件, 这个文件就必须在当前目录中.
#2
这样改写程序就OK了,
while(ifs>>c)
{
cout < <c;
n++;
}
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")就可以
当从文件读入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;
}