程序似乎挂在main()和用户定义的函数之间

时间:2014-03-20 00:22:58

标签: c

我的C程序有一个非常奇怪的问题我写的是当我尝试从main函数调用areAnagrams函数时,程序显然挂起了。 程序一直运行到要求它进入此功能的点,然后根本不输入它。也许退伍军人的见解可以提供一些帮助吗?

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int areAnagrams(char *word1, char *word2);
int main(void) {
    char word1[25], word2[25];
    printf("Enter first word: ");
    gets(word1);
    printf("Enter the second word: ");
    gets(word2);
    printf("%d", areAnagrams(word1, word2));
    if(areAnagrams(word1, word2) == 1){
        printf("The words are anagrams.");
    }else{
        printf("The words are not anagrams.");
    }
}

int areAnagrams(char *word1,  char *word2){
    int hash[26], i = 0;
    char curr;    
    while((curr = *(word1+i)) != '\0'){
        if(isalpha(curr) == 0){
            continue; //skip non-alphabetics
        }
        hash[(tolower(curr)-97)] += 1;
        i++;
    }
    i = 0;
    while(curr = *(word2+i) != '\0'){
        if(isalpha(curr) == 0){
            continue; //skip non-alphabetics
        }
        hash[(tolower(curr)-97)] -= 1;
        i++;
    }

    int anaFlag = 1; //zero indicates non-anagrams
    for(i = 0; i <= 26; i++){
        if(*(hash+i) != 0){
            anaFlag = 0;
        }
    }
    return anaFlag;
}

1 个答案:

答案 0 :(得分:1)

关键是你的函数永远不会返回

你的循环永远不会完成,因为当isalpha() == 0 continue i时,for不会增加。请记住,继续跳转到循环的开始。

使用for (i = 0; (cur= word[i]) != 0; ++i) { if (...) continue; } 循环您会更好:

continue

现在,*(word + i)将跳转到增量表达式。

顺便说一下,为什么复杂的word[i]代替gets()?它们完全一样!

PS:请不要使用fgets(stdin,...)。它已被弃用。请改用{{1}}。