为什么这个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