首页 > 解决方案 > 从配置文件读取和存储值的函数

问题描述

我对 C++ 编程比较陌生,我只是想创建一个函数来打开配置文件,读取每一行和每一列,然后将值存储到某个数组中。

所以我的配置文件看起来像这样,它只是存储值:

12345    10    20
67890    30    40
...
...

我想要做的是打开这个文件,读取每一行并将值存储到一个[i][j]数组中。因此,对于上述内容,它将存储为:

[0][0] = 12345
[0][1] = 10
[0][2] = 20
[1][0] = 67890
[1][1] = 30
[1][2] = 40

我一直在fopen研究打开文件的函数,但是当我研究如何以我想要的方式存储这些值时(使用类似fgets的函数),我一直碰壁。

到目前为止我的尝试:

#include <iostream>
using namespace std;

int main()
{
    FILE *fp;
    fp = fopen("configFile.conf","r");
    
    char a[20];
    char b[20];
    char c[20];
        
    fscanf(fp, "%s\t%s\t%s", a, b, c);
    cout << a << " " << b << " " << c << endl;
}

输出:

12345    10    20

现在我只想修改这个循环直到文件结束,并将值存储在基于第 i 个元素的数组中。

标签: c++parsingconfiguration

解决方案


这是 C 代码:

#include <stdio.h>

int main()
{
   FILE *fp;
   int i = 0;
   fp = fopen("configFile.conf", "r");

   if(fp == NULL) // To check for errors
   { 
      printf("Error \n");
   }

   char a[20][20]; // Declared a 2D array
   char b[20][20];
   char c[20][20];

   while (fscanf(fp, "%s\t%s\t%s", a[i], b[i], c[i]) != EOF) //fscanf returns EOF if end of file (or an input error) occurs 
   {
      printf("%s  %s   %s\n", a[i], b[i], c[i]);
      i++;
   }

   return 0;
}

C++代码是:

#include <iostream>
using namespace std;

int main()
{
   FILE *fp;
   int i = 0;
   fp = fopen("configFile.conf", "r");

   if(fp == NULL) // To check for errors
   {
      cout<< "Error" << endl;
   }

   char a[20][20]; // Declared a 2D array
   char b[20][20];
   char c[20][20];

   while (fscanf(fp, "%s\t%s\t%s", a[i], b[i], c[i]) != EOF) //fscanf returns EOF if end of file (or an input error) occurs 
   {
      cout << a[i] << " " << b[i] << " " << c[i] << endl;
      i++;
   }

   return 0;
}

推荐阅读