我有一个程序,它使用 isalpha
比较字符串中的每个元素。我输入一个字符串,它调用函数来循环遍历数组并检查所有字符是否都是字母。如果是,则打印 true,否则打印 false。我的问题是我似乎无法让它正常工作。每次都只会返回 false。
#include <stdio.h>
#include <string.h>
int isAlpha(char string[]);
int main()
{
char str[100];
int bool;
printf("Enter a string to check: \n");
fgets(str, 100, stdin);
bool = isAlpha(str);
if(bool != 0)
{
printf("True\n");
}
else if(bool == 0)
{
printf("False\n");
}
return 0;
}
int isAlpha(char string[])
{
int i, check, len = strlen(string);
for(i = 0; i < len; i++)
{
if(isalpha(string[i]))
{
check = 1;
}
else
{
check = 0;
break;
}
}
return check;
}
最佳答案
如果用户输入abc
,则fgets
返回的字符串将为abc\n\0
。换句话说,换行符总是无法通过 isalpha 测试。您可以通过将字符串长度减一来解决该问题。您还应该初始化 check
变量,因为循环体可能永远不会运行,例如如果用户按下 Enter 键而不输入任何内容。
int i, check = 0;
int len = strlen(string) - 1;
for(i = 0; i < len; i++)
正如 @ShadowRanger 在评论中指出的那样,C 中没有什么是简单的。为了绝对安全,您应该从字符串中删除换行符,如下所示
int i, check = 0;
string[strcspn(string, "\n")] = '\0';
int len = strlen(string);
for(i = 0; i < len; i++)
关于c - 如何使迭代 isalpha 函数的函数起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32919597/