#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이되고 다음 단어로 진행합니다.
설명서를 읽으면서 프로그램의 절반을 실행하고 에코로 질문하고 디버거를 실행 해 보았습니다. 그것이 있어야하므로, 모든 것이 완벽하게 실행됩니다. 코드에 문제가 없습니다 (아는 한). 나는 문제 다. 나는 그것이 어떻게 작동하는지 알 수 없다.
추신 : 죄송합니다. 여러분 중 일부분에게 그렇게 쉬운 일이 아니라면, 저는 프로그래밍을 배우기 시작하고 있으며 때로는 너무 단순한 개념을 이해하기도 힘들 때가 있습니다.
시간을 내 주셔서 대단히 감사합니다.
아, 알겠습니다! 그래서 기본적으로 그것은 'else if'와 'if'의 차이점입니까? @lordingtar 대단히 감사합니다! 나는 그것을 지금 당장 볼 수있다! 이 대답을 표시하고 정확하고 해결 된 문제. – Togeri