我是C ++的初学者,在我的程序开始时,我试图将来自csv文件的数据输入到双向量中。
但是,当我尝试运行程序时,我不断在这个范围内声明'row'和'col'。
我尝试通过放'int row来解决这个问题; int col; 'above'字符串输入[row] [col];'试图解决问题 但后来我得到错误“数组绑定不是一个整数常量'''令牌”。
我想知道如何解决这个问题?或者,如果有一些我遗失的东西,我没有意识到。
#include <iostream>
#include <sstream>
#include <string>
#include <fstream>
#include <vector>
using namespace std;
string input[row][col];
const int ROW = 10;
const int COL = 4;
string input[ROW][COL];
const string datatable = "table2.csv";
string line;
int col = 0;
int row = 0;
void readCSV() ////this is the function to read the file
{
ifstream file(datatable); ///opens file
while (getline(file, line))
{
istringstream iss(line); //takes out white
string result;
while (getline(iss, result, ','))
{
input[row][col] = result; // creates string for element
col = col + 1;
}
row = row + 1;
col = 0;
}
答案 0 :(得分:0)
至少,您需要删除第一个
string input[row][col];
毕竟,input
被声明(正确)几行。
答案 1 :(得分:0)
我希望你不要认为这是冒犯性的,但这里有多个错误。
我将首先评论您的代码以显示错误的位置,然后我将解释这些问题:
#include <iostream>
#include <sstream>
#include <string>
#include <fstream>
#include <vector>
using namespace std;
string input[row][col]; /* <- "row" and "col" are not yet defined */
const int ROW = 10;
const int COL = 4;
string input[ROW][COL]; /* <- you already have a variable named "input" */
const string datatable = "table2.csv";
string line;
int col = 0;
int row = 0;
void readCSV()
{
ifstream file(datatable); ///opens file
while (getline(file, line)) /* <- no check to make sure max rows are not exceeded */
{
istringstream iss(line); //takes out white
string result;
while (getline(iss, result, ',')) /* No check to make sure max columns are not exceeded */
{
input[row][col] = result; // creates string for element
col = col + 1;
}
row = row + 1;
col = 0;
}
要修改这些,我会做以下事情:
string input[row][col]
,因为这是后面正确定义的。while (getline(file, line))
更改为while (getline(file, line) && row < ROW)
while (getline(iss, result, ','))
更改为while (getline(iss, result, ',') && col < COL)
我不保证这些是唯一的问题,并且在纠正这些问题后代码将完美运行。 (我很少用C ++编程,所以我无法100%放心地保证。)但是,这些只是我刚才注意到的一些初始错误/问题。
修改:作为补充说明,我同意另一个已发布的答案(现在似乎已删除),建议将ROW
和COL
更改为预处理器定义/宏。例如,const int ROW = 10
将变为#define ROW 10
,const int COL = 4
将变为#define COL 4
。在这里的示例中,它不会引起巨大的变化,但是这里的好处是ROW
和COL
不会占用内存空间作为变量,因为编译器将替换对{{1的所有引用}和COL
,文字定义值分别为4和10。
这有点基于偏好的建议,但是,随意做任何你觉得更舒服的事情。只是基于您提供的代码片段,您可能无论如何都不会看到任何性能变化。但是,我想对此提出个人意见,因为另一个答案表明了这一点。