数字字符串上的 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 可用于获得您期望的结果。