C++ cin不能正确接受输入

C++ cin不能正确接受输入,c++,input,runtime,C++,Input,Runtime,我使用以下代码来获取输入 int main() { int x=0,value=0; cin>>x; string str; for(int i=0;i<x;++i){ cin>>str; value = findpalindrome(str); cout<<value<<endl;} return 0; } 代码接受第一个字符串并给出输出。然而,当我输入下两个字符串时

我使用以下代码来获取输入

int main() {
    int x=0,value=0;
    cin>>x;
    string str;
    for(int i=0;i<x;++i){
      cin>>str;
      value = findpalindrome(str);
      cout<<value<<endl;}
  return 0;
}
代码接受第一个字符串并给出输出。然而,当我输入下两个字符串时,它只是等待更多的输入。我尝试在没有循环的情况下单独输入,但也不起作用。编译器无限期地等待更多的输入

我把我的全部代码放在这里作为参考

#include <iostream>
#include <string.h>
using namespace std;

struct palindrome{
  int start;
  int end;
  int strlength;
}s[20];

bool checkifpalindrome(string str)
{
    string str1=str;
    for(int i=0;i<str.length()/2;++i){
        char temp=str1[i];
        str1[i]=str1[str.length()-1-i];
        str1[str.length()-1-i]=temp;
        
    }
    if(str1.compare(str)==0)
        return true;
    return false;
}
bool checkoverlap(int cur_pos,int prev_pos){
  if((s[cur_pos].start>=s[prev_pos].start && s[cur_pos].start<=s[prev_pos].end)||
    (s[cur_pos].end>=s[prev_pos].start && s[cur_pos].end<=s[prev_pos].end))
    return true;
  else 
    return false;
}

int findmax(int count){
    int max = 0;
    int pos = 0;
    for(int i=0;i<count;++i){
        if (s[i].strlength>max){
            max = s[i].strlength;
            pos = i;
        }
    }
    return pos;
}
int findpalindrome(string str)
{
    int sum=0;
    int count=-1;
    string str1;
    for(int i=0;i<str.length();++i){
    for(int j=1;j<str.length()-i+1;++j){
        str1=str.substr(i,j+1);
        if(checkifpalindrome(str1)){
            count++;
            s[count].start=i;
            s[count].end=i+j;
            s[count].strlength=str1.length();
        }  
      }
    }
    int pos[2];
    pos[0]=findmax(count);
    sum+=s[pos[0]].strlength;
    s[pos[0]].strlength=0;
    pos[1]=findmax(count);
    int i=0,n=10;
    while(i<n){
        if(s[pos[0]].strlength==str.length())
          break;
        else if(checkoverlap(pos[1],pos[0])){
          s[pos[1]].strlength=0;
          pos[1]=findmax(count);
          continue;
        }
        else if(s[pos[1]].strlength==0)
            break;
        else{
          sum+=s[pos[1]].strlength;
          break;
        }
        i++;
    }
    return sum;
}
int main() {
    int x=0,value=0;
    cin>>x;
    string str;
    for(int i=0;i<x;++i){
      cin>>str;
      value = findpalindrome(str);
      cout<<value<<endl;}
  return 0;
}
#包括
#包括
使用名称空间std;
结构回文{
int启动;
内端;
国际标准长度;
}s[20];
bool checkifpalindrome(字符串str)
{
字符串str1=str;

对于(int i=0;i=s[prev_pos]。start&&s[cur_pos]。start=s[prev_pos]。start&&s[cur_pos]。end请注意,
findpalindrome
函数的
while
循环中的
i++
行将永远不会执行-循环将退出(在
中断时)或从开始重新开始(在继续时)

从第一个
中删除
continue;
行,否则如果该循环中的
块阻止程序进入无限循环-但我无法验证它是否解决了所有问题(有许多情况下会比较有符号和无符号类型,这可能是有问题的)

在这种情况下,启用(完整)编译器警告(并注意它们)是很有帮助的!对于您的原始代码,clang cl给出(除其他外):

警告:永远不会执行代码[-Wunreachable code]


除了@Adrian Mole的答案之外,通过删除中间函数(如
findpalindrome()来检查这些东西也是很好的
,只是为了确保正确读取输入值,并且问题不在其中。

我不确定问题是否与第二个输入的
cin
有关。只需使用不起作用的输入调用
findPalindrome
。我猜您将在某个地方进入无限循环。在调试器中运行(或添加一些打印语句)以查看代码阻塞的位置。推荐阅读:我认为这更适合作为注释而不是答案。
#include <iostream>
#include <string.h>
using namespace std;

struct palindrome{
  int start;
  int end;
  int strlength;
}s[20];

bool checkifpalindrome(string str)
{
    string str1=str;
    for(int i=0;i<str.length()/2;++i){
        char temp=str1[i];
        str1[i]=str1[str.length()-1-i];
        str1[str.length()-1-i]=temp;
        
    }
    if(str1.compare(str)==0)
        return true;
    return false;
}
bool checkoverlap(int cur_pos,int prev_pos){
  if((s[cur_pos].start>=s[prev_pos].start && s[cur_pos].start<=s[prev_pos].end)||
    (s[cur_pos].end>=s[prev_pos].start && s[cur_pos].end<=s[prev_pos].end))
    return true;
  else 
    return false;
}

int findmax(int count){
    int max = 0;
    int pos = 0;
    for(int i=0;i<count;++i){
        if (s[i].strlength>max){
            max = s[i].strlength;
            pos = i;
        }
    }
    return pos;
}
int findpalindrome(string str)
{
    int sum=0;
    int count=-1;
    string str1;
    for(int i=0;i<str.length();++i){
    for(int j=1;j<str.length()-i+1;++j){
        str1=str.substr(i,j+1);
        if(checkifpalindrome(str1)){
            count++;
            s[count].start=i;
            s[count].end=i+j;
            s[count].strlength=str1.length();
        }  
      }
    }
    int pos[2];
    pos[0]=findmax(count);
    sum+=s[pos[0]].strlength;
    s[pos[0]].strlength=0;
    pos[1]=findmax(count);
    int i=0,n=10;
    while(i<n){
        if(s[pos[0]].strlength==str.length())
          break;
        else if(checkoverlap(pos[1],pos[0])){
          s[pos[1]].strlength=0;
          pos[1]=findmax(count);
          continue;
        }
        else if(s[pos[1]].strlength==0)
            break;
        else{
          sum+=s[pos[1]].strlength;
          break;
        }
        i++;
    }
    return sum;
}
int main() {
    int x=0,value=0;
    cin>>x;
    string str;
    for(int i=0;i<x;++i){
      cin>>str;
      value = findpalindrome(str);
      cout<<value<<endl;}
  return 0;
}