我在弄清楚如何检查关键字(argv [1])中的每个字符时遇到麻烦。我知道我可能缺少一些非常明显的东西。 :(
我尝试将字符串保存到数组中,声明一个新的int,但仍然是同样的问题。
//check to make sure 2nd argument is fully alphabetic
string keyword = argv[1];
for(int i = 0, n = strlen(keyword); i < n; i++)
{
if(isalpha(keyword[i]))
{
printf("Success! \n");
return 0;
}
else
{
printf("Invalid key, must be fully alphabetic. \n");
return 1;
}
}
预期的输出应为“无效键,必须完全按字母顺序排列”。对于任何不完全按字母顺序排列的内容。相反,它仅适用于开头字符,不适用于整个关键字。
答案 0 :(得分:2)
除非值是非字母的,否则不要短路(return
);保存打印Success
,并在整个循环完成时返回0
,而没有由于非字母字符而退出:
for(int i = 0, n = strlen(keyword); i < n; i++)
{
if(!isalpha(keyword[i]))
{
printf("Invalid key, must be fully alphabetic. \n");
return 1;
}
}
printf("Success! \n");
return 0;
答案 1 :(得分:1)
两个问题
不要总是退出循环
使用无符号字符值
在isalpha(int x)
范围和EOF中为x
定义了 unsigned char
。其他char
负值重新定义了行为。
// if(!isalpha(keyword[i]))
if(!isalpha((unsigned char) keyword[i]))
具有简化的循环-不需要strlen()
。
int alexa_alpha_test(const char *keyword) {
while (*keyword) {
if(!isalpha((unsigned char) *keyword)) {
printf("Invalid key, must be fully alphabetic. \n");
return 1;
}
keyword++;
}
printf("Success! \n");
return 0;
}