数字字符串上的 STRCMP
STRCMP on numeric strings
所以我有 3 个变量:
char fromAge[4];
char toAge[4];
char age[4];
他们都可以有18到100之间的数字(包括18和100)。
当我给它们以下值时,由于某种原因,以下语句是错误的:
fromAge[4] = 18;
toAge[4] = 100;
age[4] = 25;
if (strcmp(age, fromAge) >= 0 && strcmp(age, toAge) <= 0)
{
//actions
}
它认为 "age" 不小于或等于 "toAge"。
为什么有任何建议?
编辑:
这就是我分配变量的方式,我为 '\0'
保留 1 个字节
scanf("%s", fromAge);
scanf("%s", toAge);
年龄为2,5,'\0'
您正在检查字符串,这意味着您正在按字母顺序检查它,确实:“2”在字母表中不在“1”之前:在 ASCII 中,“2”的值是 50,而值因为“1”是 49,确实:50 不会出现在 49 之前。
因此,将数字用作字符串总是一个坏主意,只需将它们视为数字,一切都应该没问题:
int FromAge;
int ToAge;
...
祝你好运
strcmp
通过从左到右比较单个字符来比较字符串,一旦两个字符不同,它就会 return 。由于字符'1'
小于字符'2'
,字符串“100”将被认为小于字符串“25”。
尝试此代码并输入“100”和“25”
int main()
{
char toAge[4] = {0};
char age[4]={0};
scanf("%3s", age);
scanf("%3s", toAge);
// Using string compare
if (strcmp(age, toAge) < 0)
printf("\"%s\" is less than \"%s\"\n", age, toAge);
else if (strcmp(age, toAge) > 0)
printf("\"%s\" is greater than \"%s\"\n", age, toAge);
else
printf("\"%s\" is equal to \"%s\"\n", age, toAge);
// Using integer compare
if (atoi(age) < atoi(toAge))
printf("%s is less than %s\n", age, toAge);
else if (atoi(age) > atoi(toAge))
printf("%s is greater than %s\n", age, toAge);
else
printf("%s is equal to %s\n", age, toAge);
return 0;
}
输出:
"100" is less than "25"
100 is greater than 25
如您所见,函数 atoi
可用于获得您期望的结果。
所以我有 3 个变量:
char fromAge[4];
char toAge[4];
char age[4];
他们都可以有18到100之间的数字(包括18和100)。 当我给它们以下值时,由于某种原因,以下语句是错误的:
fromAge[4] = 18;
toAge[4] = 100;
age[4] = 25;
if (strcmp(age, fromAge) >= 0 && strcmp(age, toAge) <= 0)
{
//actions
}
它认为 "age" 不小于或等于 "toAge"。 为什么有任何建议?
编辑: 这就是我分配变量的方式,我为 '\0'
保留 1 个字节scanf("%s", fromAge);
scanf("%s", toAge);
年龄为2,5,'\0'
您正在检查字符串,这意味着您正在按字母顺序检查它,确实:“2”在字母表中不在“1”之前:在 ASCII 中,“2”的值是 50,而值因为“1”是 49,确实:50 不会出现在 49 之前。
因此,将数字用作字符串总是一个坏主意,只需将它们视为数字,一切都应该没问题:
int FromAge;
int ToAge;
...
祝你好运
strcmp
通过从左到右比较单个字符来比较字符串,一旦两个字符不同,它就会 return 。由于字符'1'
小于字符'2'
,字符串“100”将被认为小于字符串“25”。
尝试此代码并输入“100”和“25”
int main()
{
char toAge[4] = {0};
char age[4]={0};
scanf("%3s", age);
scanf("%3s", toAge);
// Using string compare
if (strcmp(age, toAge) < 0)
printf("\"%s\" is less than \"%s\"\n", age, toAge);
else if (strcmp(age, toAge) > 0)
printf("\"%s\" is greater than \"%s\"\n", age, toAge);
else
printf("\"%s\" is equal to \"%s\"\n", age, toAge);
// Using integer compare
if (atoi(age) < atoi(toAge))
printf("%s is less than %s\n", age, toAge);
else if (atoi(age) > atoi(toAge))
printf("%s is greater than %s\n", age, toAge);
else
printf("%s is equal to %s\n", age, toAge);
return 0;
}
输出:
"100" is less than "25"
100 is greater than 25
如您所见,函数 atoi
可用于获得您期望的结果。