正在跳过(c ++)for循环

时间:2016-12-25 05:22:05

标签: c++

以下代码打印计数为0.但是s.length()是11所以不应该计算为10011?

int main() {
    clock_t start_time = clock();
    string s = "hello world";
    int count = 0;
    for (int i = -10000; i < s.length(); i++) {
        count++;
    }
    cout << count << endl;
    cout << clock() - start_time;
    return 0;
}

1 个答案:

答案 0 :(得分:0)

您正在遇到典型的已签名与未签名的比较失败问题 - 有关SO的常见问题之一(有关示例,请参阅Comparison operation on unsigned and signed integers)。

您可以通过切换到相等比较而不是关系比较来修复代码

for (int i = -10000; i != s.length(); i++)

或强制进行有符号整数比较

for (int i = -10000; i < (int) s.length(); i++)

(虽然在后一种情况下,你没有充分理由限制可能的长度范围)。

但总的来说,避免在比较中混合使用有符号和无符号类型是个好主意。重新设计代码以避免它。