我是編程的初學者,我目前正在嘗試自己撰寫代碼,我遇到了一個問題,告訴我讓用戶從數字 1-12 中進行選擇,它將顯示它所代表的月份(例如 1=January)使用while 和 switch 回圈。我現在腦死了需要幫助。
編輯:如果我輸入了錯誤的輸入,比如輸入 a 或 99,它就會回圈。
#include <iostream>
using namespace std;
int main()
{
int months = 0;
cout << "Enter a number from 1-12 (or Q to quit): " << endl;
cin >> months;
while (months != 'Q')
{
switch (months){
case 1:
cout << "January" << endl;
break;
case 2:
cout << "February"<< endl;
break;
case 3:
cout << "March" << endl;
break;
case 4:
cout << "April" << endl;
break;
case 5:
cout << "May" << endl;
break;
case 6:
cout << "June" << endl;
break;
case 7:
cout << "July" << endl;
break;
case 8:
cout << "August" << endl;
break;
case 9:
cout << "September" << endl;
break;
case 10:
cout << "October" << endl;
break;
case 11:
cout << "November" << endl;
break;
case 12:
cout << "December" << endl;
break;
default:
{
cout <<"You've entered an invalid response. Please only select from numbers 1- 12.\n";
break;
}
}
}
//I hve no idea what to do here
return 0;
}
uj5u.com熱心網友回復:
您的代碼中有兩個問題:
首先,您在回圈之外讀取用戶輸入。當回圈執行一次時,它將永遠執行,因為條件永遠不會改變。在回圈內移動讀數輸入。
其次,您混淆了字符 ,char和整數 , int。'Q'是一個字符文字,它是一個char. 1, 2, 等是整數文字,它們是ints。
char實際上也是一種數字型別,但具體與輸入和輸出char的處理方式不同,因為“數字”被視為字符的表示。常見的編碼是 ASCII。
小測驗:您必須輸入什么才能foo在控制臺上列印此代碼:
#include <iostream>
using namespace std;
int main()
{
int x;
std::cin >> x;
if (x == 'Q') std::cout << "foo\n";
}
答:視情況而定。使用通常的 ascii 編碼'Q' == 81,因此您需要輸入81使x等于'Q'.
std::cin >> x讀取一個整數。如果用戶輸入Q然后讀取int將失敗。std::cin將處于錯誤狀態x并將被0分配。
決定一個:使用一個intthen you cannot read user input Q。或者使用charthen 你需要將輸入與字符'1'等進行比較'2'。
或者讀取 astd::string并決議輸入以查看它是字符還是數字。
uj5u.com熱心網友回復:
一步一步模擬執行,就像你是計算機一樣。盲目地這樣做,就像機器會做的那樣,即嚴格執行指令的效果。
你很快就會看到你的錯誤在哪里。
uj5u.com熱心網友回復:
問題是你用過while (months != 'Q'),不是if (months != 'Q')。編譯器將始終回圈while回圈,因為months它始終不等于 Q。此外,monthsis an int,即輸入Q(這不是 int)會使您的代碼崩潰,因此您可能需要修改它。您可以更改Q為 int,也可以使用char month和比較'1', '2'等。
#include <iostream>
using namespace std;
int main() {
int months;
cin >> months;
while (months != 'Q') {
cout << "Enter a number from 1-12 (or Q to quit): " << endl;
switch (months){
case 1:
cout << "January" << endl;
break;
case 2:
cout << "February"<< endl;
break;
case 3:
cout << "March" << endl;
break;
//etc. (i'll shorten the code here)
default:
cout << "Your input is invalid. Please only input numbers 1-12.\n";
break;
}
}
return 0;
}
PS:請正確縮進您的代碼。您不希望您的代碼一團糟。
uj5u.com熱心網友回復:
讓我們重命名變數并使用查找表(陣列)。
static const char * month_names[] =
{
"No Month as 0",
"January", "February", "March", "April",
"May", "June", "July", "August",
"September", "October", "November", "December"
};
int month_index = 0;
std::cout << "Enter month number: ";
std::cin >> month_index;
if ((month_index > 0) && (month_index < 12))
{
std::cout << "Month name is: " << month_names[month_index] << "\n";
}
else
{
std::cerr << "Invalid month number\n";
}
在將數字映射到名稱的情況下,陣列作業得很好。您還可以在陣列中搜索月份名稱,索引將是月份編號。
uj5u.com熱心網友回復:
您需要在 while 回圈內而不是在其外輸入!因為 while 回圈取決于用戶將寫什么,所以您只需將其更正為這種形式
while (months != 'Q')
{
cout << "Enter a number from 1-12 (or Q to quit): " << endl;
cin >> months;
}
更新:如果用戶撰寫了無效輸入,您的程式將再次進入無限回圈,因此您應該考慮如何在無效輸入后立即終止它
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/517225.html
標籤:C
上一篇:Recyclerview選擇位置邊框會出現,未選中邊框不出現-如何在AndroidStudio中進行設計,如高亮位置
下一篇:VisualStudio2017CMake專案中缺少VCRUNTIME140_1D.dll-我是否也需要VisualStudio2019并在舊版本的Studio中使用它?
