Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;存储在字符数组中的文件的行_C++_Arrays - Fatal编程技术网

C++ c++;存储在字符数组中的文件的行

C++ c++;存储在字符数组中的文件的行,c++,arrays,C++,Arrays,我希望能够使用函数将整行读取到字符数组中 输入文本示例如下: Schmidt, Helga Alvarez, Ruben Zowkowski, Aaron Huang, Sun Lee Einstein, Beverly 但是,我不知道如何将整行字符读入数组。我知道>>的分隔符是空白,但我不确定是否将该分隔符更改为“\n”是否有效 void buildList(char (*array)[25], ifstream& inputFile){ string line; f

我希望能够使用函数将整行读取到字符数组中

输入文本示例如下:

Schmidt, Helga
Alvarez, Ruben
Zowkowski, Aaron
Huang, Sun Lee
Einstein, Beverly
但是,我不知道如何将整行字符读入数组。我知道>>的分隔符是空白,但我不确定是否将该分隔符更改为“\n”是否有效

void buildList(char (*array)[25], ifstream& inputFile){
    string line;
    for (int i = 0; i < 5; i++)
        getline(inputFile, line);
        array[i] = line.c_str();     
}
void构建列表(char(*array)[25],ifstream&inputFile){
弦线;
对于(int i=0;i<5;i++)
getline(输入文件,行);
数组[i]=line.c_str();
}
目前,这只在我的输入中读取姓氏或名字,而不是整行。我不知道如何才能改变这一点。谢谢。

用这个-

void buildList(char (*array)[25], ifstream& inputFile){
    for (int i = 0; i < 5; i++)
        std::inputFile.getline(array[i],50);
}
void构建列表(char(*array)[25],ifstream&inputFile){
对于(int i=0;i<5;i++)
std::inputFile.getline(数组[i],50);
}

getline
的第二个参数是写入字符数组的最大字符数。

首先,您肯定要在这里使用
std::string
。一旦你 要做到这一点,可以使用
std::getline

std::vector<std::string>
buildList( istream& input )
{
    std::vector<std::string> results;
    std::string line
    while ( std::getline( input, line ) ) {
        results.push_back( line );
    }
}
for ( int i = 0; i != 5; ++ i ) {
    input.getline( array[i], maxLength );
}
另外:函数不应将
std::ifstream&
作为 参数(除非它要打开或关闭文件)。一
应使用std::istream&。

@JoeZ返回字符串,而不是char*。请尝试使用getline。就是这样。您始终可以将字符串转换为char*array。@WorldDominator准确地说,它将字符串作为输出参数。当然,你总是可以得到任何字符串的
cstr
。我真的建议你使用
std::string
版本的
getline
,但是如果你绝对坚持不使用,有些版本是使用原始
char
缓冲区的流成员。@Hulk我刚刚按照您的建议编辑了我的代码,但编译器给了我一个问题:“将'const char*'赋值为'char[25]'时的不兼容类型”。我不确定c_str是否对我有帮助。如果我使用getline,我会得到一个错误:调用“getline(std::ifstream&,char[25])时没有匹配的函数。该函数在
std
命名空间中声明。不过我使用的是命名空间std。不是因为我用了字符[25]而不是字符串吗?是的,我忽略了这一点,我将编辑答案。这是完全错误的。接受
char*
getline
std::istream
的成员,必须在调用中使用成员语法。它还需要一个最大长度作为第二个参数。谢谢你,詹姆斯!input.getline工作得非常出色。我的教授说我们应该用char**来做这个作业,所以我才这么做。而且,他还没有研究过向量。我会记住istream&出于好奇,为
array[]
分配的内存在哪里?是什么设置了数组中所有的
char*
?@worldsdominator我观察到了一些类似的东西。从逻辑上讲,我不相信有人会在教你
std::vector
std::string
之前,向你介绍类似于
char(*array)[25]
(指向25
char
数组的指针,或者指向第一个这样的数组的指针)的声明,但我一直在调用站点看到它。@JoeZ。我猜他有类似于
字符数据[5][25]
,并将
数据
作为参数传递。然而,什么让我明白:做正确的(如果这是他的数据声明,他做得对)需要知道C++类型的一些更神秘的方面。“这将是我最后教的东西之一。”詹姆斯坎泽说实话,这位老师教学很差,已经两个星期没上课了。如果他在这里的话,我已经学到了很多东西。他说我们必须在主函数中将数组初始化为数组[5][25](我使用的是头文件)。这就是我传递char(*array)[25]的原因。