5
#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;
}

当我输入:

12345678901234567890

输出是:

123456789

好像cont是空的。有人可以解释一下吗?

4

5 回答 5

9

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;
}
于 2011-05-19T05:11:48.457 回答
4

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

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

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

getline(cin, test);
getline(cin, cont);
于 2011-05-19T05:16:11.437 回答
0

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

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

我的猜测是将其更改char[]为 astring (STL)然后尝试一下。此外,当您说您一口气输入12345678901234567890时,所有输入都会进入test. 由于test只有 10 个字节长,因此将输出 123456789。failbit由于为 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;

}
于 2011-05-19T05:07:18.907 回答
0

从某处复制

cin.getline Extracts characters from the input sequence and stores them as a c-string into the array beginning at s.

提取字符直到提取 (n - 1) 个字符或找到分隔符(如果指定了此参数,则为 delim,否则为 '\n')。如果在输入序列中到达文件末尾或在输入操作期间发生错误,提取也会停止。

我相信您在输入 12345678901234567890 后按了两次回车

于 2011-05-19T05:10:55.550 回答
0

getline() 函数有以下两种语法:

istream& getline (char* s, streamsize n );
istream& getline (char* s, streamsize n, char delim );

s:指向字符数组的指针,其中提取的字符存储为 c 字符串。

n:写入 s 的最大字符数(包括终止空字符)。

delim:显式分隔符

这个函数的返回类型是istream object (*this)

在上述场景中,数据被读取到指向字符数组 test 的指针中,该数组在运行时进行转换,因此可以存储多达 50 个字符,如cin.getline(test, 50).

如果你想达到你想要的结果,请使用n=10

于 2017-08-05T11:10:31.223 回答