我使用isalnum
编写了一些代码来验证序列号是C中的字母数字。我写的代码假设isalnum
输入是char
。一切正常。但是,稍后查看isalnum
后,我看到它需要输入为int
。我的代码是否应该改变它的方式?C和C中的函数参数是char和int可互换的吗?
如果我确实需要改变,那么正确的方法是什么?我应该只声明一个int并将其设置为char并将其传递给isalnum
?这被认为是糟糕的编程习惯吗?
在此先感谢。
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
bool VerifySerialNumber(char *serialNumber) {
int num;
char* charPtr = serialNumber;
if(strlen(serialNumber) < 10) {
printf("The entered serial number seems incorrect.");
printf("It's less than 10 characters.\n");
return false;
}
while(*charPtr != '\0') {
if(!isalnum(*charPtr)) {
return false;
}
*charPtr++;
}
return true;
}
int main() {
char* str1 = "abcdABCD1234";
char* str2 = "abcdef##";
char* str3 = "abcdABCD1234$#";
bool result;
result = VerifySerialNumber(str1);
printf("str= %s, result=%d\n\n", str1, result);
result = VerifySerialNumber(str2);
printf("str= %s, result=%d\n\n", str2, result);
result = VerifySerialNumber(str3);
printf("str= %s, result=%d\n\n", str3, result);
return 0;
}
输出:
str= abcdABCD1234, result=1
The entered serial number seems incorrect.It's less than 10 characters.
str= abcdef##, result=0
str= abcdABCD1234$#, result=0
谢谢,@MikeHolt这被认为是不好的编程习惯还是没关系? – user1527227
请注意签名与无符号值。如果你只使用0-127范围内的字符,那么没有问题。 –
@ user1527227不,这不是糟糕的编程习惯。糟糕的编程习惯是将'int'传递给需要'char'的函数,而不采取预防措施以确保值不被截断。 –