C++ cin.getline()具有较大的大小 #包括 使用名称空间std; int main() { 煤焦试验[10]; char cont[10]; cin.getline(测试,10); cin.getline(续10); cout

C++ cin.getline()具有较大的大小 #包括 使用名称空间std; int main() { 煤焦试验[10]; char cont[10]; cin.getline(测试,10); cin.getline(续10); cout,c++,getline,C++,Getline,标准规定,在以下条件下,您可以获得比您输入的行“更短”的行: 您使用的C++可能不符合标准。-不可能。 你在某处碰到了一个类似于的角色 我的猜测是将char[]更改为字符串(STL)然后再试一次。另外,当你说你一次输入123456789001234567890时,所有内容都进入test。由于test只有10个字节长,将输出123456789。没有任何内容输入cont,因为为istream类设置了failbit,并且阻止了进一步的输入。此代码适用于我的std::string #include<

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

  • 您使用的C++可能不符合标准。-不可能。
  • 你在某处碰到了一个类似于的角色
  • 我的猜测是将
    char[]
    更改为
    字符串(STL)
    然后再试一次。另外,当你说你一次输入
    123456789001234567890
    时,所有内容都进入
    test
    。由于
    test
    只有10个字节长,将输出123456789。没有任何内容输入cont,因为为istream类设置了
    failbit
    ,并且阻止了进一步的输入。此代码适用于我的
    std::string

    #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;
    }
    
    #包括
    #包括
    使用名称空间std;
    int main()
    {
    //煤焦试验[10];
    //char cont[10];
    串试验;
    字符串cont;
    cin>>试验;
    cin>>续;
    //cin.getline(测试,10);
    //cin.getline(续10);
    
    不能从某处复制

    cin.getline从输入序列中提取字符,并将其作为c字符串存储到从s开始的数组中。

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


    我相信您在输入123456789001234567890后按了两次enter键。如果输入太长,则设置失败位,从而阻止进一步输入。将代码更改为:

        #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;
    
    }
    
    #包括
    使用名称空间std;
    int main()
    {
    煤焦试验[10];
    char cont[10];
    cin.getline(测试,10);
    cin.clear();//添加此
    cin.getline(续10);
    
    cout如果读入的变量不够大,无法容纳整行,则输入操作将失败,流将无法读取更多内容,直到调用
    cin.clear()

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

    #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;
    }
    
    getline()函数具有以下两个语法:

    std::string test;
    std::string cont;
    
    getline(cin, test);
    getline(cin, cont);
    
    s:指向字符数组的指针,其中提取的字符存储为c字符串

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

    delim:显式分隔字符

    此函数的返回类型为
    istream对象(*this)

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


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

    帮大家一个忙,忘记
    cin.getline
    甚至存在。改用
    std::getline
    。它并不完美,但在大多数情况下,这是一个明确的改进。谢谢,“如果输入太长,则istream::getline设置失败位,这会阻止进一步输入。”这正是我想要听到的。您的回答也很好。谢谢。cin.clear()对于解决此问题很重要。
    istream& getline (char* s, streamsize n );
    istream& getline (char* s, streamsize n, char delim );