1

for ループのカウンター変数は、最初にループに入ったときに条件の値に設定されます。このようなことは聞いたことがありません。1 か月ほど前に、この同じシステムでこのコードの非常によく似たバージョンを書きましたが、この問題はありませんでした。

これは、64 ビット Windows Vista コンピュータで Microsoft Visual Studio 6.0 Visual C++ によってコンパイルおよびビルドされています。不要なコードをすべてコメントアウトしましたが、それでもこのエラーが発生しました。すべてのコメントを削除したコードは次のとおりです。

main.cpp:

#include "stdafx.h"

using namespace std;

int main(int argc, char* argv[])
{ 

cout<<"Simple Watch Region Test\n";
cout<<"-----------------------\n";

//get number of tracks
cout<<"  Enter Number of Tracks to Run: ";
unsigned int totalNumberOfTracksToRun;
cin>>totalNumberOfTracksToRun;

unsigned short currentTrack = 0;
cout<<"currentTrack starts at "<<currentTrack<<endl;

for( currentTrack; currentTrack < totalNumberOfTracksToRun; currentTrack++);
{

    cout<<"current is "<<currentTrack<<endl;

     }

    return 0;

}

stdafx.h:

#if !defined(AFX_STDAFX_H__9455C912_1697_486F_A680_AAE1D0B22611__INCLUDED_)
#define AFX_STDAFX_H__9455C912_1697_486F_A680_AAE1D0B22611__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include <iostream>
#include <fstream>
#include <math.h>
#include <string>

出力は次のとおりです。

Simple Watch Region Test
-----------------------
  Enter Number of Tracks to run: 5
currentTrack starts at 0
current is 5
Press Any Key to continue 

ご意見ありがとうございます。

4

2 に答える 2

5

for ステートメントの最後にセミコロンがあります。

for( currentTrack; currentTrack < totalNumberOfTracksToRun; currentTrack++);
                                                     // get rid of this ---^

currentTrackこれは、for ループが実行され、等しくなるまで何もtotalNumberOfTracksToRunせず、次のブロックが実行されることを意味します。これが、currentTrackが即座に 5 に跳ね上がったように見える理由です。

于 2012-11-19T00:01:11.180 に答える
4

あなたには迷いがあります;

for( currentTrack; currentTrack < totalNumberOfTracksToRun; currentTrack++);
//                                                                         |
//                                                                       here

これは、次の行に進む前に到達するまでのforみ増加することを意味します。currentTracktotalNumberOfTracksToRun

于 2012-11-19T00:01:16.797 に答える