使用struct显示军事时间并在用户输入中添加1秒(C++)
上节课我们讨论了结构,尽管我觉得我的代码很完整,但我不理解我遇到的错误。我曾在另一个VisualStudio实例中尝试逐个函数对代码进行故障排除,但没有成功。我想我可能丢失了几个头文件,但我的头文件和我教授的课堂讲稿和例子一样多 错误: 被困在getTime while循环中 目标是编写一个程序,在24小时军事时间内提示用户输入小时、分钟和秒。如果输入的时间有效,则添加1秒,并将新时间输出到屏幕。我将用我的代码在下面一节中逐步发布说明 代码: 逐步说明: 声明一个名为:Time的结构 该结构有3个数据成员:小时、分钟和秒 整数 在main中,声明一个时间对象并将其命名为:Time 程序中有四个功能: 一,。getTime–一个空返回函数,从用户处获取输入 对象time通过引用传递给函数 注意:结构和类的对象始终通过引用传递 该函数提示用户输入时间 该函数读取用户输入的时间 该函数不返回任何值 二,。函数返回bool数据类型true或false 该函数是从getTime函数调用的 此函数的参数是保存 表示用户输入的时间的小时、分钟和秒 此函数用于检查以确保输入的时间有效。如果 输入的时间无效,返回false,否则返回true 包括以下全局常量: 最长工作时间=23小时 最大分钟=59 最大秒=59 如果函数返回true,则完成getTime函数并编程 执行返回到main 但是,如果函数返回false,则会显示一条消息: 无效时间 仍然在getTime函数中,会再次提示用户输入 时间 再次读取时间并将其传递给isTimeValid函数,依此类推 开 因此,do while或while循环必须包含在 getTime函数 在循环中,系统会提示用户输入时间,并且该时间无效 函数被调用 三,。addOneSecond–一个无效返回函数在输入的时间上增加1秒 四,。displayTime–一个void returning函数显示添加第二个后的时间 cout.fill'0'-此库函数将使用 指定的字符。它检查setw是什么,然后填充 如果需要的话 包括do/while循环以及系统“cls”-允许用户 重复程序 正确输出: 按以下格式输入24小时军用时间 顺序:HH:MM:SS,小时,分钟,秒 时间:14 会议记录:44 秒:22 加上一秒钟后,时间是14:44:23 再来一次?是/否使用struct显示军事时间并在用户输入中添加1秒(C++),c++,struct,C++,Struct,上节课我们讨论了结构,尽管我觉得我的代码很完整,但我不理解我遇到的错误。我曾在另一个VisualStudio实例中尝试逐个函数对代码进行故障排除,但没有成功。我想我可能丢失了几个头文件,但我的头文件和我教授的课堂讲稿和例子一样多 错误: 被困在getTime while循环中 目标是编写一个程序,在24小时军事时间内提示用户输入小时、分钟和秒。如果输入的时间有效,则添加1秒,并将新时间输出到屏幕。我将用我的代码在下面一节中逐步发布说明 代码: 逐步说明: 声明一个名为:Time的结构 该结构有3
以下是我发现的一些问题。 1.引用变量类型时不要使用struct。 不正确:void getTimestruct Time*Time 更正:void getTimeTime*time 按引用传递,而不是指针传递: void gettimes和time 您需要使用其中一个。引用成员或->的语法: cin>>时间->小时;//如果通过指针传递。 cin>>time.hours;//如果通过引用传递 引用变量时不要使用类型名称。 不正确:如果int time.hours>=0 更正:如果时间->小时>=0 记住。通过引用传递时访问,使用指针时为“->
你应该买一本更好的教科书,或者至少复习一下关于结构、类和指针的部分 什么是错误?@Jake更新了我收到的一些错误类型try thomas的答案很可能是正确的,您使用什么作为开发环境?在学习使用Eclipse或VisualStudio等较重的IDE时,它会非常有用。他们通常会在您键入错误后不久告诉您该错误。@user4581301 Visual Studio。但有时,遵循错误指示会导致额外的错误,例如,它会要求我放置一个;在一个陌生的地方,有一次我补充说;出现另一个错误。谢谢,这消除了一些错误。我记下了你所有的建议,以备将来参考。更新了帖子,并进行了更正。任何一点点都有帮助@点点滴滴,您似乎已经更改了函数实现,但未更改转发声明。您必须同时更改这两项以匹配或消除对原型的需求
通过在首次使用之前充分实现这些功能。我宁愿在可以的地方不使用原型,因为它们是我可能犯错误的又一个地方。@dribs建议你通过实质性地改变问题来停止移动球门柱。改为问一个新问题。@user4581301在我读这篇文章之前,我用这些准确的更正更新了这篇文章,哈哈。还进行了一些额外的更正,将错误数量减半。我很感谢你的意见@点点滴滴明白了,但你正在慢慢地选择你的方式,让托马斯的答案令人费解。那是糟糕的形式。建议在编译和测试之间编写更少的代码。您需要检查的新代码越少,就越容易发现和更正错误。此外,bug往往会相互隐藏,因此更少的bug更容易处理。上次我看到您的代码时,toupperchoice==Y;这应该会引起编译器的抱怨。您似乎添加了更多的代码,而不是修复此问题,从而加剧了您的问题。
#include <iostream>
#include <iomanip>
using namespace std;
struct Time
{
int hours;
int minutes;
int seconds;
};
void getTime(struct Time& time);
bool isTimeValid(struct Time& time);
void addOneSecond(struct Time& time);
void displayTime(struct Time& time);
const int MAX_HOURS = 23;
const int MAX_MINS = 59;
const int MAX_SECS = 59;
int main()
{
Time time;
char choice = 'Y';
do
{
system("CLS");
getTime(time);
isTimeValid(time);
addOneSecond(time);
displayTime(time);
} while (toupper(choice == 'Y'));
return 0;
}
void getTime(Time& time)
{
do {
cout << "Enter the time in \"military time\", (24-hour format), in the following\norder : HH:MM:SS, (Hours, Minutes, Seconds).\nHours: ";
cin >> time.hours;
cout << "\nMinutes: ";
cin >> time.minutes;
cout << "\nSeconds: ";
cin >> time.seconds;
} while (isTimeValid (time));
}
bool isTimeValid(Time& time)
{
if ((time.hours >= 0) && (time.hours <= MAX_HOURS) && (time.minutes >= 0) && (time.minutes <= MAX_MINS) && (time.seconds >= 0) && (time.seconds <= MAX_SECS))
{
return true;
}
else
{
return false;
cout << "Invalid Time";
}
}
void addOneSecond(Time& time)
{
time.seconds++;
if (time.seconds > MAX_SECS)
{
time.seconds = 0;
time.minutes++;
}
if (time.minutes > MAX_MINS)
{
time.minutes = 0;
time.hours++;
}
if (time.hours > MAX_HOURS)
{
time.hours = 0;
}
}
void displayTime(Time& times)
{
char choice = 'Y';
cout << "\nAfter adding one second, the time is " << setw(2) << cout.fill('0') << time << ".";
cout << "Do it again? (Y/N)";
cin >> choice;
}