C++的异常好奇怪,求小神来就行了,小弟我是新手,小神就能解决这有关问题
C++的错误好奇怪,求小神来就行了,我是新手,小神就能解决这问题
先把代码放上。
#include <fstream>
#include <iostream>
using namespace std;
void main() //程序从这里开始运行
{
ofstream SaveFile("H:\\cpp- home.txt");
SaveFile << "Hello World, from www.cpp-home.com and Loobian!";
SaveFile.close();
ifstream OpenFile("H\\cpp- home.txt");
char ch;
while (!OpenFile.eof())
{
OpenFile.get(ch);
cout << ch;
}
OpenFile.close();
}
我就纳闷了,怎么输出的都是“烫”啊。源文件在H盘里是一段英文字母啊!在线等。
------解决方案--------------------
恭喜你遇到了传说中的烫烫烫烫烫
目测是这句OpenFile("H\\cpp- home.txt");文件地址少了一个冒号
少年,以后还有屯屯屯屯屯在等着你
------解决方案--------------------
不行,问题的根源在于最后一次读取,实际上什么都没有读到,但还是做了一次输出。
所以解决的关键应该是把判断语句放在读取和输出之间,while放在读取前,do while放在输出后,因此都不能解决问题
正确写法1:
正确写法2:
你感受一下
------解决方案--------------------
先把代码放上。
#include <fstream>
#include <iostream>
using namespace std;
void main() //程序从这里开始运行
{
ofstream SaveFile("H:\\cpp- home.txt");
SaveFile << "Hello World, from www.cpp-home.com and Loobian!";
ifstream OpenFile("H\\cpp- home.txt");
char ch;
while (!OpenFile.eof())
{
OpenFile.get(ch);
cout << ch;
}
OpenFile.close();
}
我就纳闷了,怎么输出的都是“烫”啊。源文件在H盘里是一段英文字母啊!在线等。
------解决方案--------------------
恭喜你遇到了传说中的烫烫烫烫烫
目测是这句OpenFile("H\\cpp- home.txt");文件地址少了一个冒号
少年,以后还有屯屯屯屯屯在等着你
------解决方案--------------------
不行,问题的根源在于最后一次读取,实际上什么都没有读到,但还是做了一次输出。
所以解决的关键应该是把判断语句放在读取和输出之间,while放在读取前,do while放在输出后,因此都不能解决问题
正确写法1:
while(1)
{
OpenFile.get(ch);
if(OpenFile.eof())
break;
cout << ch;
}
正确写法2:
while(OpenFile.get(ch))
{
cout << ch;
}
你感受一下
------解决方案--------------------
不要使用
while (条件)
更不要使用
while (组合条件)
要使用
while (1) {
if (条件1) break;
//...
if (条件2) continue;
//...
if (条件3) return;
//...
}
因为前两种写法在语言表达意思的层面上有二义性,只有第三种才忠实反映了程序流的实际情况。
典型如:
下面两段的语义都是当文件未结束时读字符
while (!feof(f)) {
a=fgetc(f);
//...
b=fgetc(f);//可能此时已经feof了!
//...
}
而这样写就没有问题:
while (1) {
a=fgetc(f);
if (feof(f)) break;
//...
b=fgetc(f);
if (feof(f)) break;
//...
}
类似的例子还可以举很多。