WCHAR ch1[256];
WCHAR ch2[256];
WCHAR ch3[256];
wifstream CI_File;
CI_File.open("1.txt", ios::app);
CI_File.imbue(locale("chs"));
int i = 5;
while (!CI_File.eof())
{
CI_File >> ch1;
CI_File >> ch2;
CI_File >> ch3;
TextOut(hdc, 5, 5, ch1, lstrlen(ch1));
TextOut(hdc, 5, 25, ch2, lstrlen(ch2));
TextOut(hdc, 5, 45, ch3, lstrlen(ch3));
/*TextOut(hdc, 5, i, ch1, lstrlen(ch1));
i += 20;*/
}
以上代碼是一個讀取1.TXT的檔案內容
檔案里的內容為:
先生你好 女士你好 小孩你好
中國好
如果用上面的代碼讀取并且列印出來的結果是:
中國好好 女士你好 小孩你好
這個ch1第一次讀取“先生你好”,而第二次讀取"中國好",這時應該是之前的”先生你好“還存在快取中,讀”中國好“的時候,將之前的”先生你“三個字覆寫了,導致最后一個“好"還存在,所以出現”中國好好“這樣的情況。
正確應該是:中國好 女士你好 小孩你好
但是如果我將代碼改成如下用一個變數去操作,就不會出現問題,不知什么原因?
while (!CI_File.eof())
{
CI_File >> ch1;
TextOut(hdc, 5, i, ch1, lstrlen(ch1));
i += 20;
}
請指點一下!
在控制臺下工程下用char ch1[256];
char ch2[256];
char ch3[256];
也不會出現問題,不知道怎么回事。
uj5u.com熱心網友回復:
僅供參考:不要使用
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;
//...
}
類似的例子還可以舉很多。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/284376.html
標籤:C++ 語言
上一篇:有人可以給我解釋一下這個程式嗎
下一篇:c字串轉換求助