C 程序如果功能中的语句不执行.在逻辑上似乎是错误的



我正在在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时检查查找和处理情况的返回值,以免在无效的用户输入上崩溃。

  1. 不遵循HH:MM AM/PM表单的输入正在造成问题。(恰好5个字符的HH:mm(包括结肠((

  2. 您有一个基于if-else的决策树,其中一个if不伴随else。缺乏else是为什么您的程序不给任何输出

  3. string.substr()有一些问题,如mfisherkdx

  4. 所解释

最新更新