不接受第二个字符串的输入

时间:2021-06-11 14:36:31

标签: c++ string input

嗨,我正在解决 Stanely 所著《C++ Primer》一书中的一个问题。问题如下:-

编写程序读取两个字符串并报告 字符串是相等的。如果不是,请报告两者中哪个更大。现在,改变 程序报告字符串是否具有相同的长度,如果 不是,报告哪个更长。

我使用了一个变量选择来在程序之间切换,即是否检查字符串是否相等。或者检查字符串是否具有相同的长度。

#include<iostream>
using namespace std;
int main(){
  char choice;
  cout<<"Please enter choice"<<endl<<"For Larger press (L) and for longer press (l) "<<endl;
  cin>>choice;
  
  string s1, s2 ;
  getline(cin,s1);
  getline(cin,s2);
  if(choice=='L'){
  if(s1!=s2){
    if(s1>s2) {
      cout << "string which is larger is : " <<s1<<endl;
    }
    else{
      cout<<"string which is larger is : " <<s2<<endl;
    }
  }
  else{
    cout<<"Both strings are equal "<<endl ;
  }
  }
  else if (choice == 'l'){
    if(s1.size() != s2.size()){
      if(s2.size()> s1.size()){
    cout<<"Longer string : "<<s2<<endl;
      }
      else {
    cout<<"Longer string : " << s1<<endl;
      }
    }
    else {
      cout<<"Both strings have same length" <<endl;
    }
  }
  else{
    cerr<<"wrong input!! "<<endl;
    return -1;
  }
  
  return 0;
}
    

但是当我编译程序时,它只接受字符串 s1 的输入,而不接受字符串 s2 的输入。

输出如下:-

enter image description here

1 个答案:

答案 0 :(得分:-1)

显然使用 cin>> 从输入中遗漏了 '\n',它被第一个 getline() 吸收,正如@Scheff'sCat 所说,读取所有内容直到 '\n'。这意味着第一个 getline() 立即退出并仅显示第二个。

您可以尝试使用 cin.ignore('\n')