【问题标题】:Storing ASCII characters in an array in C在C中将ASCII字符存储在数组中
【发布时间】:2019-03-05 11:26:18
【问题描述】:

我正在尝试使用 ASCII 字符制作随机生成器,但由于我的知识很少,我很难确定制作此随机生成器的最佳方法。

目前,我已经设法创建了一个简单的数组,该数组当前包含 6 个值。

#include <stdio.h>
#include <conio.h>

    int main()
{
    int i;

    int  array[255] = {1, 2, 3 , 4, 5, 6 };

    for(i = 0; i < 6; i++)
    {
        printf("%d", array[i]); /* Prints out all values declared in the array*/
    }

    return 0;
}

输出:123456

我现在坚持的是试图找出如何用 ASCII 字符替换数字。如果有人能帮我解决这个问题,我将不胜感激。

【问题讨论】:

    标签: c arrays random numbers ascii


    【解决方案1】:

    你的初始代码已经相当准确了。

    你唯一的错误是:printf("%d", array[i]);

    %d 说明符将输出一个有符号十进制整数,输出一个字符使用 %c 说明符。 您可以查看 printf here 的所有文档(包括说明符)。

    我还冒昧地将数组中的元素替换为导致字母数字输出的整数。

    #include <stdio.h>
    #include <conio.h>
    
    int main()
    {
        int i;
        int array[255] = { 65, 66, 67 , 68, 69, 70 };
    
        for(i = 0; i < 6; i++)
        {
            printf("%c", array[i]); // Outputs: ABCDEF
        }
    
        return 0;
    }
    

    您接下来的步骤是随机化数组的长度和元素!祝你好运。

    【讨论】:

    • 感谢您的意见,您提供的解释非常有帮助。这个迷你项目的下一阶段是处理随机发生器,然后我想添加一个函数,允许用户选择输出应该多长。祈祷我能做到。
    • 确保你生成的整数在可见字符范围内! Here 是一个提供有效整数的表。字母数字字符为:65 到 90、97 到 122 和 48 到 57。
    • @hymcode 如果这解决了您的问题,您可以将其标记为正确答案。
    【解决方案2】:

    在数组元素中使用字符文字,并以%c 格式打印。

    #include <stdio.h>
    #include <conio.h>
    
    int main()
    {
        int i;
    
        int  array[255] = {'1', '2', '3' , '4', '5', '6' };
    
        for(i = 0; i < 6; i++)
        {
            printf("%c", array[i]); /* Prints out all values declared in the array*/
        }
    
        return 0;
    }
    

    您还可以将数组的声明更改为char array[255],因为它只包含字符。对于printf() 而言,这无关紧要,因为char 变量在调用printf 之类的可变参数函数时会自动转换为int(但如果编译器打印出关于它的警告,我不会感到惊讶,因为它不寻常)。

    【讨论】:

    • 是否需要更多解释为什么将int 传递给%c 格式说明符?
    • 添加了一些解释。
    • @Barmar 我不敢相信事情就这么简单。非常感谢,这似乎已经完成了显示它们的技巧。我现在唯一遇到的问题是某些输出仅显示为 .知道我将如何解决这个问题,或者这是 cmd 的限制而不是显示某些字符?
    • 只对打印打印字符有用,对控制字符无效。控制字符执行它们的操作,例如\n 将转到下一行。
    • 你期待什么?
    【解决方案3】:

    首先,计算机对字符一无所知 - 从它的角度来看,一切都只是数字。

    char 类型只是大小(以位为单位)CHAR_BITS 的整数值。在大多数系统中,它是 8 位。根据您的实现和编译选项,char 可以签名或未签名。

    让我们考虑签名版本。在 32 位系统上:

    int 类型通常为 32 位宽,

    short 通常是 16 位宽

    char 通常是 8 位宽

    所以它可以被称为超短:)

    typedef char supershort;

    所以除了这些类型可以容纳的值的范围之外,它们之间没有区别。

    初学者经常对 char 常量感到困惑:'a''b' .... 等等,这让他们认为 char 很特别,但它只是为了方便人类使用 - 它更多很难记住整个 ASCII 表。

    您可以将它们与任何其他数字类型一起使用: long x = 'a'; 甚至double y = '#'

    假设:您可以将char 类型用作任何其他整数类型。

    【讨论】:

      猜你喜欢
      • 2018-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-03
      • 1970-01-01
      • 2011-09-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多