我的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;
}
答案 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}}。