循环完成后嵌套或中断后,循环粘连

时间:2018-12-11 02:31:34

标签: c

以下是一段代码,用于遍历文件名列表,并检查它们是否等于我要查找的文件名。它们是分段文件,因此我必须使用sprintf来检查文件的特定部分。

for(i = 1; i < 4; i++){
    bzero(filebuf, 500);
    sprintf(filebuf, ".%s.%d",filebuf2, i);
    strcpy(fileslist2, fileslist);
    tok = strtok(fileslist2, "|");
    while(tok != NULL){
        tok = strtok(NULL, "|");
        if(strcmp(tok, filebuf) == 0){
            printf("Equal!\n");
            i = 5;
            break;
        }
    }
}

这里的想法是,如果找到文件,则需要打破两个循环。但是现在,如果找到文件,代码就会停止。同样,如果文件不存在,则for循环需要迭代并继续寻找下一个。这也没有发生,在tok == NULL之后,它也挂起了。任何帮助深表感谢。

1 个答案:

答案 0 :(得分:0)

较小的修改可能有助于防止strcmp上的NULL

for(i = 1; i < 4; i++) {
  bzero(filebuf, 500);
  sprintf(filebuf, ".%s.%d",filebuf2, i);
  strcpy(fileslist2, fileslist);
  tok = strtok(fileslist2, "|");
  while(tok != NULL) {
      // tok = strtok(NULL, "|"); // moved down
      if(strcmp(tok, filebuf) == 0) {
          printf("Equal!\n");
          i = 5;
          break;
      }
      tok = strtok(NULL, "|"); // to here
  }
}