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

时间:2011-05-19 04:57:42

标签: 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;
}

当我输入时:

  
    

12345678901234567890

  

输出是:

  
    

123456789

  

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

5 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:3)

如果您读入的变量不足以容纳整行,则输入操作将失败,并且在您致电cin.clear()之前,流将不再读取任何内容。

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

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

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

答案 2 :(得分:0)

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

  1. 您使用的C ++可能无法确认标准。 - 不可能。
  2. 你在某处找到了EOF喜欢的角色。
  3. 我的猜测是将char[]更改为string (STL),然后尝试一下。此外,当您说您一次输入12345678901234567890时,所有内容都会进入test。由于test只有10个字节长,因此将输出123456789。由于为istream类设置了failbit并且阻止了进一步的输入,因此没有输入到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;
    
    }
    

答案 3 :(得分: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之后按两次输入

答案 4 :(得分:0)

The getline() function has the following two syntaxes:

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

s: Pointer to an array of characters where extracted characters are stored as a c-string.

n: Maximum number of characters to write to s (including the terminating null character).

delim: Explicit delimiting character

The return type of this function is istream object (*this).

In the above scenario, the data is read into the pointer to an array of character, test, which is converted at runtime and hence can store up to 50 characters as declared in the cin.getline(test, 50).

If you want to achieve your desired result kindly use n=10