Я написал код для проверки, что серийный номер является буквенно-цифровым в C, используя isalnum
. Я написал код, предполагающий, что isalnum
input is char
. Все сработало. Однако, после просмотра isalnum
позже, я вижу, что он хочет ввода как int
. Мой код в порядке, как я должен его изменить?Является ли char и int взаимозаменяемыми для аргументов функции в C?
Если мне нужно изменить, что было бы правильно? Должен ли я просто объявить 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', не принимая меры предосторожности, чтобы гарантировать, что значение не будет усечено. –