2012-12-10 32 views
2

我有一些问题与cin。当我输入一个字符而不是一个整数时,cin不起作用,之后我甚至不能输入新的值。我该怎么办?我已经试过fflush(stdin)cin在我的程序中无法正常工作。我该如何解决它?

struct PersonList 
{ 
    Person person; 
    PersonList* personListPtr; 
}; 


void addPerson(PersonList*& ptr, int position); 
void deletePersonList(PersonList* ptr); 




int main() 
{ 
    PersonList* personListPtr = NULL; 

    int flag = 0; 
    int pos = 0; 
    int i; 

    while(flag != 27) 
    { 
     system("cls"); 
     cout << "1 - add objects\n" 
      << "2 - delete objects\n" 
      << "ESC - exit\n"; 
     switch(flag) 
     { 
     case '1': 
      cout << "Enter position: "; 
      **cin >> pos;** 
      addPerson(personListPtr, pos); 
      break; 
     case '2': 
      break; 
     case '3': 
      break; 
     } 
     flag = _getch(); 
    } 


    deletePersonList(personListPtr); 

    return 0; 
} 

谢谢。

+4

看起来你应该在'switch'语句之前进行输入,但不是。如果您不提示用户使用它,您的应用程序如何知道要执行哪个菜单选项? –

+0

除非偶然'flag'包含三个字符之一,否则他会掉过开关。 (它对我来说并不是很明显,他想要做什么,但我怀疑他需要像ncurses这样的东西,还有更多的代码来实现它。) –

+0

起初flag == 0 – Vorgin

回答

0

你似乎混合了几个成语。我不知道 _getch()是做什么的,但我无法想象它在 与std::cin兼容;例如,std::cin将具有(或可能具有) 预读,读取你的标志字符。你不能简单地混合来自同一个源的不同流。

至于你所说,一旦进入 东西不能转换成你正在阅读什么特殊的问题, 流进入错误状态(你应该使用值前检查 ),和在清除错误(std::istream::clear())之前,其上的所有操作都将变为空操作 。但这是 不会解决其他问题。如果你坚持使用 这样的东西如_getch(),那么你必须使用它的所有 您的输入,建立一个字符串输入的位置,和 使用std::istringstream来转换它。根据 函数的实际功能,您可能还需要处理诸如退格键,输入以及甚至可能回显的内容 。

相关问题