strcmp()

时间:2016-02-08 03:39:28

标签: c++ strcmp

我不确定它是strcmp还是只是功能本身,但有些东西不起作用。 这是主函数中的代码。

double findLow(const char* date, const Weather *data, int dataSize) {
    int i, o;
    for (i = 0; i < dataSize; i++) {
        o = strcmp(data[i].date(), date); //testing
        cout << o << ' ' << data[i].date() << date << endl;  //testing
        if (strcmp(data[i].date(),date) == 0)
            return data[i].low();       
    }
    return 0.0;
}

这里是date()函数的代码(公共成员函数)。

const char* Weather::date() const {
    return _dateDescription;
}

由于某种原因,即使字符串匹配,strcmp函数也将返回1。 dateDescription是一个7个字符的C风格字符串,data [i] .date()尝试以与dateDescription相同的格式查找日期。

此外,cout不会显示数据[i] .date()

编辑:当我运行完整代码时,它看起来像这样:

Days of Weather: 3
Enter date: Oct/1
Enter high: 15
Enter low : 10
Enter date: Nov/13
Enter high: 10
Enter low : 1.1
Enter date: Dec/15
Enter high: 5.5
Enter low : -6.5

Weather report:
Date        high  low
======================
Oct/1_______15.0__10.0
Nov/13______10.0___1.1
Dec/15_______5.5__-6.5

Enter the date you are looking for: Nov/13
1 Oct/15
1 Nov/13
1 Dec/15
Low temperature: 0.0(meant to show the low temp of the date requested)

没有显示的是我测试的日期变量。 Paste of the full code

1 个答案:

答案 0 :(得分:1)

这是你的问题:

cin >> query;
//(in this example stored in char query[7])
// and display the found low temprature.

cin.getline(query, 7, '\n');

您从标准输入中读取query ...然后再次阅读。第二次,该行没有任何内容,只有'\n' - 所以它读取一个空字符串。

我删除了cin.getline并得到了明智的结果。

检测此方法的方法是逐步使用调试器,并注意query""而不是输入的日期。