+ -
当前位置:首页 → 问答吧 → 关于for循环

关于for循环

时间:2011-12-05

来源:互联网

刚学C++,书籍是C++ Primer Plus 第五版。

有一段代码看得不是很明白。

// forstr2.cpp -- reversing ab array
#include <iostream>
#include <string>
int main()
{
using namespace std;
cout << "Enter a word: ";
string word;
cin >> word;

// physically modify string object
char temp;
int i, j;
for (j = 0, i = word.size() - 1; j < i; --i, ++j)
{ // start block
temp = word[i];
word[i] = word[j];
word[j] = temp;
  } // end block
cout << word << "\nDone\n";
return 0;
}

测试条件 j < i ,为什么当 j 不小于或大于 i 时,程序还能继下去?不是应该循环停止吗?有点不明白,希望大家指点一下。

作者: gtestm   发布时间: 2011-12-05

你的这个i = word.size() - 1在循环过程中word如果长度变了,i的值也会变化的。不知是不是这个原因。
如果满足了j>=i是循环一定会终止的。
你跟踪一下i,j的值看看

作者: shimachao   发布时间: 2011-12-05

你确定在j >= i的时候还在运行??

作者: hnuqinhuan   发布时间: 2011-12-05

C/C++ code

#include <iostream>
#include <string>
int main()
{
    using namespace std;
    cout << "Enter a word: ";
    string word;
    cin >> word;
    
    // physically modify string object
    char temp;
    int i, j;
    for (j = 0, i = word.size() - 1; j < i; --i, ++j)
    { // start block
        temp = word[i];
        word[i] = word[j];
        word[j] = temp;
        cout << "i =" << i << " j = " << j << endl;
    } // end block
    cout << word << "\nDone\n";
    return 0;
}
//你在看看

作者: hnuqinhuan   发布时间: 2011-12-05

程序没有问题啊
当j≥i时,循环结束了啊
你可以分别输入“12345"和“123456”单步调试一下

作者: sxbwelcome   发布时间: 2011-12-05