使用struct显示军事时间并在用户输入中添加1秒(C++)

使用struct显示军事时间并在用户输入中添加1秒(C++),c++,struct,C++,Struct,上节课我们讨论了结构,尽管我觉得我的代码很完整,但我不理解我遇到的错误。我曾在另一个VisualStudio实例中尝试逐个函数对代码进行故障排除,但没有成功。我想我可能丢失了几个头文件,但我的头文件和我教授的课堂讲稿和例子一样多 错误: 被困在getTime while循环中 目标是编写一个程序,在24小时军事时间内提示用户输入小时、分钟和秒。如果输入的时间有效,则添加1秒,并将新时间输出到屏幕。我将用我的代码在下面一节中逐步发布说明 代码: 逐步说明: 声明一个名为:Time的结构 该结构有3

上节课我们讨论了结构,尽管我觉得我的代码很完整,但我不理解我遇到的错误。我曾在另一个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

再来一次?是/否


以下是我发现的一些问题。 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;
}