簡體   English   中英

C ++文件寫入/讀取

[英]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 < 0i<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循環必須存儲讀取到arrint的數量,因此其余代碼僅處理用戶提供的值。 除了使用固定大小的數組和指示已填充元素的數量的變量外,另一種方法是使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM