2017-03-22 1 views
0
나는 다음과 같은 프로그램의 흐름을 이해하는 많은 문제에 봉착

:제어 흐름을 이해

#include <stdio.h> 
#include <ctype.h> 

int main() 
{ 
FILE *fp; 
int index = 0; 
char word[45]; 
int words = 0; 

fp = fopen("names.txt","r"); 
if(fp == NULL) 
{ 
    perror("Error in opening file"); 
    return(-1); 
} 


for (int c = fgetc(fp); c != EOF; c = fgetc(fp)) 
{ 
    // allow only alphabetical characters and apostrophes 
    if (isalpha(c) || (c == '\'' && index > 0)) 
    { 
     // append character to word 
     word[index] = c; 
     index++; 

     // ignore alphabetical strings too long to be words 
     if (index > 45) 
     { 
      // consume remainder of alphabetical string 
      while ((c = fgetc(fp)) != EOF && isalpha(c)); 

      // prepare for new word 
      index = 0; 
     } 
    } 

    // ignore words with numbers (like MS Word can) 
    else if (isdigit(c)) 
    { 
     // consume remainder of alphanumeric string 
     while ((c = fgetc(fp)) != EOF && isalnum(c)); 

     // prepare for new word 
     index = 0; 
    } 

    // we must have found a whole word 
     else if (index > 0) 
    { 
     // terminate current word 
     word[index] = '\0'; 

     // update counter 
     words++; 

     //prepare for next word 
     printf("%s\n", word); 
     index = 0; 
    } 
    //printf("%s\n", word); 
} 

printf("%s\n", word); 

fclose(fp); 
return(0); 
} 

당신이 볼 수 있듯이를,이 배열로 단어의 문자를 저장 단지 일반 프로그램의 백 - 투 - 'names.txt'라는 파일에서

내 문제는 else if(index > 0) 상태에 있습니다. 디버거를 실행했는데 분명히 프로그램이 올바르게 작동합니다. 우리는 배열에서 전체 단어를 저장할 수 없을 것입니다, index 그렇지 않으면 1이되고, 처음에 루프 반복에

:

여기 내 질문입니다.

그렇다면 프로그램 흐름이 else if (index > 0) 조건에 도달하면 word[1]을 0으로 설정하지 못할 수 있습니다. (또는 index의 후속 값).

단어 전체가 끝나고 단어 끝에 도달하면 word[index]의 값이 0이되고 다음 단어로 진행합니다.

설명서를 읽으면서 프로그램의 절반을 실행하고 에코로 질문하고 디버거를 실행 해 보았습니다. 그것이 있어야하므로, 모든 것이 완벽하게 실행됩니다. 코드에 문제가 없습니다 (아는 한). 나는 문제 다. 나는 그것이 어떻게 작동하는지 알 수 없다.

추신 : 죄송합니다. 여러분 중 일부분에게 그렇게 쉬운 일이 아니라면, 저는 프로그래밍을 배우기 시작하고 있으며 때로는 너무 단순한 개념을 이해하기도 힘들 때가 있습니다.

시간을 내 주셔서 대단히 감사합니다.

답변

1

if...else 블록에서 어떤 것이 실행되자 마자 블록 밖으로 이동합니다. 따라서 첫 번째 if 조건을 충족하면 else if 조건을 확인하지 않습니다. 따라서 인덱스> 0 AND c = \ 또는 c가 알파벳 인 경우 if 문을 실행하고 이러한 조건 중 하나라도 참이 아니면 블록의 else if 부분으로 이동합니다.

+0

아, 알겠습니다! 그래서 기본적으로 그것은 'else if'와 'if'의 차이점입니까? @lordingtar 대단히 감사합니다! 나는 그것을 지금 당장 볼 수있다! 이 대답을 표시하고 정확하고 해결 된 문제. – Togeri

1

else if (index > 0) 조건의 처음에 else에 유의하십시오.

이는 이전의 if()else if()이 실행되지 않은 경우에만 실행됨을 의미합니다. 문자가 숫자 인 경우

이전 if()else if() 문은 실행 보관하지, 또는 비 슬래쉬는 마지막 else if() 있도록 한 번만이 아닌 숫자를 실행하거나 슬래쉬가 발생합니다.

+0

나는 지금! 귀하의 답변에 대해 @Mik Nakis에게 감사드립니다! – Togeri

관련 문제