【发布时间】:2021-11-27 23:30:14
【问题描述】:
我将输入2021/10/7(年/月/日)等输入。我不会要求用户输入,我需要代码才能正确读取输入。我不明白如何从 Linux 获取输入(日期)以及我的程序如何将该输入横向传输到我的代码中的适当位置。
我们已经简要介绍了<fstream> 和ifstream inData; ofstream outData; .open 和.close,但是对于我在发布的示例解决方案中的最后一个任务freopen 使用了我完全不熟悉的。我特别向我的教授寻求帮助,但鼓励使用外部手段,例如计算科学不和谐和辅导,但没有太大帮助。
我正在寻找一种方法来学习如何输入数据以便可以从数据流中读取数据,以及我应该如何构建这样的东西来从 Linux 而不是用户获取输入。
编写一个从标准输入流中读取日期的程序。
如果日期有效,程序应写下工作日编号,后跟英文工作日名称(例如,“Monday”、“Tuesday”、“Wednesday”、...、“Sunday”)。函数 main 返回 0。
如果从标准输入流中读取的日期无效,程序应写入“错误:无效日期”。函数 main 返回 1。
示例交互
$ echo "2021/03/01" | ./pa04 0 Monday $ echo $? 0 $ echo " 2022/3/1" | ./pa04 1 Tuesday $ echo $? 0 $ echo "3/1/2022" | ./pa04 Error: invalid date $ echo $? 1 $ echo "abracadabra" | ./pa04 Error: invalid date $ echo $? 1
#include iostream
#include string
#include iomanip
#include cmath
using namespace std;
int main() {
int day, month, year, w;
// When I get here I feel there needs to be a cin.ignore() for the '/' in 2021/10/07.
// But I'm also concerned that if someone puts in 7 instead of 07 like in the sample interactions that it will jack up the results.
cin >> year >> month >> day;
w = (day + (13 * (month + 1) / 5) + (year) + (year / 4) - (year / 100) + (year / 400)) % 7;
switch (w) {
case 1:
cout << "Sunday \n";
break;
case 2:
cout << "Monday \n";
break;
case 3:
cout << "Tuesday \n";
break;
case 4:
cout << "Wednesday \n";
break;
case 5:
cout << "Thursday \n";
break;
case 6:
cout << "Friday \n";
break;
case 7:
cout << "Saturday \n";
break;
}
return 0;
}
【问题讨论】: