[英]C++ file writing/reading
我試圖創建一個數組,將數組寫入文件,然后顯示它。 它似乎正在工作,但我只是輸出的一部分(前三個元素),或者我得到了邊界上的值。
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
int arr[20];
int i;
for (i = 0; i < 5; i++)
{
cout << "Enter the value to the array: " << endl;
cin >> arr[i];
}
ofstream fl("numbers.txt");
if (!fl)
{
cout << "file could not be open for writing ! " <<endl;
}
for (i = 0; i < arr[i]; i++)
{
fl<<arr[i]<<endl;
}
fl.close();
ifstream file("numbers.txt");
if(!file)
{
cout << "Error reading from file ! " << endl;
}
while (!file.eof())
{
std::string inp;
getline(file,inp);
cout << inp << endl;
}
file.close();
return 0;
}
for
循環中的終止條件不正確:
for(i=0;i<arr[i];i++)
如果用戶輸入以下5個int
:
1 0 4 5 6
for
循環將在第二個int
0
處終止,因為1 < 0
( i<arr[i]
等於)等於false
。 該代碼具有訪問數組范圍之外的潛力,可以進行輸入:
10 11 12 13 14
for
循環將遍歷前5個元素,並開始處理數組arr
中的統一值,因為它尚未初始化:
int arr[20];
如果arr
的元素總是大於i
,則可能導致對數組的訪問超出范圍。
一個簡單的解決方法:
for(i=0;i<5;i++)
其他要點:
始終檢查I / O操作的結果,以確保變量包含有效值:
if (!(cin >> arr[i])) { // Failed to read an int. break; }
for
循環必須存儲讀取到arr
的int
的數量,因此其余代碼僅處理用戶提供的值。 除了使用固定大小的數組和指示已填充元素的數量的變量外,另一種方法是使用std::vector<int>
,該std::vector<int>
僅包含有效的int
(並且可以查詢其size()
或使用迭代器進行迭代)。
while (!file.eof())
不正確,因為只有嘗試讀取超出文件末尾的讀取時,文件末尾標志才會設置。 立即檢查I / O操作的結果:
while (std::getline(file, inp)) { }
嘗試這個:
//for(i=0;i<arr[i];i++)
for(i=0;i<5;i++)
[編輯]我將使用0初始化數組,如下所示:int arr [20] = {0}; 在這種情況下,您可以使用例如:
while ((arr[i] != 0 || i < sizeof(arr))
就像hmjd說
for(i=0;i<arr[i];i++)
看起來錯了
它應該看起來像這樣
int size;
size=sizeof(your array);
for(i=0;i<size;i++)
i<array[i]
這是錯誤的,因為它與數組的內容相對應,它不檢查數組的大小。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.