我有这么大的if语句,它看起来不那么令人愉悦,而且效率也不高。
我正在制作一个程序(取决于用户输入的内容)运行某个代码块,例如,如果用户输入import "./settings/mainSettingsPage";
,则该程序运行的代码会向文件中添加一些内容,等等。这样的方式是在do-while语句中(虽然我不知道这是否相关)。
'a'
如您所见,这是一个很长的if语句,我希望它要短一些。谢谢
答案 0 :(得分:8)
嗯,这是个例子,
您为什么不使用strchr
? strchr
返回指向字符串中字符的指针(如果找到),否则返回NULL。
else if (strchr("aArRsSeE", ansr) == NULL)
{
printf("Invalid input!\n");
}
答案 1 :(得分:4)
我会选择:
switch(tolower(ansr)) {
case 'a':
case 'r':
case 's':
case 'e':
do_stuff();
break;
/* other cases here */
}
或者您可以使用更多的库函数,例如:
if (strchr("ares", tolower(ansr)) {
do_stuff();
}
strchr
函数正在给定字符串中搜索给定字符,如果不存在,则返回NULL
(或指向第一次出现的指针,但这不是我们所用的用例)对这里感兴趣)
ansr
在unsigned char
或EOF
的范围内。否则,tolower
的行为是不确定的。 答案 2 :(得分:2)
为回答您的问题,我将亲自使用switch statement。它易于使用且易于阅读。会使您的代码更具可读性的另一件事是使用toupper。 这是一个示例:
#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;
}
答案 3 :(得分:1)
取决于ansr
的大小写是否重要,在if语句之前转换为小写将占所需检查量的一半。
答案 4 :(得分:1)
您似乎正在尝试编写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()
,可以将其放在switch
语句中:
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;
}