我正在制作一個程式,其中包括制作一個選單來注冊和洗掉商店里的產品,我只是用一個開關來設計選單,到這里為止一切都很好,問題是當我輸入數字以外的資料(字母或符號)時,控制臺就會發瘋;所有的文字開始閃爍,它不會讓我做任何事情(好像是在一個回圈中),我不得不關閉它。
有什么方法可以避免這種情況嗎?因此,當我輸入一個字母或符號時,它會自動檢測到它是無效的,并向我顯示資訊,而不會讓控制臺變得瘋狂。
順便說一下,我使用 Visual Studio。
提前感謝 :)
#include<iostream>
#include<locale.h>
使用 namespace std;
int main()
{
int opc;
cout << " WELCOME TO THE STORE "Happy Shopping" ";
cout << endl;
cout << "
1.- 創建訂單。"。
cout << " 2.
2.-延遲訂單。"。
cout << "
3.- 創建的訂單串列。"。
cout << "
4.-退出"。
cout << endl;
cout << "
你想做什么?"; cin >> opc;
switch (opc)
{
case 1:cout << "
創建訂單"; break。
case 2:cout < < "
Delate Order"; break。
case 3: cout < < "
創建的訂單串列"; break。
case 4:exit(EXIT_SUCCESS)。
default:
if ((opc != 1) &&(opc ! = 2) && (opc != 3) && (opc != 4) )
{
system("cls") 。
cout << "輸入的選項無效,重試"。
return main()。
}
}
uj5u.com熱心網友回復:
也許不要回傳main?
switch (opc)
{
case 1: cout << "
創建訂單"; break。
case 2:cout < < "
Delate Order"; break。
case 3: cout < < "
創建的訂單串列"; break。
case 4:exit(EXIT_SUCCESS)。
default:
system("cls") 。
cout << "輸入的選項無效,重試"。
}
uj5u.com熱心網友回復:
如果你讓opc成為一個字串,并將輸入作為一個字串,你可以像這樣手動檢查字串是否是一個數字:
cin >> opc;
if (!isdigit(opc[0]) //既然你處理的是個位數,這應該沒問題。
{
cout << "你沒有輸入一個數字!
"。
//任何其他錯誤處理。
}
isdigit是一個位于cctype頭檔案中的函式,所以你應該在檔案的開頭添加#include <cctype>。
在這之后,你可以用stoi()將opc轉換成一個整數:
int opnum = stoi(opc)。
// opnum現在是數字,撰寫其余的代碼,使其使用opnum。
uj5u.com熱心網友回復:
如前所述,你不應該回傳main()。你可以通過測驗你的輸入來使用一個回圈,例如(肯定是可能存在的許多解決方案中的一個)。
另外,你也不需要下面這部分代碼:
//你不需要if,因為你已經處于 !=1,2,3,或4的情況。
if ((opc != 1) && (opc ! = 2) && (opc != 3) & & (opc != 4)
我向你提供了一個嘗試,取自你的代碼,這可能有助于改進你的代碼。 可能仍有一些錯誤,但這是一個很好的起點
int main()
{
int opc=0;
std::string input;
std::cout << " WELCOME TO THE STORE "Happy Shopping" ";
std::cout << std::endl;
//第一次顯示; std::cout << std::endl; //第一次顯示
std::cout << "
1.-創建訂單。"。
std::cout << " 2.-延遲訂單。
2.-延遲訂單。"。
std::cout << "
3.- 創建的訂單串列。"。
std::cout <<"
4.-退出"。
std::cout << std::endl;
std::cout << "
你想做什么?"; //cin >> opc;/span>
std::cin >>輸入。
while ( input.length( ) > 0 )
{
//如果我們輸入一個長度超過1的字串,那么
try
{
opc = std::stoi( input ) 。
}
catch ( ...)
{
//主要是如果轉換后的引數不是一個數字=>std::invalid_argument。
std::cout << "無效值" << opc << std::endl;
}
std::cout << "您輸入的值" << opc << std::endl;
switch (opc)
{
case 1:
std::cout << "
創建訂單"。
break;
case 2:
std::cout << "
Delate Order"。
break;
case 3:
std::cout << "
創建的訂單串列"。
break。
case 4:
exit(EXIT_SUCCESS)。
default:
// you do not need the if as you are already in the case !=1,2,3, or 4.
//if ((opc !=1) && (opc !=2) && (opc !=3) && (opc !=4))
//{
system("cls")。
//如果你輸入了除之外的東西
std::cout << "
1.-創建訂單。"。
std::cout << " 2.
2.-延遲訂單。"。
std::cout << "
3.- 創建的訂單串列。"。
std::cout <<"
4.-退出"。
std::cout << std::endl;
std::cout << "
你想做什么?"; /cin >> opc;
}
std::cin >>輸入。
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/317258.html
標籤:
上一篇:.tfignore路徑沒有被忽略
