关于C的简单问题

leg*_*o69 1 c c++ comparison ascii

我有这段代码

char    *str = “123”;
if(str[0] == 1) printf("Hello\n");
Run Code Online (Sandbox Code Playgroud)

为什么我不能Hello提前收到我的谢意!编译器如何完成这种比较if(str[0] == 1)

Gre*_*ill 14

你想这样做:

if (str[0] == '1') ...
Run Code Online (Sandbox Code Playgroud)

不同之处在于您str[0]要与数字 1 进行比较,而上面的代码str[0]字符 '1'(ASCII值为49)进行比较.并非所有编程语言都以这种方式互换地处理字符和数字,但C确实如此.

有关计算机如何将数字映射到字符的详细信息,请查看ASCII.


Bet*_*moo 8

首先,正确的方法是这样做:

if(str[0] == '1')
Run Code Online (Sandbox Code Playgroud)

要么 :

if(str[0] == 49)
Run Code Online (Sandbox Code Playgroud)


其次,你必须采取之间的差异的护理1'1'

  • 1 是整数值...
  • '1'是一个ASCII等于49 的字符

这意味着: ('1'==1)是假的!!

不过('1'==49)是真的!!

当您'1'使用C/C++ 编写时,它会自动转换为相应的ASCII 49,这就是'1'在C/C++中实际表示的方式