gpt4 book ai didi

c - 程序似乎卡在 main() 和用户定义函数之间

转载 作者:行者123 更新时间:2023-11-30 15:36:34 25 4
gpt4 key购买 nike

我正在编写的 C 程序遇到一个非常奇怪的问题,当我尝试从主函数调用 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;
}

最佳答案

重点是你的函数永远不会返回

你的循环永远不会结束,因为当isalpha() == 0时,你继续,因此i不会增加。请记住,继续跳转到循环的开头。

使用 for 循环会更好:

for (i = 0; (cur= word[i]) != 0; ++i)
{
if (...)
continue;
}

现在,继续将跳转到增量表达式。

顺便说一句,为什么使用复杂的 *(word + i) 而不是 word[i]?它们完全一样!

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

关于c - 程序似乎卡在 main() 和用户定义函数之间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22521003/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com