【问题标题】:Read numbers from a file into a multidimensional array将文件中的数字读入多维数组
【发布时间】:2021-02-07 06:05:15
【问题描述】:

我有一个格式如下的 .txt 文件:

906 25 25
1997 25 25
900 25 25
1990 50 1.75
1981 50 50
925 25 25

我编写了以下代码将数字读入数组:

float numbers[1029][2];
std::ifstream fin;
fin.open("GiftCardFinal.txt");
if (!fin.is_open())
{
    return 0;
}
for (int i = 0; i < 1029; i++)
{
    for (int j = 0; j < 3; j++)
    {
        fin >> numbers[i][j];
    }
    
}
fin.close();

但是,当我运行此代码以测试它是否正确读取数字时...

std::cout << numbers[0][0] << " ";
std::cout << numbers[0][1] << " ";
std::cout << numbers[0][2] << " ";
std::cout << std::endl << std::endl;
std::cout << numbers[1][0] << " ";
std::cout << numbers[1][1] << " ";
std::cout << numbers[1][2] << " ";

它输出:

906 25 25

25 1997 25

任何人都可以提供帮助或就我可以改进的方面提供建议吗?

【问题讨论】:

  • 将第 2 维增加到 3 可能是一个好的开始。
  • std::cout &lt;&lt; numbers[0][2] 超出了第二个数组维度的边界。
  • 我原来确实设置为 3。我不明白为什么不起作用时将其更改为 2
  • 将其设置为 3 会导致以下输出:906 25 1997 1997 25 900
  • 当您将第 2 维设置为 3 时,您的内部循环不会填充第 2 维。试试j &lt; 3

标签: c++ multidimensional-array


【解决方案1】:

尝试运行这段代码:

#include <iostream>
#include <fstream>  
using namespace std;

#define NUM_LINE 10000

int main()
{
    float numbers[NUM_LINE][3];
    std::ifstream fin;
    fin.open("GiftCardFinal.txt");
    if (!fin.is_open())
    {
        return 0;
    }
    for (int i = 0; i < NUM_LINE; i++)
    {
        for (int j = 0; j < 3; j++)
        {
            fin >> numbers[i][j];
        }
        
    }
    fin.close();
    
    for (int i = 0; i < NUM_LINE; i++)
    {
        for (int j = 0; j < 3; j++)
        {
            cout << numbers[i][j] << " ";
        }
        cout << endl;
    }

    return 0;
}

输出:

906 25 25
1997 25 25
900 25 25
1990 50 1.75
1981 50 50
925 25 25

【讨论】:

  • 它必须读取约 1000 行和每列 3 列
  • 我更新了我的代码。如果您已经知道输入文件中的行数,则可以更改 NUM_LINE 的值。如果事先不知道输入文件的行数,请检查this post
  • for 循环与原始循环有何不同?感谢您的帮助
  • 我将代码更改点从三行移到了一行。检查您的 numbers 数组声明和外部 for 循环。现在您只需要更改#define NUM_LINE 10000 中的行数值。
  • 您的代码不起作用,因为您声明了具有错误维度的 numbers 数组。应该是1029 x 3
猜你喜欢
  • 1970-01-01
  • 2017-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多