C 程序如果功能中的语句不执行.在逻辑上似乎是错误的
C++ program if statements in function not executing. Seems Logically errored
我正在在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
所解释
相关文章:
- 逻辑运算符上出现错误代码 a')'
- 如何使 windows 命令提示符在C++可执行文件上显示返回值?
- libprotobuf 检查在 Mac OS 上执行程序时失败
- 如何在 Minecraft 服务器上执行命令
- 在TFHE(完全快速同态加密)上执行除法
- 无法在问题解决方案中执行输出逻辑
- 关于隐式声明的复制构造函数的引用在逻辑上不清楚
- C 程序如果功能中的语句不执行.在逻辑上似乎是错误的
- clEnqueueWriteImage 在执行时间上不稳定
- 为什么static_cast允许下落,而逻辑上应该出于安全目的拒绝他们static_cast与安全无关?
- G 生成逻辑上错误的汇编代码
- C++:添加逻辑上正确的 if 语句会使我的程序崩溃
- 是numeric_limits&lt; int&gt; :: is_modulo从逻辑上矛盾
- 我是否应该将最后一个“返回”语句封装为“else { return .. }',如果它在逻辑上是可选的
- Unix可执行文件上的Mac分段错误,文件编译正常
- 带有DEBUG_PROCESS标志的CreateProcess会在某些可执行文件上导致错误50
- Windows安装程序是否可以像普通应用程序一样执行逻辑
- C++奇怪的执行逻辑
- valgrind/callgrind可以在发布的可执行c++程序上工作吗?
- 关于自身可执行文件上的ifstream的问题