2

这是我的代码。

#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
01/05/13


date1 应该包含第一个日期,但在打印时它只打印 '\n' 字符(一个空行)。我不知道代码发生了什么,为什么它跳过了第一个日期行。任何和所有的帮助表示赞赏。我是 C++ 的初学者。

4

2 回答 2

1

改用 std::string :

#include <string>
std::string date1;
std::string date2;
//...

inFile >> date1 >> date2;

或者

std::getline(inFile, date1);
std::getline(inFile, date2);
于 2013-08-01T04:44:59.973 回答
0

@billz 为您提供了问题的解决方案,所以我将提供解释:

问题是您的 char 数组恰好分配了 8 个字节(或本例中的字符),但没有为强制性空字节 ( \0) 留出空间。我的假设是这会导致未定义的行为,因此当您打印时,您没有得到正确的输出。例如,在 Linux 上,我没有将第一行设为空白,实际上我得到:

01/04/1301/05/13
01/05/13

这对我来说是一个明确的指标,当它到达假定的空字节时插入并没有停止。解决方案是让您的 char 数组至少保存9个字节。

在这种情况下使用std::string是有益的,因为它完全避免了这个问题(它是一个动态大小的字符串的容器)。它的大小将伴随额外的字符(以及空字节)。

于 2013-08-01T10:13:57.307 回答