C 有没有办法缩短这个时间?

C 有没有办法缩短这个时间?,c,if-statement,char,logical-operators,C,If Statement,Char,Logical Operators,我有一个非常大的if语句,它看起来不好看,也没有尽可能的高效 我正在制作一个程序,它(取决于用户的输入)运行特定的代码块,例如,如果用户输入'a',程序运行的代码会向文件中添加一些内容,等等。顺便说一下,这是在do while语句中(我不知道这是否相关) 正如你们所看到的,这是一个很长的if语句,我希望它更短。谢谢取决于ansr的大小写是否重要,在if语句之前转换为小写将使所需检查量减少一半。取决于ansr的大小写是否重要,在if语句之前转换为小写将使所需检查量减少一半。嗯,多好的例子啊 为什么

我有一个非常大的if语句,它看起来不好看,也没有尽可能的高效

我正在制作一个程序,它(取决于用户的输入)运行特定的代码块,例如,如果用户输入
'a'
,程序运行的代码会向文件中添加一些内容,等等。顺便说一下,这是在do while语句中(我不知道这是否相关)


正如你们所看到的,这是一个很长的if语句,我希望它更短。谢谢

取决于
ansr
的大小写是否重要,在if语句之前转换为小写将使所需检查量减少一半。

取决于
ansr
的大小写是否重要,在if语句之前转换为小写将使所需检查量减少一半。

嗯,多好的例子啊

为什么不使用strchr
strchr
返回字符串中字符的指针(如果找到),否则返回NULL

else if(strhr(“aArRsSeE”,ansr)==NULL)
{
printf(“无效输入!\n”);
}

嗯,多好的例子,随便什么

为什么不使用strchr
strchr
返回字符串中字符的指针(如果找到),否则返回NULL

else if(strhr(“aArRsSeE”,ansr)==NULL)
{
printf(“无效输入!\n”);
}
我会选择:

switch(tolower(ansr)) {
case 'a':
case 'r':
case 's':
case 'e':
    do_stuff();
    break;
/* other cases here */
}
也可以使用更多库函数,例如:

