1

C++ で簡単なメニューに switch ステートメントを使用しています。2 つのケースを除いてすべてが機能します。実行時に文字'U'とが使用されると、決して入力されないステートメントのように機能します。他のオプションを入力できず、文字を入力して停止することはできません。実際には Ctrl-Z で終了する必要があります。私が知る限り、構文は正しく、他のすべてのオプションは機能します。'l'cin

編集:whileを完全に削除しても同じ結果になります

cin >> command;

while(command!='Q')
{
  switch(command)
  {
     case 'L':
        le.left();
        break;
     case 'R':
        le.right();
        break;
     case 'I':
        cin >> str;
        le.insert(str);
        break;
     case 'D':
        le.erase();
        break;
     case 'C':
        cin >> c;
        le.change(c);
        break;
     case 'U':
        cout << "Applying uppercase";      //doesn't even print to screen
        upperList(le);
        cout << "Uppercase applied" << endl;
        break;
     case 'l':
        lowerList(le);
        break;
     case 'P':
        cout<<le;
        break;
     case 'Q':
        break;
     default:
        cout << "Invalid command.";
  }
  cin >> command;
}

le.insert:

void LineEditor::insert(const string& s)
{
for(int i=0;i<s.size();i++)
  L.insert(it, s.at(i));

itBegin=L.begin();  //iterator to beginning of list, used in <iterator>::distance later
}               

upperList とその ToUpper 関数:

char ToUpper(char c)
{
c=toupper(c);
return c;
}

void upperList(LineEditor le)
{
char c;

le.setBegin();

while(!le.end())
{
  c=le.at();
  le.apply(*ToUpper, c);
  le.right();
}
} 

および le.end()

bool LineEditor::end() const
{
if(it!=L.end())
  return false;
else
  return true;
}

LineEditor::setBegin() に絞り込みました

void LineEditor::setBegin()
{
while(it!=L.begin())           //supposed to move iterator to beginning of list
  --it;
}
4

1 に答える 1

0

君の

cout << "Applying uppercase";

標準出力は行バッファリングされるため、出力されません。あなたが必要

cout << "Applying uppercase" << flush;

バッファをフラッシュします。

さらに、あなたのupperListandlowerList関数は明らかに無限サイクルに入ります。これは、内部に実装されている反復ロジックLineEditorが何らかの形で壊れていることを意味します。

また、文字列自体をメンバーLineEditorとしてオブジェクト内に保持しているようです。L同時にLineEditortoupperListlowerList by valueを渡します。つまり、とは の独立したコピーで機能するため、 と の内部upperListで行われた変更は呼び出し元のコードにはlowerList影響しません。leupperListlowerListLineEditor

于 2013-11-04T03:40:18.377 に答える