【问题标题】:simple question on C关于C的简单问题
【发布时间】:2010-06-05 22:59:28
【问题描述】:

我有这个sn-p的代码

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

为什么我无法收到我的Hello 提前谢谢! 编译器究竟如何比较if(str[0] == 1)

【问题讨论】:

    标签: c++ c comparison ascii


    【解决方案1】:

    你想这样做:

    if (str[0] == '1') ...
    

    不同之处在于您将str[0]数字 1 进行比较,而我上面的代码将str[0]字符 '1' 进行比较(具有ASCII 值 49)。并非所有编程语言都以这种方式交替处理字符和数字,但 C 可以。

    查看ASCII,了解有关计算机如何将数字映射到字符的更多信息。

    【讨论】:

      【解决方案2】:

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

      if(str[0] == '1')
      

      或者:

      if(str[0] == 49)
      


      二、一定要注意1'1'的区别

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

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

      但是('1'==49) 是真的!!

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

      【讨论】:

      • 编译器究竟是如何进行这种比较的?
      【解决方案3】:

      这是因为您将 str 的第一个字符与数字 1 进行比较。'1' 的实际字符代码是 49。因此,其中任何一个都可以:

      if (str[0] == '1')
      
      if (str[0] == 49)
      

      请记住,1'1' 不同。第一个是数字,第二个是字符。如果你想了解更多,你应该看看这里:http://en.wikipedia.org/wiki/Character_encoding

      【讨论】:

        【解决方案4】:

        *str 是指针类型 char var...存储字符串的基地址 .str[0] 保存第一个 char ...即 1 也是一个 char ..so,i 它表示是 '1'...

        试试这个:

        if(str[0] == '1')
            printf("Hello \n");
        

        【讨论】:

          【解决方案5】:

          你是在比较一个 char 和一个 int,它应该是

          if(str[0] == '1')
          

          【讨论】:

            【解决方案6】:

            尝试使用if(str[0] == '1') 而不是与1 进行比较,这在C 中意味着一且为真:)

            【讨论】:

              【解决方案7】:

              使用这个 ==>

              if(str[0] == '1')
                  printf("Hello \n");
              

              【讨论】:

                【解决方案8】:

                你需要问

                *str = “123”; if(str[0] == '1') printf("Hello\n");

                看到 1 附近的那些单引号了吗?您需要比较一个字符,而您正在比较一个整数。

                【讨论】:

                  【解决方案9】:

                  试试这个.....

                  if(str[0] == '1')
                      printf("Hello \n");
                  

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 2011-02-12
                    • 1970-01-01
                    • 1970-01-01
                    • 2011-09-21
                    • 1970-01-01
                    • 2023-03-07
                    • 1970-01-01
                    相关资源
                    最近更新 更多