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!";
C++的异常好奇怪,求小神来就行了,小弟我是新手,小神就能解决这有关问题 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:

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;
 //...
}
类似的例子还可以举很多。