【问题标题】:Taking string input and printing it in C++? [duplicate]接受字符串输入并在 C++ 中打印? [复制]
【发布时间】:2020-04-07 10:18:06
【问题描述】:
int main() {
   string s1,s2;
   cout<<"1. "<<endl;     
   cin>>s1;                      //to accept 1st string
   cout<<s1<<endl;  
   cout<<"2. "<<endl;
   getline(cin,s2);             //to accept 2nd string
   cout<<s2<<endl;
}

在上面的代码中,在接受第一个字符串后,它不要求第二个字符串:程序在接受第一个输入后终止,而无需等待第二个。

谁能解释一下这种行为的原因是什么?为什么它不等待getline(cin,s2) 接受用户输入?

【问题讨论】:

    标签: c++ string


    【解决方案1】:

    这是因为 getline 在第一行末尾读取 \n 。因此,当您认为它需要一个新行时,它会读取并打印“\n”。 我建议使用 getline 两次(所以首先它读取 \n,然后是你的第二行)。请使用 std::,不要使用 using namespace std,并使用空格作为任何正常的代码样式 sais。

    int main() {
        std::string s1, s2;
        std::cout << "1. " << std::endl;     
        std::cin >> s1;                      //to accept 1st string
        std::cout << s1 << std::endl;  
        std::cout << "2. " << std::endl;
        std::getline(std::cin, s2);             //to accept \n
        std::getline(std::cin, s2);             //to accept 2nd string
        std::cout << s2 << std::endl;
    }
    

    【讨论】:

      【解决方案2】:

      这里的错误是你需要误解返回类型。在这里,您已将 int 用于 main 方法。所以你需要返回类型。如果您使用 void 作为主要方法,则不需要返回类型。您可以使用修改代码如下。

      这是用于打印单个字符串

       #include <iostream>
       using namespace std;
      
       int main(){ 
      
           string s1;
           cout<<" Enter the first string :"
           getline(cin,s1);
      
           cout<<"The input string is"<<s1 <<endl;
      
           return 0; 
      
       }
      

      您可以修改如下代码以输出如下两个字符串

       #include <iostream>
       using namespace std;
      
       int main(){ 
      
           string s1,s2;
           cout<<" Enter the First string :"
           getline(cin,s1);
      
           cout<<"The First string is"<<s1 <<endl;
      
           cout<<" Enter the Second string :"
           getline(cin,s2);
      
           cout<<"The Second string is"<<s2 <<endl;
      
           return 0; 
      
       }
      

      【讨论】:

      • 我知道我们可以在这两个地方都使用geline(),但我想知道为什么getline() 在cin 之后没有接受输入>>
      • Extracted answer "getline 和 cin 的主要区别在于 getline 是字符串头文件中的标准库函数,而 cin 是 istream 类的实例。简而言之,getline 是一个函数,而 cin 是一个对象。通常,通常的做法是使用 cin 而不是 getline" ,pediaa.com/what-is-the-difference-between-getline-and-cin
      • @hari 为什么我的回答没有回答你关于 getline() 在 cin 之后不接受输入的问题?
      • 顺便说一句,这个答案是不正确的,因为在 C++ 中我们不需要在 main 函数中返回。它与读取/打印字符串无关。
      • 在 quora 上对比这个答案“如果你写 int main(),这意味着 main() 将返回一些整数,你可以返回任何东西,但作为约定我们使用 0,这意味着成功。如果 main() 未能完成预期的工作,我们可以返回一些非零数字“quora.com/….
      猜你喜欢
      • 2019-04-30
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      • 2014-04-08
      • 1970-01-01
      • 2014-10-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多