我正在在C 中制定一个程序,该程序将用户在美国标准时间输入时间并将其转换为军事时间。主代码的主体执行正常,但是问题出在我的功能正文中,从if语句开始。我想知道为什么会发生这种情况。与C 相当新。这是我的代码,如果您有疑问,请随时询问或需要解释该程序应该做什么。
#include <iostream>
#include <string>
using namespace std;
void militaryConversion(string am_pmPart_st, string firstPartofTime, string secondPartofTime){
// Converts they obtained strings, but first we must concatenate the two parts into one string
string concatenatedTime;
int militaryTime;
cout << "test1" << endl;
concatenatedTime = firstPartofTime + secondPartofTime;
if(firstPartofTime == "12")
{
cout << "Corresponding military time is: " << concatenatedTime << " hours" << endl;
}
else if(am_pmPart_st == " am")
{
if (concatenatedTime.length() < 4){
cout << "Corresponding military time is: " << concatenatedTime << " hours"<< endl;
}
}
else if(am_pmPart_st == " pm")
{
int castedTime;
castedTime = stoi(concatenatedTime); //This is where we convert the string to int because its the only place it matters
militaryTime = castedTime + 1200;
cout << "Corresponding military time is: " << militaryTime << " hours" << endl;
}
}
int main()
{
char DELEMETER = ':';
char DELEMETER_sp = ' ';
string time, firstPartofTime, secondPartofTime, am_pmPart_st, loweredAM_PM;
cout << "Enter the time in the format of: HH:MM AM/PM ";
getline(cin, time);
firstPartofTime = time.substr(0, time.find(DELEMETER));
cout << "The first digits of time " << firstPartofTime << endl;
secondPartofTime = time.substr(time.find(DELEMETER) + 1, time.find(DELEMETER_sp)-1);
cout << "The second set of digits " << secondPartofTime << endl;
am_pmPart_st = time.substr(time.find(DELEMETER_sp), time.size());
cout << "The am/pm part is:" << am_pmPart_st << endl;
for(int i=0; am_pmPart_st[i]; i++) am_pmPart_st[i] = tolower(am_pmPart_st[i]); //Converts am/pm to lowercase
cout << am_pmPart_st << endl;
militaryConversion(am_pmPart_st, firstPartofTime, secondPartofTime);
}
首先,您的问题含糊不清,因为它确实说出正在发生的事情不应该发生的事情。但是,我认为我可以看到正在发生的事情。当您在第一个条件下检查时间的小时部分时,首先检查" 12"。但是,您永远不会在12个之内校正AM或PM。我的建议是在AM内检查12次(12点== 0000小时(和PM(12 pm == 1200小时(。在AM中,您需要检查12并从该时间中减去1200,在PM中您需要检查12,而不会在时间上添加1200。
substr采用两个参数。第一个是开始位置,第二个是长度。当您致电secondPartofTime = time.substr(time.find(DELEMETER) + 1, time.find(DELEMETER_sp)-1);
时,您错误地将第二个参数作为 end位置而不是长度。
,您可以做:
int startPos = time.find(DELEMETER) + 1;
int endPos = time.find(DELEMETER_sp) - 1;
secondPartofTime = time.substr(startPos, endPos - startPos + 1);
理想情况下,您应该在返回npos
时检查查找和处理情况的返回值,以免在无效的用户输入上崩溃。
-
不遵循HH:MM AM/PM表单的输入正在造成问题。(恰好5个字符的HH:mm(包括结肠((
-
您有一个基于
if-else
的决策树,其中一个if
不伴随else
。缺乏else
是为什么您的程序不给任何输出 -
string.substr()
有一些问题,如mfisherkdx
所解释