switch 语句未检测到某些字符
switch statement not detecting some characters
我在C++中使用了switch 语句作为简单的菜单。除了 2 种情况外,一切都有效,字母 'U'
和 'l'
,在运行时使用时,就像一个永远不会被填充的cin
语句。无法输入其他选项,也无法通过输入字符来阻止它,必须实际按 Ctrl-Z 退出它。据我所知,语法是正确的,所有其他选项都有效。
编辑:即使删除同时完全导致同样的事情
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;
}
您的
cout << "Applying uppercase";
未打印,因为标准输出是行缓冲的。你需要
cout << "Applying uppercase" << flush;
以刷新缓冲区。
此外,您的upperList
和lowerList
函数显然进入了一个无限循环,这意味着在LineEditor
内部实现的迭代逻辑以某种方式被破坏了。
此外,看起来您将字符串本身作为成员保留在LineEditor
对象内L
。同时,您将LineEditor
传递给upperList
并按值lowerList
。这意味着在 upperList
和 lowerList
内部所做的任何更改都不会对调用代码的le
产生任何影响,因为 upperList
和 lowerList
将在 LineEditor
的独立副本上工作。
相关文章:
- C++字符*缓冲区的大小
- HEX值到wchar_t字符(UTF-8)的转换
- 为什么 Serial.println(<char[]>);返回随机字符?
- 位移操作和位掩码未检测到重复字符
- 使用 ISdigit 通知任何检测到的非法字符
- 对于循环不循环和检测字符数组 [指针和字符数组]
- iSpunct()未检测到单引号字符
- 如何在 QString 中检测非 ASCII 字符
- 检测编辑控件焦点并插入字符
- switch 语句未检测到某些字符
- 检测空格字符 t、 等
- 我想检测用户在按下 Enter 之前是否输入了字符
- 检测混合字符串中的非字母字符
- 在检测字符串是否包含数字字符时,这有什么问题
- 如何检测QString是否由所有数字字符组成
- 将字符串转换为c风格字符串并检测空终止字符
- 从WM_KEYDOWN消息检测非字符按
- 检测字符串中的 Unicode 字符
- 文本游戏字符冲突检测问题
- 如何检测ICU中的一种编码是否支持unicode字符