[英]cin in my program doesn't work properly. How can I fix it?
我的cin有一些問題。 當我輸入字符而不是整數cin不起作用時,此后我什至不能輸入新值。 我該怎么辦? 我已經嘗試過fflush(stdin)
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;
}
謝謝。
您似乎混合了一些習慣用法。 我不知道_getch()
作用,但是我無法想象它與std::cin
兼容; std::cin
將std::cin
(或可能已經)閱讀,例如閱讀您的標志字符。 您不能簡單地混合來自同一來源的不同流。
至於您描述的特定問題,一旦輸入了無法轉換為您正在讀取的內容,流就會進入錯誤狀態(在使用該值之前應檢查該錯誤狀態),並且對它的所有操作都將變為-直到您清除錯誤( std::istream::clear()
)。 但這並不能解決其他問題。 如果您堅持使用_getch()
類的東西,則必須將其用於所有輸入,為位置的輸入建立一個字符串,並使用std::istringstream
進行轉換。 根據函數的實際作用,您可能還必須處理諸如退格,輸入甚至回聲之類的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.