C프로그래밍을 하는 동안과 비교해서?
: C 는 3 개 、 C 는 3 。for
,while
, , , , 입니다.do-while
그의의 이이? ?? ???
를 들어 거의 것이 다 그런 것 요.while
는 state스트 state state state state state state state state로 대체할 수 .for
술,, 맞??,, 떤, 떤, 떤, 을, 을, 을을 사용하면 어떤 요?while
while loop은 항상 먼저 상태를 평가합니다.
while (condition) {
//gets executed after condition is checked
}
do/while 루프는 항상 이 코드를 실행합니다.do{}
먼저 차단한 후 상태를 평가합니다.
do {
//gets executed at least once
} while (condition);
for 루프를 사용하면 카운터 변수, 체크 조건 및 카운터를 모두 한 줄로 늘릴 수 있습니다.
for (int x = 0; x < 100; x++) {
//executed until x >= 100
}
최종적으로는 모두 루프이지만, 실행 방법에 대해서는 어느 정도 유연성을 제공합니다.
다음은 문제를 해결하는 데 도움이 될 수 있는 각각의 다른 유형의 루프를 사용하는 이유에 대한 훌륭한 설명입니다.고마워 클라이프
의 주요
for
»while
는 보통 용법을 사용합니다.우리는 보통for
있는 , 「을 사용합니다.while
는 반복 횟수를 사전에 알 수 없는 경우에 생성됩니다.while
»do ... while
문제는 또한 프래그매틱스에 관한 것이며, 두 번째 문제는 시작할 때 명령을 한 번 실행한 후 간단한 시간처럼 작동합니다.
루프는 간결하기 때문에 특히 좋습니다.이 for loop을 수행하려면
for (int x = 0; x < 100; x++) {
//executed until x >= 100
}
while loop으로 쓰려면 다음 작업을 수행해야 합니다.
int count = 0;
while (count < 100) {
//do stuff
count++;
}
는 그냥 게 더 ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ다.count++;
논리에 빠져들 수 있습니다.은 어디에 에 따라 가 될 수 .count
루프의 로직 전후에 인크리먼트가 필요한지 여부를 나타냅니다.for
이 루프에서는 loop, "code"에 의 통일성이 됩니다.
위해서 아마 이 이야기를 하는 거예요.break
★★★★★★★★★★★★★★★★★」continue
루프 처리를 실시할 때 도움이 되는 스테이트먼트입니다.
break는 전류 루프를 즉시 종료하고 더 이상 반복되지 않습니다.
//will only run "do stuff" twice
for (int x = 0; x < 100; x++) {
if (x == 2) {
break;
}
//do stuff
}
continue 는 현재 반복을 종료하고 다음 반복으로 넘어갑니다.
//will run "do stuff" until x >= 100 except for when x = 2
for (int x = 0; x < 100; x++) {
if (x == 2) {
continue;
}
//do stuff
}
에서는, 「」의 경우에 해 주세요.continue
part3
의 for (part1; part2; part3)
; 반면, 잠시 동안 루프 상태에서는 루프 상태를 재설정하기 위해 점프합니다.
가독성을 위해
속도와 퍼포먼스에 큰 문제가 있는 경우 컴파일러가 작성한 코드를 어셈블리레벨로 확인하는 것이 최선의 방법입니다.
예를 들어, 다음 코드는 "do-while"이 조금 더 빠르다는 것을 나타냅니다.이는 "jmp" 명령이 "do-while" 루프에서 사용되지 않기 때문입니다.
이 예에서는 BTW가 최악의 경우 "for" 루프에 의해 지정됩니다. : ).
int main(int argc, char* argv[])
{
int i;
char x[100];
// "FOR" LOOP:
for (i=0; i<100; i++ )
{
x[i] = 0;
}
// "WHILE" LOOP:
i = 0;
while (i<100 )
{
x[i++] = 0;
}
// "DO-WHILE" LOOP:
i = 0;
do
{
x[i++] = 0;
}
while (i<100);
return 0;
}
// "FOR" 루프:
010013C8 mov dword ptr [ebp-0Ch],0
010013CF jmp wmain+3Ah (10013DAh)
for (i=0; i<100; i++ )
{
x[i] = 0;
010013D1 mov eax,dword ptr [ebp-0Ch] <<< UPDATE i
010013D4 add eax,1
010013D7 mov dword ptr [ebp-0Ch],eax
010013DA cmp dword ptr [ebp-0Ch],64h <<< TEST
010013DE jge wmain+4Ah (10013EAh) <<< COND JUMP
010013E0 mov eax,dword ptr [ebp-0Ch] <<< DO THE JOB..
010013E3 mov byte ptr [ebp+eax-78h],0
010013E8 jmp wmain+31h (10013D1h) <<< UNCOND JUMP
}
// "WHILE" 루프:
i = 0;
010013EA mov dword ptr [ebp-0Ch],0
while (i<100 )
{
x[i++] = 0;
010013F1 cmp dword ptr [ebp-0Ch],64h <<< TEST
010013F5 jge wmain+6Ah (100140Ah) <<< COND JUMP
010013F7 mov eax,dword ptr [ebp-0Ch] <<< DO THE JOB..
010013FA mov byte ptr [ebp+eax-78h],0
010013FF mov ecx,dword ptr [ebp-0Ch] <<< UPDATE i
01001402 add ecx,1
01001405 mov dword ptr [ebp-0Ch],ecx
01001408 jmp wmain+51h (10013F1h) <<< UNCOND JUMP
}
// "DO-WHILE" 루프:
i = 0;
. 0100140A mov dword ptr [ebp-0Ch],0
do
{
x[i++] = 0;
01001411 mov eax,dword ptr [ebp-0Ch] <<< DO THE JOB..
01001414 mov byte ptr [ebp+eax-78h],0
01001419 mov ecx,dword ptr [ebp-0Ch] <<< UPDATE i
0100141C add ecx,1
0100141F mov dword ptr [ebp-0Ch],ecx
01001422 cmp dword ptr [ebp-0Ch],64h <<< TEST
01001426 jl wmain+71h (1001411h) <<< COND JUMP
}
while (i<100);
특정 수의 반복이 아닌 조건이 true일 때 루프를 실행하는 경우 다른 사용자가 이해하기 쉬워집니다.
while (cond_true)
이런 거 말고는요:
for (; cond_true ; )
while
★★★★★★★★★★★★★★★★★」for
두 문을 모두 프로그래밍에서 루프에 사용할 수 있습니다..while
또는 " " "for
루프가 사용됩니다.은 편하게 사용할 수 있습니다.while
및 는 " " "를 합니다.for
루우프
원하는 루프를 사용합니다.단, C 프로그래밍에서는 루프가 다소 까다로울 수 있습니다.
와의 일반적인 중 while
/for
이치하다 While
와 ""for
루프는 효율적입니다.고등학교 때 컴퓨터 선생님이 숫자를 늘려야 할 때 반복하는 것이 더 효율적이라고 말씀하셨던 것을 기억합니다.그렇지 않아요.
For
루프는 단순히 구문적으로 설탕이 첨가된다 while
이데올로기 때문에
컴파일러가 코드를 가져와 컴파일하면 컴퓨터가 더 낮은 수준(어셈블리)에서 더 쉽게 이해하고 실행할 수 있는 형태로 변환됩니다.에서는 이 두 , 즉 이 두 글자의 차이를 알 수 있습니다.while
★★★★★★★★★★★★★★★★★」for
구문은 없어지고 완전히 같아집니다.
요구에 가장 적합한 루프를 사용해야 합니다.예를 들어 다음과 같습니다.
for(int i = 0; i < 10; i++)
{
print(i);
}
//or
int i = 0;
while(i < 10)
{
print(i);
i++;
}
분명히, 이러한 상황에서는, 「중」보다 「포」가 더 좋아 보입니다.또한 루프 상태를 점검하는 순간 전에 일부 작업을 수행해야 할 경우 "do while"을 사용해야 합니다.
영어가 서툴러서 죄송합니다).
ㅇㅇㅇ, ㅇㅇ.for
것이다while
루프는 똑같아
while <some condition is true> {
// do some stuff
// possibly do something to change the condition
}
for ( some var, <some condition is true>; increment var ) {
}
for 루프의 장점은 실수로 무한 루프를 실행하는 것이 더 어렵다는 것입니다.또는 보통 첫 번째 문장에 루프 변수를 넣기 때문에 하나를 실행하면 더 명확해집니다.
A while
루프는 표준 증가 패턴을 실행하지 않을 때 더 명확해집니다.예를 들어 다음과 같습니다.
int x = 1;
while( x != 10 ) {
if ( some condition )
x = 10;
else
x += 5;
}
WHIREN은 좀 더 유연해요.FOR은 적용되는 경우에 더 간결합니다.
FOR는 다음과 같은 카운터가 있는 루프에 적합합니다.
for (int n=0; n<max; ++n)
물론 다른 사람들이 지적한 것처럼 WHIE에서도 동일한 작업을 수행할 수 있지만, 이제 초기화, 테스트 및 인크리먼트가 3줄로 구분됩니다.루프의 본체가 큰 경우는, 3 행이 넓게 구분되어 있을 가능성이 있습니다.이것은 독자들이 당신이 무엇을 하고 있는지 더 잘 보지 못하게 만든다.결국, "+n"이 매우 일반적인 세 번째 부분이지만, 확실히 유일한 가능성은 아닙니다.나는 "n+=devel" 또는 더 복잡한 식을 쓰는 루프를 많이 썼다.
물론 FOR는 카운터 이외의 장소에서도 사용할 수 있습니다.맘에 들다
for (int n=getFirstElementFromList(); listHasMoreElements(); n=getNextElementFromList())
기타.
그러나 FOR는 "다음에 루프를 통해" 논리가 복잡해지면 무너집니다.고려사항:
initializeList();
while (listHasMoreElements())
{
n=getCurrentElement();
int status=processElement(n);
if (status>0)
{
skipElements(status);
advanceElementPointer();
}
else
{
n=-status;
findElement(n);
}
}
즉, 처리 중에 발생하는 조건에 따라 진행 프로세스가 다를 수 있는 경우 FOR 문장은 실용적이지 않습니다.네, 때로는 복잡한 표현식이나 3진수 연산자 등을 사용하여 작동시킬 수도 있지만, 보통 코드를 읽기보다는 읽기 어렵게 만듭니다.
실제로 대부분의 루프는 어레이 또는 구조체(FOR 루프를 사용하는 경우)를 경유하거나 데이터베이스에서 파일 또는 결과 세트를 읽어내는 경우(WHILE 루프(while (!eof()))를 사용합니다.
모두 교환이 가능하기 때문에 한 가지 타입을 선택하고 그 타입만 계속 사용할 수 있지만, 일반적으로는 한 종류가 특정 태스크에 더 편리합니다.예를 들어 "스위치를 사용하는 이유는 무엇입니까?"라고 말하는 것과 같습니다.-그렇습니다.다만 변수에서 일련의 값을 확인하는 것이 일반적인 패턴이라면 언어 기능이 있으면 읽기 쉽고 편리합니다.
A for
는 이 스킴의 색인 또는 변형을 사용하여 고정 반복을 제안합니다.
A while
★★★★★★★★★★★★★★★★★」do... while
는 매번 체크해야 하는 조건이 있을 때 사용하는 구성입니다(일부 인덱스 분할 구조를 제외하고 위 참조).상태 체크를 처음 실행하는 시점이 다릅니다.
두 구성 모두 사용할 수 있지만 사용 사례에 따라 장단점이 있습니다.
For 루프는 보통 while 루프보다 몇 가지 더 많은 기계 명령을 생성한다는 것을 얼마 전에 알게 되었습니다.그러나 나의 관찰을 반영한 예시를 자세히 살펴보면, 두세 가지 기계 명령의 차이가 있어 고려할 가치가 거의 없습니다.
WHILE 루프용 이니셜라이저는 코드에 베이킹함으로써 제거할 수도 있습니다.예를 들어 다음과 같습니다.
static int intStartWith = 100;
스태틱 수식자는 초기값을 코드에 베이킹하여 1개의 MOV 명령을 저장합니다(드럼롤).더 중요한 것은 변수를 static으로 표시하면 변수가 스택프레임 밖으로 이동합니다MOV 명령과 그 피연산자는 정수, 부울 또는 문자 값(ANSI 또는 Unicode)보다 더 많은 공간을 차지하기 때문에 변수 정렬을 허용하면 약간 더 작은 코드도 생성할 수 있습니다.
단, 변수가 8바이트 경계에 정렬되어 있는 경우 공통 디폴트 설정, 코드로 작성된 int, bool 또는 TCHAR에서는 MOV 명령과 같은 바이트 수가 발생합니다.
그들이 하는 일은 모두 똑같다.어느 것을 사용해도 같은 일을 할 수 있습니다.다만, 가독성, 조작성, 편리성 등에 대해서는 다릅니다.
while과 do-while의 차이점은 가 루프 상태를 체크하고 이것이 참일 경우 본문이 실행되고 조건이 다시 체크된다는 것입니다.do-while은 본문 실행 후 상태를 확인하므로 본문이 한 번 이상 실행되는 동안 do-while을 사용합니다.
물론 while loop을 do-while 및 vv로 쓸 수 있지만 일반적으로 코드 복제가 필요합니다.
★★★★★★★★★★★★★★★의 특징 중 하나do while
시간이 좀 지나야 완성할 수 있다는 거죠.매크로 정의에서는 매크로의 영향을 제한하면서 여러 문을 한 번만 실행하기 위해 자주 사용됩니다.매크로가 블록으로 정의되어 있는 경우 해석 오류가 발생할 수 있습니다.
루프의 경우(적어도 C99를 고려)는 증분 변수의 범위를 제한하기 때문에 루프보다 우수합니다.
상태가 일부 입력에 의존할 경우 루프가 도움이 될 때 실행한다.3가지 루프 타입 중 가장 거의 사용되지 않습니다.
다음 중 하나: while
없기 보기 수 있습니다.for
그럼 스테이트먼트가 하나 또는 둘 다 누락될 수 있으므로 루프 전에 초기화, 루프 조건 및 "업데이트"가 필요한지 여부가 가장 유연하고 명확합니다. 조건테스트 만한 경우는, 「」( 「」)입니다.while
아, 아, 네,
일시적/시간적 및 실행시간적: indo-while
조건은 루프의 끝에서 평가됩니다.루프를 1회 이상 실행해야 하는 경우 더욱 편리합니다.
다 비슷비슷하다do-while
루우프.for
''가 있는 .counter
가 나네요티가 나네요. while
과 같이 loop은 다음과 같습니다.
while (!done) {
if (some condtion)
done = true;
}
/* while 루프
5달러
초콜릿 1개 = 1달러
while my money is greater than 1 bucks
select chocolate
pay 1 bucks to the shopkeeper
money = money - 1
end
집에 와서 쇼핑하는 동안 갈 수 없다. 왜냐하면 내 돈 = 0달러 */
#include<stdio.h>
int main(){
int money = 5;
while( money >= 1){
printf("inside the shopk and selecting chocolate\n");
printf("after selecting chocolate paying 1 bucks\n");
money = money - 1 ;
printf("my remaining moeny = %d\n", money);
printf("\n\n");
}
printf("dont have money cant go inside the shop, money = %d", money);
return 0;
}
무한한 돈
while( codition ){ // condition will always true ....infinite loop
statement(s)
}
https://www.youtube.com/watch?v=eqDv2wxDMJ8&t=25s을 더 잘 이해하려면 이 비디오를 방문하십시오.
/*(루프용)
5달러
for my money is greater than equal to 1 bucks 0 money >= 1
select chocolate
pay 1 bucks to the shopkeeper
money = money - 1 1-1 => 0
end
*/
#include<stdio.h>
int main(){
int money = 5;
for( ; money >= 1; ){ 0>=1 false
printf("select chocolate \n");
printf("paying 1 bucks to the shopkeeper\n");
money = money - 1; 1-1 = 0
printf(" remaining money =%d\n", money);
printf("\n\n");
}
return 0;
}
자세한 내용은 https://www.youtube.com/watch?v=_vdvyzzp-R4&t=25s를 참조하십시오.
언급URL : https://stackoverflow.com/questions/2950931/for-vs-while-in-c-programming
'programing' 카테고리의 다른 글
메서드 자체에 의해 값이 변경되었을 때 vuejs 워치 메서드의 트리거를 정지할 수 있는 방법이 있습니까? (0) | 2022.07.16 |
---|---|
Vue js v-model different 확인란 (0) | 2022.07.16 |
div vuejs에 HTML 요소 추가 (0) | 2022.07.16 |
vue 및 웹 팩과 함께 keycloak-js를 설치하려고 할 때 수집되지 않은 유형 오류: __WEBPACK_IPORTED_MODULE_3_keycloak_js_가 함수가 아닙니다. (0) | 2022.07.16 |
왜죠왜죠tag loadstart event not trigger ? 대체 방법이 있습니까?tag loadstart event not trigger ? 대체 방법이 있습니까? (0) | 2022.07.16 |