最近的项目有点问题。此处的目标是能够输入几行文本,其中包含 mm/dd/yyyy 格式的日期,后跟空格,然后是事件描述。我实际上已经实现了允许多行文本输入(我认为),但现在我不确定如何停止它。有没有一种方法可以简单地假设在一段时间后,用户可能已经完成输入?这个问题让我压力很大,因为他们从未真正解决过如何最终用户输入,只解决了如何完成多行。我们必须使用标准的用户输入,而不是来自文本文件,这样会容易得多。下面的代码,如果我在其他地方犯了一个未被注意到的错误,请随时告诉我。我只需要能够让用户完成输入,这样程序就可以重新排序 events[] 并输出它们。
日历.cpp
#include <string>
#include <sstream>
#include <iostream>
#include <vector>
using namespace std;
#include "event.h"
int main(){
// Maximum number of input lines
const int MAX = 100;
// Array of pointers to events
Event *events[MAX];
// Number of currently used pointers in events
int size = 0;
int i = 0;
// Vector containing each input line as a string
vector<string> vec (100);
char temps[100];
while(i < MAX){
cin.getline(temps, 100);
vec[i] = temps;
i++;
}
for(int i = 0; i < vec.size(); i ++){
int found = vec[i].find("/");
int tmo = atoi(vec[i].substr(0, found).c_str());
int sfound = vec[i].find("/", found + 1, 6);
int tda = atoi(vec[i].substr(found + 1, sfound - (found + 1)).c_str());
int tye = atoi(vec[i].substr(sfound + 1, 4).c_str());
string tdes = vec[i].substr(sfound + 6, vec[i].length() - (sfound + 6));
events[size] = new Event(tmo, tda, tye, tdes);
size++;
}
return 0;
}
事件.cpp
#include <iostream>
#include <string>
using namespace std;
#include "event.h"
Event::Event(int mo, int da, int ye, string des){
month = mo;
day = da;
year = ye;
desc = des;
}
Event::~Event(){
}
void Event::print(){
cout << month << "/" << day << "/" << year << " " << desc << endl;
}
事件.h
#ifndef EVENT_H
#define EVENT_H
#include <iostream>
#include <string>
using namespace std;
class Event{
public:
Event(int mo, int da, int ye, string des);
~Event();
void print();
private:
int month;
int day;
int year;
string desc;
};
#endif
预先感谢您的帮助。
编辑:
将我的 while() 循环替换为:
while ((i < MAX) && (!cin.eof()) {
cin.getline(temps, 100);
vec[i] = temps;
i++;
}
看起来很有希望,但即使按照建议使用 Ctrl + D (^D) 注入(inject) EOF 标记后,用户输入仍然可以继续。这可能发生的任何原因?
最佳答案
完成此操作的一种方法是让用户按 Ctrl-D 以表示文件结束。您将必须检查循环中的文件结尾。
while ((i < MAX) && (!cin.eof()) {
cin.getline(temps, 100);
vec[i] = temps;
i++;
}
此方法还有一个额外的好处,即可以将文本文件呈现给程序而不是用户输入,并且当到达文件末尾时将获得相同的结果。
编辑:
Ctrl-Z 是 Windows 机器上的 EOF 击键。 Ctrl-Z 可能必须位于该操作系统上一行的开头(有关此主题的更多信息,请参阅 http://www.velocityreviews.com/forums/t356170-cant-detect-eof-from-stdin-on-windows-console.html 中的讨论)
关于c++ - 终止多行用户输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3784812/