【问题标题】:How do I print the assigned value of this letter instead of ascii number?如何打印此字母的分配值而不是 ascii 编号?
【发布时间】:2021-09-26 00:18:06
【问题描述】:

我想通过访问数组来打印 H = 2 的赋值。但是当我从数组中访问它时,它给了我 72。

#include <ctype.h>
#include <stdio.h>

int main()
{
  int H = 2;
  char a[20] = "Hello";
  printf("%d",a[0]);
}

【问题讨论】:

  • 我不确定我是否理解这个问题。是不是因为a[0] 是字符'H',所以您希望您的程序找到一个名为H 的变量并将其打印出来?你不能在 C 中做到这一点;变量名只能被编译器看到,你不能在运行时通过变量名访问变量。
  • 如果你真的需要它,你必须做一个大表,将所有变量名作为字符串和指向相应变量的指针,并编写代码在运行时搜索它。但更有可能的是,无论您的真正目标是什么,都有更好的解决方案。
  • "我要打印 H = 2 的赋值" --> printf("H = %d\n", H);

标签: arrays c variables printing


【解决方案1】:

您不能重新分配字符值。你可以做的是创建一个由字符值索引的数组:

int map[256];

for ( int i = 0; i < 256; i++ ) // initialize the map array
  map[i] = i;                   // so characters map to their
                                // default encoding
map['H'] = 2;                   // override the mapping for 'H'

char a[] = "Hello";
printf( "%d", map[a[0]] );    // print the value of map['H']

【讨论】:

    【解决方案2】:

    您可以创建自己的打印功能,以您需要的方式打印。 您可以创建一个 LUT(查找表)来存储您要打印的值。像这样(不确定语法,只是展示想法):

    int ASCII_RANGE = 256;
    int LUT[ASCII_RANGE];
    int i = 0;
    int H = 'H';
    
    for (i = 0; i < ASCII_RANGE; ++i)
    {
        LUT[i] = i;
    }
    // here you define values that you want to print.
    LUT[H] = 2;
    

    还有你的打印机:

    void printer(int value)
    {
        printf("%d", LUT[value]);
    }
    

    与您的打印机接收字符串并循环打印所有字符的方式相同。

    【讨论】:

      【解决方案3】:

      分配 H=2 不会改变它的 ascii 值。

      int H = 2;
      

      上述语句中的H是一个变量。

      char a[20] = "Hello";
      

      而这个 H 是字符串中的一个简单字符。完全不相关。

      【讨论】:

      • 我没有把它们联系起来。我只想通过访问数组来打印出 H=2。
      • 然后,嗯,创建一个整数数组并存储在那里
      猜你喜欢
      • 2019-10-05
      • 1970-01-01
      • 2021-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-31
      • 2013-03-11
      • 1970-01-01
      相关资源
      最近更新 更多