【问题标题】:Why the code doesn't check the condition in the function [duplicate]为什么代码不检查函数中的条件[重复]
【发布时间】:2020-11-29 02:25:16
【问题描述】:

这里我有一个检查字符串的代码,如果第一个元素是小写的,它应该把它改成大写。当我运行它时,它适用于它们的第一个元素是小写的那些字符串,但它也适用于其他字符串,它不应该。 当我在 Code::Blocks 中调试它时,我意识到当代码想要执行该函数时,它会跳转到 if 正文并且它不检查条件。 我将不胜感激。

#include <stdio.h>
#include <stdlib.h>

int main() {
   char name[30];
   fgets(name, sizeof(name), stdin);
   printf("name: ");
   puts(name);
   upper(name);
   puts(name);
   return 0;
}
void upper (char *a)
{


    if (97 <= *a <= 122)
    {
        *a -= 32;
    }
}

【问题讨论】:

  • 除非完全无法避免,否则不要对字符代码使用数值。当我阅读您的代码时,您认为我应该记住各种字符代码是什么吗? 'a' 工作正常且可读。

标签: c string pointers c-strings


【解决方案1】:

97 &lt;= *a &lt;= 122 被视为(97 &lt;= *a) &lt;= 122

97 &lt;= *a 将被评估为01,因此(97 &lt;= *a) &lt;= 122 将始终为真。

您应该改用97 &lt;= *a &amp;&amp; *a &lt;= 122

【讨论】:

    猜你喜欢
    • 2020-01-07
    • 2021-06-30
    • 2020-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多