簡體   English   中英

cin 不能正確接受輸入

[英]cin does not accept input properly

我使用以下代碼獲取輸入

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;
}

這些是我的測試用例:

3
xabcbayabbaz
abcbaabc
abcba

該代碼接受第一個字符串並給出 output。但是,當我輸入接下來的兩個字符串時,它只是等待更多輸入。 我嘗試在沒有循環的情況下單獨提供輸入,但這也沒有用。 編譯器無限等待更多的輸入。

我將我的整個代碼放在這里以供參考。

#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;
}

請注意,您的findpalindrome function 的while循環中的i++行將永遠不會執行 - 循環將退出(在break時)或從頭開始(在 continue 時)。

刪除continue; 從第一個else if開始的行在該循環中阻止程序進入無限循環 - 但我無法驗證它是否解決了您的所有問題(有很多情況下將有符號類型與無符號類型進行比較,這可能會有問題)。

啟用(完整)編譯器警告(並注意它們)在這種情況下很有幫助,對於您的原始代碼, clang-cl給出(除其他外):

警告:永遠不會執行代碼 [-Wunreachable-code]

除了@Adrian Mole 的回答之外,最好通過刪除像findpalindrome()這樣的中間函數來檢查這些事情,只是為了確保輸入值被正確讀取並且問題不在其中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM