这是我的代码。
#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;
int main ( ){
ifstream inFile;
char date1[8], date2[8];
int dayTemp1[24], dayTemp2[24];
inFile.open("weatherdata.txt");
if(inFile.fail()){
cout << "File failed to open.";
exit(1);
}
inFile >> date1 >> date2;
cout << date1 << endl;
cout << date2 << endl;
inFile.close();
return 0;
}
weatherdata.txt文件的前两行是:
01/04/13
13年1月5日
date1应该包含第一个日期,但是在打印时它只打印&#39; \ n&#39;字符(空行)。 我不知道代码是如何跳过第一个日期行的。 任何和所有的帮助表示赞赏。我是C ++的初学者。
答案 0 :(得分:1)
使用std :: string代替:
#include <string>
std::string date1;
std::string date2;
//...
inFile >> date1 >> date2;
OR
std::getline(inFile, date1);
std::getline(inFile, date2);
答案 1 :(得分:0)
@billz为您解决了这个问题,所以我会提供一个解释:
问题是你的char数组恰好分配了8个字节(在这种情况下是字符),但没有为强制性空字节(\0
)留出空间。我的假设是导致未定义的行为,当你打印时,由于这个原因你没有得到正确的输出。例如,在Linux上,我没有将第一行视为空白,实际上我得到了:
01/04/1301/05/13
13年1月5日
这对我来说是一个明确的指示,当插入到达假定的空字节时插入没有停止。解决方案是允许您的char数组至少保存 9 字节。
在此上下文中使用std::string
是有益的,因为它完全避免了这个问题(它是动态大小的字符串的容器)。它的大小将伴随额外的字符(以及空字节)。