C++ 为什么下一行不执行C++;
我已经附上了我的程序的完整源代码,可以打开C++ 为什么下一行不执行C++;,c++,arrays,char,ifstream,C++,Arrays,Char,Ifstream,我已经附上了我的程序的完整源代码,可以打开.txt文件。它不会在cout之后执行这是一种非常浪费的方法来计算文件中的行数 for (int i=0; getline(inputfiles,line); i++) // i is also completely useless here { length++; } 你读了整个文件,却把所有的东西都扔掉,重新开始!完成此循环后,inputfiles.eof()将为true,您将永远不会在循环期间输入下一个,也不会为循环输入最后一个(因为i
.txt
文件。它不会在cout之后执行这是一种非常浪费的方法来计算文件中的行数
for (int i=0; getline(inputfiles,line); i++) // i is also completely useless here
{
length++;
}
你读了整个文件,却把所有的东西都扔掉,重新开始!完成此循环后,inputfiles.eof()
将为true
,您将永远不会在循环期间输入下一个,也不会为循环输入最后一个(因为i==count
)。执行直接跳到inputfiles.close()
,然后从main
返回
我建议您边走边写行
字符串:
for ( ; getline(inputfiles, line); )
{
// do stuff with line and ditch the global char arrays
}
如果您想存储这些行以备以后使用,那么只需保存它们:)最简单的方法是使用:
std::vector所有这些行;
while(getline,file,line)将所有的行放在后面(line);
在那里,整个文件现在被一行一行地保存在所有行中。你可以像在数组中一样访问它们,比如所有行[0]
。你也不需要事先知道行数-向量在向它们添加内容时会自动展开
现在,要解析一行并从中提取格式化输入,请查看所提供的内容。您问:
然后呢,
file = new char[length][250];
确保在函数结束前调用delete[]file
你说:
你可以重新开始阅读
inputfiles.seekg(0);
count = 0;
while(!inputfiles.eof())
{
inputfiles.getline(file[count],250);
count++;
}
为什么不直接使用getline(cin,new_inputfile);
跳过中间人?文件不是char
而是char数组
很大的不同。@NeilKirk你是什么意思?我把getline(cin,new_inputfile)
放在哪里?而不是cin.getline(filename,sizeof(filename));字符串new inputfile(filename)
您有字符串new\u inputfile;getline(cin,new\u inputfile)
@NeilKirk谢谢。我怎么存储这行代码呢?我听说你不用数组也可以。就像我的txt
文件中的第一行代码是Name=Mike
,我想把我的Name变量设置为Mike
。我的第二行代码是Age=10
,我想把Age变量设置为10
谢谢。那么我怎么存储呢我要说的那一行?我听说你不用数组也能做到。就像我的txt
文件中的第一行是Name=Mike
,我想把我的Name
变量设置为Mike
。我的第二行是Age=10
,我想把Age
变量设置为10@user4167396我把答案扩大了一点。谢谢:). 有没有办法读取文件,不是存储行,而是将行存储到变量中。例如,如果我的txt
文件的第一行是Name=Mike
,我想将我的Name
变量设置为Mike
。我的第二行是Age=10
,我想将Age
变量设置为10
。我打算创建一个setName
和setAge
方法来存储行。不过,如果你能自己找出这一部分,我会很高兴:)提示:你可以做int-age;cin>>年龄代码>。您可以对ifstream
对象而不是cin
执行相同的操作。下一行呢?每行都有一个新值,因此需要一个新变量。请帮帮我,这对我来说意义重大me@MattMcNabb,我感谢你的评论。有时候,对我来说,直截了当地回答OP的问题比建议一种不同但更好的方法更有意义。有时我确实建议采用不同的方法。对于这个问题,我觉得直截了当地回答这个问题更有意义。我不知道你说的“直截了当”是什么意思char file[length][250]
是非法的,必须用一些法律代码替换。我的建议纠正了这个问题。它建议对OP的代码进行最小的修改,使代码合法化。这就是我回答“切中要害”的意思。
// char file[length][250]; <- How can I create the array based on the length variable?
char (*file)[250] = NULL;
file = new char[length][250];
// CODE DOES NOT EXECUTE AFTER THIS.
inputfiles.seekg(0);
count = 0;
while(!inputfiles.eof())
{
inputfiles.getline(file[count],250);
count++;
}