我为什么要写c - '0'而不是c?

时间:2017-04-18 09:55:05

标签: c

嘿,我不明白为什么我的代码不写,当我只用++ ndigit [c](而不是++ ndigit [c -'0'],然后用++ nchar [c]它没关系

如果你有任何tuto,我会非常感兴趣!

#include <stdio.h>

int main()
{
  int c, i, y, ns;
  int ndigit[10];
  int nchar[26];

  ns = 0;

  for(i = 0; i >= 0 && i<= 9; ++i) {
    ndigit[i] = 0;
  }

  for(y = 'a'; y <= 'z'; ++y) {
    nchar[y] = 0;
  }

  while((c = getchar()) != EOF) {
    if(c == ' ' || c == '\t') {
      ++ns;
    }

    if(c >= 'a' && c <= 'z') {
      ++nchar[c];
    }

    if(c >= '0' && c <= '9') {
     ++ndigit[c];
     //++ndigit[c-'0'];
    }

    if(c == '\n') {
      printf("chiffres: ");
      for(i=0;i<10;++i) {
        printf("%d:%d ", i, ndigit[i]);
      }

      printf("lettres: ");
      for(y='a';y<='z';++y) {
        printf("%d:%d ", y, nchar[y]);
      }
      printf("space: %d\n", ns);
    }
  }
}

2 个答案:

答案 0 :(得分:2)

实际上,当您将变量设置为c='0'时,这意味着c的值现在是&#39; 0&#39;的ascii值。那是= 48。 由于您将c的值设置为48但数组大小为10,因此您的代码将获得运行时异常,因为您尝试访问的索引甚至不存在。

请记住,当您使用'0'时,它意味着角色。因此,将此值设置为int变量会使该值等于该字符的ascii值。相反,您可以直接使用c=0

答案 1 :(得分:1)

因为字符<system.web> <httpRuntime maxQueryStringLength="32768" maxUrlLength="65536"/> <security> <requestFiltering> <requestLimits maxQueryString="32768"/> </requestFiltering> </security> <system.web/> (例如)通常不等于整数'4'。即4

使用最常见的字符编码方案ASCII,字符'4' != 4的值为'4',字符52的值为'0'。这意味着,如果你做,例如48您在实践中'4' - '0'并将结果52 - 48作为整数。