控制流程理解

Control flow understanding

我在理解以下程序流程时遇到了很多麻烦:

#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] = '[=10=]';

         // 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) 条件。 我有 运行 一个调试器,显然,程序运行正常。

这是我的问题:

在第一次 for 循环迭代中,index 变为 1。否则,我们将无法将整个单词存储在数组中。

如果是这样,怎么可能程序流到else if (index > 0)条件时,不把word[1]设置为0呢? (或 index 的后续值)。

它只是完成了整个单词,一旦到达单词的末尾,它就会继续为 word[index] 赋予 0 的值并继续下一个单词。

我已经尝试阅读文档,运行宁一半的程序并用回声询问,运行宁一个调试器。应该是,一切 运行 都很完美,代码没有问题(据我所知)。我是问题所在。我只是不明白它是如何工作的。

PS:很抱歉,如果这对你们中的一些人来说可能如此微不足道,我真的开始学习编程,我发现有时真的很难理解看似如此简单的概念。

非常感谢你们抽出时间来。

一旦在if...else块中执行了某些东西,它就会移出块。因此,如果它满足第一个 if 条件,则甚至不会检查 else if 条件。因此,如果 index > 0 AND c=\ 或 c 是字母表,它会运行 if 语句,即使其中一个条件不成立,它也会移至 else if 块的部分。

注意 else if (index > 0) 条件开头的 else

这意味着它只会在前面的if()else if()中的none执行时才会执行。

前面的 if()else if() 语句在字符为字母数字或非前导斜杠时会继续执行,因此最后一个 else if() 仅在非字母数字字符时执行一次,或遇到前导斜杠。