以下代码(编译正常)检查命令行输入中的非字母字符,但我觉得必须有更好的方法来编写它。例如,您可以看到没有代码在核心if if语句中执行,该语句检查字符串中的每个字符。有没有办法检查其中一个字符不是否为字母字符并抛出错误,而不是在else
函数中出错?
int main(int argc, string argv[]){
// terminate program if more than one key
if(argc != 2){
printf("error");
return 1;
// check to ensure key characters are alphabetical
} else {
for(int h = 0; h < strlen(argv[1]); h++){
if(isalpha(argv[1][h])){
} else {
printf("error");
return 1;
}
}
}
}
答案 0 :(得分:1)
是的,您可以反转if条件,这是这些情况下的一般解决方案。
int main(int argc, string argv[]){
// terminate program if more than one key
if(argc != 2){
printf("error");
return 1;
} else {
// check to ensure key characters are alphabetical
for(int h = 0; h < strlen(argv[1]); h++){
if(!isalpha(argv[1][h])){
printf("error");
return 1;
}
}
}
}
答案 1 :(得分:1)
字符串通常很短,但调用strlen()ina for循环条件是一个坏习惯。它是O(N平方),因为每次迭代都扫描整个字符串。
像这样编写函数
int allalpha(const char *str)
{
size_t i;
for(i=0;str[i];i++)
if(!isalpha(str[i]))
return 0;
return 1;
}
然后在主
if(!allalpha(argv[1]))
{
/* non all-alpha error handling code here */
}