C 结构阵列测试中未触发循环

C 结构阵列测试中未触发循环,c,for-loop,struct,C,For Loop,Struct,我刚刚开始探索C语言,所以我将非常感谢任何代码风格的建议。然而,我的具体问题在于理解为什么我的else if条件没有被触发。正如您在评论中所看到的,我意识到我的loop->word似乎从未初始化过,但第二次通过for loop我想至少应该添加一个单词 代码: typedef结构节点{ 字符字[15]; 整数计数; }节点; int main(int argc,char*argv[]){ int word_size=500,dict_size=10; 字符字[字大小]; //主提示 printf(

我刚刚开始探索C语言,所以我将非常感谢任何代码风格的建议。然而,我的具体问题在于理解为什么我的
else if
条件没有被触发。正如您在评论中所看到的,我意识到我的
loop->word
似乎从未初始化过,但第二次通过
for loop
我想至少应该添加一个单词

代码:

typedef结构节点{
字符字[15];
整数计数;
}节点;
int main(int argc,char*argv[]){
int word_size=500,dict_size=10;
字符字[字大小];
//主提示
printf(“输入一些单词:”);
fgets(单词、单词大小、标准输入法);
//创建节点列表,并遍历数组
结构节点dict[dict_size];
结构节点*head=dict;
结构节点*loop=dict;
//标记化指针,从[0]开始,直到分隔符
char*pch;
pch=strtok(大写“”);
//TODO:dict[0]这样last等于1,可以将其用作max循环吗?
//跟踪已更新的节点数
int i,j,last=0;
while(pch!=NULL){
printf(“pch==%s\n”,pch);//这是可行的
for(i=0;iword);//意识到我在测试废话吗?
如果(循环->单词==pch){
//循环遍历每个dict元素,查找匹配的单词
//增加循环->计数指向的值
printf(“%s在dict[%d]中找到,递增计数器”,循环->字,循环->计数);
循环->计数=循环->计数+1;
打破
}else if(i==指令大小){
//密钥不存在,请更新下一个结构
printf(“添加%s,计数为1。\n”,pch);
strcpy(dict[last].word,pch);
dict[last].count=1;
last++;
}
}
//最后移动标记,并重置字典头的指针
pch=strtok(空,“”);
环=头;
}
//将指针设置为空?
循环=空;
head=NULL;
printf(“完成”);
编辑:很抱歉代码墙,不确定c问题所需的最小代码是多少。

  • 在条件为
    iword==pch
    的for循环中,正在比较两个指针-但您希望比较两个字符串-这将使用
    strcmp
    完成。因此,代码的结构将是

    for(i = ..; i < dict_size ; ... ){
       if(strcmp(loop->word, pch) == 0){
          /*  found */
       }
       ...
    }
    if( i == dict_size){
       /* not found */
    }
    
    for(i=…;i字,pch)==0){
    /*发现*/
    }
    ...
    }
    如果(i==数字大小){
    /*找不到*/
    }
    
  • fgets
    应检查返回值以检查函数调用的失败或成功。此级别的错误检查非常重要


我不得不重读了几遍,然后它击中了我。非常感谢,真不敢相信我错过了增量范围。令人惊讶的是,我从未想过Python的这些小东西。
for(i = ..; i < dict_size ; ... ){
   if(strcmp(loop->word, pch) == 0){
      /*  found */
   }
   ...
}
if( i == dict_size){
   /* not found */
}