将cin.getline与声明为

时间:2016-07-17 18:55:40

标签: c++

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

int main () {
string line,line2;
char dude[20];
cin.getline(dude,20);
fstream myfile ("example.txt",ios::in);

if(!myfile)
{
    cout<<"Not Found! ";
    system("pause");
}  
while (!myfile.eof())
{

    getline(myfile,line);
    cout<<line;

}
myfile.close();
exit(0);
  }

这样可行,但如果我这样做:

int main () {
string line,line2,dude;

它给了我一个错误。 [错误]没有匹配函数来调用&#39; std :: basic_istream :: getline(std :: string&amp;,int)&#39; 为什么?

2 个答案:

答案 0 :(得分:2)

  • std::cin.getline()需要char*缓冲区(docs
  • std::getline()需要std::string缓冲区(docs

当您更改类型时,您还必须更改您调用的功能。

答案 1 :(得分:1)

char buf[20]不是字符串,而是字符数组。如果你使用&#39; \ 0&#39;来终止数组。字节,然后它可以说是一个c字符串。但不是std::string

函数cin.getline()需要两个参数:指向字符数组的指针和缓冲区支持的字符数 - 然后用cin中的c字符串填充它。

没有cin.getline()的变体支持std :: string。为此,您需要使用std::getline(iostream, string),例如

std::string line;
std::getline(std::cin, line);
相关问题