为什么这个C++循环不会无限运行?

我正在看着我的朋友尝试解决编程挑战,有一次,他的代码如下所示:

#include <iostream>
#include <string>

using namespace std; 

int main(){ 
//Prompt user to enter string
const string SPACE {" "}; 
string input;

cout << "Please enter String you would like to see in a pyramid: "; 
getline(cin, input);

//Iterate string
for(int i {0}; i < input.length(); i++){ //Going through each character in string...
    for(int j {0}; j <= i; j++){ //Going through each character in string from 0 to i...
        cout << input[j];
    }
    for (int k {i}; k < input.length(); k--){ //Going backwards from string.length() to 0
        cout << input[k - 1];
    }
    cout << endl;
    }
}

我的问题是,为什么第三个 for 循环(最后一个循环)不会导致无限循环?k = 0 作为第一次迭代的初始条件(因为 i = 0),每次迭代 k 递减 1。由于终止条件理论上应该总是假的(对于正整数长度字符串,k 应该总是小于 input.length()),为什么这个循环终止?

回答

请注意比较k < input.length(),其中input.length()返回unsigned string::size。如果k为负,则int将被转换,因此其负值将变为正值。如果k是-1,在那个时候,那么这个值将是可能的最大价值string::size。尝试打印出这些值并亲自查看。

例如:

int main () {
    int i = -1;
    size_t s = 10;
    std::cout << (i > s) << std::endl;
}
// Prints 1, which means the (i > s) is true


以上是为什么这个C++循环不会无限运行?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>