【问题标题】:comparing number with special character比较数字和特殊字符
【发布时间】:2017-05-02 10:53:02
【问题描述】:

考虑以下 C 程序:

#include <stdio.h>    
int main()
{
    char c;

    c = 65;
    if(c=='A') printf("condition true");
    return 0; 
}

正如预期的那样(因为 A 的 ASCII 码是 65,所以这个程序打印语句“条件为真”)。

现在考虑以下 C 程序:

#include <stdio.h>   
int main()
{
    char c;

    c = 27;
    if(c==ESC) printf("condition true");
    return 0; 
}

由于 ESC 的 ASCII 码是 27,我希望这个程序也能打印语句“条件为真”。但是,程序甚至没有编译,而是返回了以下错误消息:

error: use of undeclared identifier 'ESC'

如何检查某个数字(例如 27)是否是某些特殊字符(例如 ESC、EOF、...)的 ASCII 码?

【问题讨论】:

  • 这些特殊字符没有定义,可以使用#define指令自己定义:#define ESC 27放在#include之后

标签: c char ascii special-characters


【解决方案1】:

ESC 在 C 中未定义为特殊字符,也未定义为 ESC。 C 甚至不需要 ASCII,尽管这是迄今为止最常用的编码集。

创建你自己的

#ifndef ESC
  #define ESC 27
#else
  #error prior esc definition
#endif

if (some_number == ESC) {
  puts("number is same as ASCII ESC");
}

请注意,A 也未定义为 65。

如果代码需要测试一个数字是否为 ASCII A,请使用

#define ASCII_A 65
if (some_number == ASCII_A) {

如果代码需要测试一个数字是否为'A',(匹配源编码集的A

if (some_number == `A`) {

【讨论】:

    【解决方案2】:

    5.2.2 节中的C standard 仅定义了某些特殊字符:

    • \a:警告
    • \b:退格
    • \f:换页
    • \n: 换行
    • \r:回车
    • \t:标签
    • \v: 垂直制表符

    如果特殊字符是其中之一,您可以在字符常量(例如'\n')中使用上述转义序列之一进行比较。

    【讨论】:

      猜你喜欢
      • 2015-11-06
      • 1970-01-01
      • 2016-10-29
      • 1970-01-01
      • 1970-01-01
      • 2015-07-15
      • 2019-08-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多