繁体   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