2013-07-24 5 views
3

이 사이트에서 권장하는대로 "C++ Primer 5th Edition"을 사용할 것입니다. For 루프와 While 루프를 거치면서 거의 동일하다는 결론을 내 렸습니다. 적어도 그것이 내가 수집 한 것입니다. 나는 "For 루프는 얼마나 많은 시간을 반복하는지 알고있을 때 for while 루프는 조건이 충족 될 때까지 반복 할 때를위한 것"이라고 말할 때 가장 잘 설명한다고 생각합니다. 그러나 본질적으로 컴파일러는이 둘을 구별하지 않으며 서로 교환 할 수 있습니다.While 루프를 For 루프로 쓰는 방법?

<iostream> 

int main() 
{ 

int sum = 0, value = 0; 
// read until end-of-file, calculating a running total of all values read 

while (std::cin >> value) { 
sum += value; // equivalent to sum = sum + value 
std::cout << "Sum is: " << sum << std::endl; 
return 0; 

    } 
} 

첨부 운동 의 합을 출력하는 프로그램의 자신의 버전을 쓰기 "로 말했다 :

이 책은 (심지어 끝까지 그것을 설명을 작동하지 않는)이 코드를 발표 cin에서 읽은 정수 세트. " 나는 그들이 For 루프를 사용하기를 원한다고 가정하고있다. 그래서 그 일을 시도했습니다. 나는 힘든 시간을 보내고있다.

"The For 루프는 initstatement, condition 및 expression으로 구성되어 있습니다. while 루프에서"std :: cin >> value "는 내 조건이고 표현이 없었습니다. 나는 모두가 initstatement 및 조건의 경우 루프를 사용하는 가정?

#include <iostream> 


int main() 

{ 
int sum = 0; 

for (int value = 0; std::cin >> value; "EXPRESSION GOES HERE") 
    sum += value; 
std::cout << "The sum is: " << sum << std::endl; 
return system("pause"); 
} 
+0

'for'표현의 * 일부는 비워 둘 수 있습니다. –

+0

사이드 노트 : 연습은 * 반복 횟수 *를 알고있을 때 사용하는 루프에 대한 것이지만 특정 조건에서 * 중단 할 위치를 선호합니다. –

+3

@Grijesh : 아니오, for-loop는 모든 루프에서 필요한 "초기화", "조건"및 "업데이트"단계가있는 곳입니다. 예 : 연결된 목록은'for (T * p = head; p; p = p-> next) ... '로 반복 될 수 있습니다 - 어떤 숫자로 몇 개가되는지를 알지 못합니다. . 숫자를 나누기 위해 숫자를 나누는 것은'for (int x = n; x; x/= 10) ...'등으로 할 수 있습니다. –

답변

4

잘못, 당신은 for(;...;)while(...)를 교체하여 for 루프와 같은 while 루프를 쓸 수 ...

for (;std::cin >> value;) { 

} 

Noth 귀하가 게시 한 코드에 관해서는 for 루프를 제안합니다. 일반적으로 for 루프는 실제로 무언가를 세고 싶을 때나 컬렉션을 반복 할 때 사용합니다. 당신의 의도는 조건이 충족 될 때까지 반복하기 만하면 while이 아닌 for이 거의 비명을 지른다.

내가 for 루프와 함께이 "제대로"이라고 기입해야한다면, 나는이 같은 것을 사용할 수 있습니다 같아요

int sum = 0; 
for (int i = 0; std::cin >> i; sum += i); // empty loop body 
std::cout << sum << std::endl; 

비록, 내가 더있는 while 루프를 사용하는 것이 더 가능성이있을 것을 의미 상으로 정확하다.

+0

오, 오케이. 나는 for (initstatement, condition, expression) 형식을 사용하는 것으로 국한되었다고 생각했다. 감사! –

+0

당신은 그렇지만 세 부분 중 하나라도 비어있을 수 있습니다. 'for (;;)'는 루프 내의 무언가가'break' 또는'return' 또는'throw'를 호출 할 때까지 절대로 종료하지 않는 영원한 루프를 작성하는 일반적인 방법입니다. – meagar

+1

나는이 세 부분을 모두 사용해야한다고 생각했다. 이 책은 부품을 내놓을 수 있는지에 관해 구체적이지 않았습니다. 지금은 이해. –

1

답에 중요한 점은 for 표현의 모든 부분을 밖으로 나갈 수 있다는 것입니다.

for (;;) break; 

유효한 코드 일 수 있습니다.

또한 C++ 책을 제쳐두고이 경우 C로 돌아가는 것이 좋습니다. 루프 의미 론적 기본은 둘 다 동일하고 C는 훨씬 간단합니다.

편집 :

#include <iostream> 


int main() 

{ 
int sum = 0; 

for (int value = 0; std::cin >> value; sum+= value); 

// alternative version, a bit easier to read probably: 
// for (int value = 0; std::cin >> value;) sum+= value; 

std::cout << "The sum is: " << sum << std::endl; 
return system("pause"); 
} 
1

{ 
    int i = 0; 
    while(i < limit){ 
     //do stuff 
     i++; 
    } 
} 

의 같은 while 루프 루프가있을 때 반복 변수를 휴지통 범위 연산자를 유지 : 뭔가처럼 문제에 대한 완벽한 솔루션이 될 수있다 끝난.

0

때로는 코드가 다른 코드보다 깔끔하게 보일 때가 있습니다.두 가지 시나리오를 고려하십시오.

std::vector<double> myVector; 
typedef std::vector<double>::iterator dblIter; 
dblIter curr = myVector.begin(); 
dblIter end = myVector.end(); 

while(curr != end) 
{ 
    // do stuff 
    ++curr; 
} 

또는;

std::vector<double> myVector; 
typedef std::vector<double>::iterator dblIter; 

for(dblIter curr = myVector.begin(); curr != myVector.end(); ++curr) 
{ 
    // do stuff 
} 

나는 "당신은 반복 횟수를 알고있는 경우에 사용하는"말 의견에도 불구하고, 옵션 2를 선호하는 일. 나는 그것이 일반적인 규칙으로 적용되는 것 같아요.

관련 문제