我有一个使用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;
}
答案 0 :(得分:4)
如果用户输入abc
,则fgets
返回的字符串将为abc\n\0
。换句话说,它是始终未通过isalpha
测试的换行符。您可以通过从字符串长度中减去一个来解决问题。您还应初始化check
变量,因为循环体可能永远不会运行,例如如果用户按下回车而没有输入任何内容。
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++)
答案 1 :(得分:2)
试试这个
int isAlpha(char string[])
{
int i = 0, len = strlen(string);
for(i = 0; isalpha(string[i]); i++); // cycle through string until characters are alphabet characters
return i == len - 1;
/* this has to be true if all characters are alpha */
}
要解决您的问题,请执行以下操作:
for(i = 0; i < len - 1; i++)