int k,j;
int i=0;
int array[10] = { 0 };
char s[100] = { 0 };
FILE*p = fopen("D:\\a.txt", "r");
//FILE*p1 = fopen("D:\\b.txt", "w");
while (!feof(p))
{
memset(s, 0, sizeof(s));
fgets(s,sizeof(s), p);
array[i] = atoi(s);
printf("array[%d]=%d\n",i,array[i]);
i++;
}
uj5u.com熱心網友回復:
注意檔案后面的 空行 !while (!feof(p))
{
fgets(s,sizeof(s), p);
if(s[0]==10)
continue;
array[i] = atoi(s);
TRACE2("array[%d]=%d\n",i,array[i]);
i++;
}
uj5u.com熱心網友回復:
int array[10] = { 0 }你初始化都為0了。自己Debug下單步F10執行一下,看看while(feof(p))執行了幾次看看就清楚了。
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;
//...
}
類似的例子還可以舉很多。
“多一少一”問題占程式員常犯錯誤的10%以上!
避免“多一少一”問題的方法之一是將比如<10甚至<5的數代入程式片斷,掰手指頭心算驗證一下程式到底應該寫為
x、x-1、x+1中的哪個?
<、<=、==、>、>=中的哪個?
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/84172.html
標籤:基礎類
上一篇:VBA 能否在 listbox 上敲回車回應按鈕的單擊事件
下一篇:疵點檢測能否提供個思路?小白
