cin.getline()具有更大的尺寸

der*_*ryk 4 c++ getline

#include<iostream>
using namespace std;

int main()
{
   char test[10];
   char cont[10];

   cin.getline(test,10);
   cin.getline(cont,10);

   cout<<test<<" is not "<<cont<<endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我输入:

12345678901234567890

输出是:

123456789

这似乎cont是空的.有人可以解释一下吗?

and*_*ski 7

istream::getline如果输入太长则设置失败位,这会阻止进一步输入.将您的代码更改为:

#include<iostream>
using namespace std;

int main()
{
   char test[10];
   char cont[10];

   cin.getline(test,10);
   cin.clear();                    // add this
   cin.getline(cont,10);

   cout<<test<<" is not "<<cont<<endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)


Bo *_*son 6

如果您读入的变量不够大,无法容纳整行,则输入操作将失败,并且流将不会再读取任何内容,直到您调用cin.clear()

您应该使用 std::string 来保存数据。它将调整自身大小以匹配输入。

std::string test;
std::string cont;

getline(cin, test);
getline(cin, cont);
Run Code Online (Sandbox Code Playgroud)


Sri*_*ram 0

该标准规定,在以下条件下,您可以获得比您输入的“更短”的行:

  1. 您使用的 C++ 可能不符合标准。- 不可能。
  2. EOF在某个地方碰到了一个类似的角色。

我的猜测是将 更改char[]为 astring (STL)然后尝试一下。另外,当你说你12345678901234567890一次性输入时,所有的内容都会进入test。由于test只有 10 个字节长,因此将输出 123456789。failbit由于 cont是为 istream 类设置的,因此不会向 cont 输入任何内容,并且会阻止进一步的输入。这段代码适用于我std::string

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

    int main()
    {
       //char test[10];
       //char cont[10];

       string test;
       string cont;

       cin >> test;
       cin >> cont;

       //cin.getline(test,10);
       //cin.getline(cont,10);

       cout<<test<<" is not "<<cont<<endl;
        return 0;

}
Run Code Online (Sandbox Code Playgroud)