C 有没有办法缩短这个时间?
我有一个非常大的if语句,它看起来不好看,也没有尽可能的高效 我正在制作一个程序,它(取决于用户的输入)运行特定的代码块,例如,如果用户输入C 有没有办法缩短这个时间?,c,if-statement,char,logical-operators,C,If Statement,Char,Logical Operators,我有一个非常大的if语句,它看起来不好看,也没有尽可能的高效 我正在制作一个程序,它(取决于用户的输入)运行特定的代码块,例如,如果用户输入'a',程序运行的代码会向文件中添加一些内容,等等。顺便说一下,这是在do while语句中(我不知道这是否相关) 正如你们所看到的,这是一个很长的if语句,我希望它更短。谢谢取决于ansr的大小写是否重要,在if语句之前转换为小写将使所需检查量减少一半。取决于ansr的大小写是否重要,在if语句之前转换为小写将使所需检查量减少一半。嗯,多好的例子啊 为什么
'a'
,程序运行的代码会向文件中添加一些内容,等等。顺便说一下,这是在do while语句中(我不知道这是否相关)
正如你们所看到的,这是一个很长的if语句,我希望它更短。谢谢取决于
ansr
的大小写是否重要,在if语句之前转换为小写将使所需检查量减少一半。取决于ansr
的大小写是否重要,在if语句之前转换为小写将使所需检查量减少一半。嗯,多好的例子啊
为什么不使用strchrstrchr
返回字符串中字符的指针(如果找到),否则返回NULL
else if(strhr(“aArRsSeE”,ansr)==NULL)
{
printf(“无效输入!\n”);
}
嗯,多好的例子,随便什么
为什么不使用strchrstrchr
返回字符串中字符的指针(如果找到),否则返回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; }
case来捕获不支持的输入字符。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; }
看起来您正试图编写一个
大小写来捕获不支持的输入字符。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
逻辑吗?通常一次只询问一种语言。C或C++?C,我认为它们已经足够接近了。很抱歉造成混淆。由于这是else if
,我假设您正在处理上述else if
,if
语句中的这些不同字符?为什么不使用一个简单的else if
来捕获失败的无效输入?当我使用else
时,它会打印else
,不管发生什么。你能发布你正在使用的完整无效输入
,if
逻辑吗?你能解释一下你是怎么做的吗?else if
istolower()的原型
因此,为了避免未定义的行为,您必须传递inttolower(intc)
一个未签名的tolower()
值。您能解释一下您是如何做到的吗?char
的原型是tolower()
因此,为了避免未定义的行为,您必须传递inttolower(intc)
一个未签名的tolower()
值。这样一个不幸的字符串。如果进行更多的重新排序,会更有趣。您能解释一下char
的作用和工作原理吗?谢谢你。这么不幸的一根弦。如果再多点的话会更有趣strchr
- 这是假设