对于循环,不打印C+中的最后一个向量值+; 我只是学习C++类,并尝试比较和排序向量值(时间比另一个早),而其他的一切都在工作,向量中的最后一个值没有被打印出来。我猜这与我的主函数中的for循环有关,但我自己无法理解
谢谢你的帮助 main.cpp对于循环,不打印C+中的最后一个向量值+; 我只是学习C++类,并尝试比较和排序向量值(时间比另一个早),而其他的一切都在工作,向量中的最后一个值没有被打印出来。我猜这与我的主函数中的for循环有关,但我自己无法理解,c++,class,for-loop,vector,C++,Class,For Loop,Vector,谢谢你的帮助 main.cpp #include <iostream> #include "Time.h" #include <vector> #include <algorithm> int main() { std::cout << "Please enter hour, minute, second: "; int hour, minute, second; std::cin >> hour >&g
#include <iostream>
#include "Time.h"
#include <vector>
#include <algorithm>
int main() {
std::cout << "Please enter hour, minute, second: ";
int hour, minute, second;
std::cin >> hour >> minute >> second;
Time now(hour, minute, second);
//random time values
Time now1(13,1,45);
Time now2(23,47,12);
Time now3(1,8,8);
Time now4(19,4,13);
std::vector<Time> times;
times.push_back(now1);
times.push_back(now);
times.push_back(now2);
times.push_back(now3);
times.push_back(now4);
sort(times.begin(), times.end(), IsEarlierThan);
for(unsigned int i = 0; i < times.size(); i++){
//std::cout << times[i] << std::endl;
times[i].PrintAmPm();
}
return 0;
}
您没有看到任何输出,因为当
分钟>=10
和秒>=10
时,您的测试从不打印
if ((minute < 10) && (second >=10))
if ((minute < 10) && (second < 10))
if ((minute >= 10) && (second < 10))
// None of these handle minute >= 10 && second >= 10!
无需检查
minute
/second
的范围,您只需无条件地告诉cout
应该使用0
进行填充,并将所需的宽度设置为pad(每次都需要设置,因为输出char
会重置宽度)。我不认为这是正确的解决方案。这是一个更容易的解决方案(也是正确的),但询问者的方法也是正确的,在他们的学习水平上可能更容易。@immibis:询问者的方法非常容易出错(正如他们遇到这个问题的事实所证明的那样)。这是一个有原因的指导方针。很容易一次又一次地编写相同的代码,并产生一些微妙的错误,而这些错误是你没有遇到的,因为你的各种错误代码路径都没有被命中。即使OP还没有为IO操纵器做好准备,违反DRY也帮不了他们;在最坏的情况下,他们可以为每个值执行一次手动字符串操作,而不是将其嵌入3-4个不同的输出行。点是,我通常认为“正确”不仅包括工作,而且可以维护和(容易)验证。重复复制和粘贴,并进行小调整,与可维护/可验证相反;事实上,我不想劝阻新程序员不要用显而易见的方式做事,因为否则他们会被人们告诉他们不要做的事情弄得不知所措。一旦你编写和调试了几次相同的代码,你就可以说“哇,这样做容易多了!”但在那之前,你会觉得你的创造力被扼杀了。我不想让人们知道,他们总是要“按本子”做事。他们自己可以得出这个结论。我不知道干什么——谢谢你指点我。我现在才刚开始,这是一个数据结构的课堂作业,帮助我们更好地理解类是如何工作的。不管怎样,谢谢你的帮助!
class Time {
public:
Time();
Time(int theHour, int theMinute, int theSecond);
int getHour() const;
int getMinute() const;
int getSecond() const;
void PrintAmPm() const;
private:
int hour;
int minute;
int second;
};
bool IsEarlierThan(const Time& t1, const Time& t2);
if ((minute < 10) && (second >=10))
if ((minute < 10) && (second < 10))
if ((minute >= 10) && (second < 10))
// None of these handle minute >= 10 && second >= 10!
std::cout << std::setfill('0')
<< hour1 << ':'
<< std::setw(2) << minute << ':'
<< std::setw(2) << second << amOrPm << std::endl;