繁体   English   中英

Output 代码打印出一个奇怪的负数而不是我的输入

[英]Output of code prints a weird negative instead of my input

我在 class 末尾的教授给了我们这段代码,并告诉我们把它放在我们的编译器中并使用它来更好地理解基础知识,但是,在我复制粘贴代码之后,它并没有做它应该做的事情做。 这是代码:

#include <stdio.h>
#include <string.h>
class Clock {
private:
    int hour;
    int minute;
public:
    Clock();
    Clock(int o, int m);
    Clock(char *text);
    void output();
    void setHour(int h);
    int getHour();
    void setMinute(int m);
    int getMinute();
};
Clock::Clock() {
    hour = 0;
    minute = 0;
}
Clock::Clock(int h, int m) {
    hour = h;
    minute = m;
}
Clock::Clock(char *text) {
    if (strlen(text) == 5) {
        sscanf(text, "%2d%:%2d", &hour, &minute);
    }
    else {
        hour = 0;
        minute = 0;
    }
}
void Clock::output() {
    printf("%02d:%02d\n", hour, minute);
}
void Clock::setHour(int h) {
    if (0 >= h && h < 24) {
        hour = h;
    }
}
int Clock::getHour() {
    return hour;
}
void Clock::setMinute(int m) {
    if (0 >= m && m < 60) {
        minute = m;
    }
}
int Clock::getMinute() {
    return minute;
}
int main() {
    Clock c1;
    c1.output();
    Clock c2(12, 20);
    c2.output();
    Clock c3("16:45");
    c3.output();

}

代码的output应该是:

00:00
12:20
16:45

但相反它是

00:00
12:20
16:-858993460

我正在使用 Visual Studio 2015,我在在线编译器 (onlinegdb) 上尝试了相同的代码,并且 output 有

00:00
12:20
16:00

教授使用 Dev-C++ 或 Codeblocks,但没有运行代码,此时无法联系他提问。 代码有什么问题以及如何解决?

看起来您正在使用 C 库。 我的解决方案是:

Clock::Clock(char *text) {
    if (strlen(text) == 5) {
        sscanf(text, "%2d:%2d", &hour, &minute);
    }
    else {
        hour = 0;
        minute = 0;
    }
}

main()中, ISO C++ forbids converting a string constant to 'char*'所以我的解决方案是:

char time[] = "16:45";
Clock c3(time);
c3.output();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM