C++編程時容易出現的錯誤

1.動態創建二維數組的方法:

int**arrry;//4行五列

array = new int*[4];
for (int i = 0; i <= 3; i++)
array[i] = new int[5];

2.重載等號後,初始化第二個對象時可以用第一個對象

3.比較字符串a[20]與b[20]是否相等,用strcmp(a,b),而不是if(a[20]==b[20])

4.在同一個子函數裏面打開文件後,循環後指針不會回到文件頭,需要seek(seekg或者seekp,後面統稱seek)重置。用seek之前一般要用clear()函數,把流的標記清除掉(還有各種錯誤標識)。

對於我個人而言,如果在一個循環執行完後還沒有找到需要的結果,(第二個)循環之前就需要clear()和seek函數。

5.ios::app和ios::ate剛開始指針都指向文件尾,可是ios::app模式下不能更改指針位置而ios::ate可以.

6.要進行讀寫操作,只用ios::binary可能會read不進去而進入死循環,所以一般爲 fstream file("filename",ios::binary | ios::in | ios::out)

7.文件每read後指針都會向下走一個,所以讀到當前操作內存時,還要readfile.seekg(-(int)sizeof(contacts), ios::cur);需要的話之後還要readfile.seekg(sizeof(contacts), ios::cur)回來.

8.在一個子函數內,開頭開一個文件,結尾關閉後,再開同一個文件,然後循環回來,對文件的操作可能會出錯(畢竟不是同一個文件對象了).

9.判斷文件是否讀取完

正確的方法:

readfile.read((char*)&file, sizeof(contacts));
while (!readfile.eof())
{
if (strcmp(ad.name, file.name) == 0)//判斷是否添加已有的人
{
cout << "已有該聯繫人,電話號碼爲:" << file.name<<endl;
fla++; break;
}
readfile.read((char*)&file, sizeof(contacts));
}

易錯法:

while (!readfile.eof())
{
readfile.read((char*)&file, sizeof(contacts));
if (strcmp(ad.name, file.name) == 0)//判斷是否添加已有的人
{
cout << "已有該聯繫人,電話號碼爲:" << file.name<<endl;
fla++;
break;
}

}

容易出錯的地方在於read後,文件已經完畢,然而不能及時退出,可能再次執行一次if裏面的內容,導致重複操作.






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章