我在理解以下程序流程时遇到了很多麻烦:
#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)
条件。
我运行了一个调试器,显然程序正常运行。
这是我的问题:
在第一次for循环迭代中,index
变为1.否则,我们将无法在数组中存储整个单词。
如果是这样,当程序流达到else if (index > 0)
条件时,它怎么可能没有将word[1]
设置为0? (或index
)的后续值。
它只是完成整个单词,一旦到达单词的结尾,然后它继续给word[index]
值0并继续下一个单词。
我已经尝试阅读文档,运行一半程序并询问echo,并运行调试器。应该是,一切都运行完美,代码没有问题(据我所知)。我是问题所在。我只是无法得到它是如何工作的。
PS:对不起,如果对你们这些人来说这可能是如此微不足道,我真的开始学习编程,我发现有时很难理解这么简单的概念。非常感谢你们。
答案 0 :(得分:1)
只要在if...else
块中执行某些操作,它就会移出块。因此,如果它满足第一个if
条件,则甚至不检查else if
条件。所以如果索引&gt; 0和c = \或c是一个字母表,它运行if语句,如果这些条件中的一个条件不成立,则它将移动到else的部分块。
答案 1 :(得分:1)
请注意<footer>
<div class="container">
<h1>Finanzdienstleistung</h1>
<a href="#">Versicherungen</a><br>
<a href="#">Schadensabwickelung</a>
</div>
<div class="container">
<h1>Vermietung</h1>
<a href="#">Freie Wohnungen</a><br>
<a href="#">Alle Wohnungen</a>
</div>
</footer>
条件开头的else
。
这意味着只有在以前else if (index > 0)
和if()
都没有执行时才会执行。
如果字符是字母数字或非前导斜杠,则前一个else if()
和if()
语句会继续执行,因此最后else if()
只执行一次非字母数字,或者遇到前导斜杠。