if (strchr("ares", tolower(ansr)) {
    do_stuff();
}
函数正在搜索给定字符串中的给定字符,如果该字符不存在,则返回
NULL
(或指向该字符第一次出现的指针,但这不是我们在此感兴趣的用例)

  • 这是假设
    ansr
    unsigned char
    EOF
    的范围内。否则,
    tolower
    的行为未定义
      我会选择:

      switch(tolower(ansr)) {
      case 'a':
      case 'r':
      case 's':
      case 'e':
          do_stuff();
          break;
      /* other cases here */
      }
      
      也可以使用更多库函数,例如:

      if (strchr("ares", tolower(ansr)) {
          do_stuff();
      }
      
      函数正在搜索给定字符串中的给定字符,如果该字符不存在,则返回
      NULL
      (或指向该字符第一次出现的指针,但这不是我们在此感兴趣的用例)

      • 这是假设
        ansr
        unsigned char
        EOF
        的范围内。否则,
        tolower
        的行为未定义
          要回答您的问题,我个人会使用一个。它易于使用和阅读。另一件能使代码更具可读性的事情是使用。 以下是一个例子:

          #include <stdio.h>
          #include <ctype.h>
          
          int main ()
          {
              char inp = 'i';
              char ansr = toupper(inp);
              switch(ansr) {
                  case 'A' :
                      // Do something
                      break;
                  case 'R' :
                      // Do something
                      break;
                  case 'S' :
                      // Do something
                      break;
                  case 'E' :
                      // Do something
                      break;
                  default :
                      printf("Invalid input!\n");
              }
              return 0;
          }
          
          #包括
          #包括
          int main()
          {
          char inp='i';
          char ansr=toupper(inp);
          交换机(ansr){
          案例“A”:
          //做点什么
          打破
          案例“R”:
          //做点什么
          打破
          案例S:
          //做点什么
          打破
          案例“E”:
          //做点什么
          打破
          违约:
          printf(“无效输入!\n”);
          }
          返回0;
          }
          
          要回答您的问题,我个人会使用一个。它易于使用和阅读。另一件能使代码更具可读性的事情是使用。 以下是一个例子:

          #include <stdio.h>
          #include <ctype.h>
          
          int main ()
          {
              char inp = 'i';
              char ansr = toupper(inp);
              switch(ansr) {
                  case 'A' :
                      // Do something
                      break;
                  case 'R' :
                      // Do something
                      break;
                  case 'S' :
                      // Do something
                      break;
                  case 'E' :
                      // Do something
                      break;
                  default :
                      printf("Invalid input!\n");
              }
              return 0;
          }
          
          #包括
          #包括
          int main()
          {
          char inp='i';
          char ansr=toupper(inp);
          交换机(ansr){
          案例“A”:
          //做点什么
          打破
          案例“R”:
          //做点什么
          打破
          案例S:
          //做点什么
          打破
          案例“E”:
          //做点什么
          打破
          违约:
          printf(“无效输入!\n”);
          }
          返回0;
          }
          
          看起来您正在尝试编写一个
          else if
          case来捕获不支持的输入字符。
          else
          案例非常适合这种情况:

          ...
          char input;
          //get your input
          if (input == 'A' || input == 'a')
              DoA();
          else if (input == 'R' || input == 'r')
              DoR();
          else if (input == 'S' || input == 's')
              DoS();
          else if (input == 'E' || input == 'e')
              DoE();
          else
              DoInvalidInput();
          
          或者,如果您使用
          tolower()
          ,您可以将其放入
          开关
          语句中:

          char lowerChar = tolower((unsigned char)input);
          switch (lowerChar)
          {
              case 'a': DoA(); break;
              case 'r': DoR(); break;
              case 's': DoS(); break;
              case 'e': DoE(); break;
              default: DoInvalidInput(); break;
          }
          

          看起来您正试图编写一个
          else if
          大小写来捕获不支持的输入字符。
          else
          案例非常适合这种情况:

          ...
          char input;
          //get your input
          if (input == 'A' || input == 'a')
              DoA();
          else if (input == 'R' || input == 'r')
              DoR();
          else if (input == 'S' || input == 's')
              DoS();
          else if (input == 'E' || input == 'e')
              DoE();
          else
              DoInvalidInput();
          
          或者,如果您使用
          tolower()
          ,您可以将其放入
          开关
          语句中:

          char lowerChar = tolower((unsigned char)input);
          switch (lowerChar)
          {
              case 'a': DoA(); break;
              case 'r': DoR(); break;
              case 's': DoS(); break;
              case 'e': DoE(); break;
              default: DoInvalidInput(); break;
          }
          


          一次问一种语言是一种习惯。C或C++?C,我认为它们已经足够接近了。很抱歉造成混淆。由于这是
          else if
          ,我假设您正在处理上述
          if
          else if
          语句中的这些不同字符?为什么不使用一个简单的
          else
          来捕获失败的无效输入?当我使用
          else
          时,它会打印出
          无效输入
          ,不管发生什么。你能发布你正在使用的完整
          if
          else if
          逻辑吗?通常一次只询问一种语言。C或C++?C,我认为它们已经足够接近了。很抱歉造成混淆。由于这是
          else if
          ,我假设您正在处理上述
          if
          else if
          语句中的这些不同字符?为什么不使用一个简单的
          else
          来捕获失败的无效输入?当我使用
          else
          时,它会打印
          无效输入
          ,不管发生什么。你能发布你正在使用的完整
          if
          else if
          逻辑吗?你能解释一下你是怎么做的吗?
          tolower()的原型
          is
          inttolower(intc)
          因此,为了避免未定义的行为,您必须传递
          tolower()
          一个未签名的
          char
          值。您能解释一下您是如何做到的吗?
          tolower()
          的原型是
          inttolower(intc)
          因此,为了避免未定义的行为,您必须传递
          tolower()
          一个未签名的
          char
          值。这样一个不幸的字符串。如果进行更多的重新排序,会更有趣。您能解释一下
          strchr
          的作用和工作原理吗?谢谢你。这么不幸的一根弦。如果再多点的话会更有趣