我正在尝试构建一个C程序,它从文件中读取内容,对内容进行标记化并同时对标记进行分类,将标记复制到temp的数组中。我的目标是打印以前不是的标记打印。换句话说,如果已经打印了令牌,则从打印中跳过此令牌。我实现这一目标的方法是创建一个函数来检查令牌是否出现在我的数组temp中。如果令牌出现在数组temp中,则返回1 else返回-1。我的问题是,该功能不起作用,isAdded始终不是1.因此,它仍然打印以前打印的标记。我跟踪了我的代码,这对我来说似乎是正确的。我不知道为什么它总是返回-1。
这是我的代码:
char *temp[MAX]; /*globally declared*/
void tokenize(FILE *input){
char *token;
int k=0;
char word[1000];
while(!feof(input)){
fgets(word,1000,input);
token = strtok(word, " \t\n");
while(token!=NULL){
if(isAdded(token)!=1){
if(isKeyword(token)==1){
printf("%s, %s\n", token, token);
}
temp[k] = (char*)malloc(strlen(token)+1);
strcpy(temp[k],token);
k++;
}
token= strtok(NULL, " \t\n");
}
}
}
int isAdded(char *token){
int i=0;
while(temp[i]!=NULL){
if(strcmp(temp[i],token)==0){
return 1;
break;
}
i++;
return -1;
}
}
int isKeyword(char *token){
int i=0;
while(resWord[i]!=NULL){
if(strcmp(resWord[i],token)==0){
return 1;
break;
}
i++;
}
}
答案 0 :(得分:1)
将最后return
移到while
循环之外。
答案 1 :(得分:0)
提示:当函数执行return
语句时,它会在此时终止,并且不会执行此函数的任何其他行!
问题在于:
while(temp[i]!=NULL){
if(strcmp(temp[i],token)==0){
return 1;
break;
}
i++;
return -1;
}
向自己解释一下这段代码的作用:
i
以检查第二个字,所以,我会修改这些函数:
int isAdded(char *token){
int i=0; // begin from the start
while(temp[i] != NULL) { // while temp has more words
if(strcmp(temp[i],token) == 0) { // is token same as current word?
return 1; // yes return 1 (the functions TERMINATES here, break is not needed after that)
}
i++; // token was not the current word, increment counter by one
}
// if we reach this point, it means that we didn't find token inside temp[],
// so return -1 (not found)
return -1
}
答案 2 :(得分:0)
int isAdded(char *token){
int i=0, flag=0;
while(temp[i]!=NULL){
if(strcmp(temp[i],token)==0){
flag=1;
break;
}
i++;
}
if(flag==1)
return 1;
else
return -1;
}
我找到了解决方案,因为你的回答在某种程度上帮助了我。谢谢。我使用了一个标志而不是直接返回一个值。