可以这样做吗?
代码:
if(condition) {
printf("Hello")
} else {
printf("World");
}
结果: Hello World
应该使用条件来实现这一目标吗?
请帮忙。提前谢谢。
答案 0 :(得分:7)
没有
如果else
没有,if
语句将仅执行。
答案 1 :(得分:7)
您可以作弊以在C:
中获得此结果#include <stdio.h>
#define else printf(" ");
int main()
{
int condition = 1;
if(condition) {
printf("Hello");
}
else {
printf("World");
}
}
输出:
Hello World
答案 2 :(得分:3)
我想到的唯一想法是
if (printf("Hello") > 0)
printf("");
else
printf(" world");
但它不是一回事,你不能执行if / else的两个分支:选择其中一个分支。
答案 3 :(得分:2)
教师希望您填写fork()
作为条件。这不是通用的C代码,而是Unix / POSIX代码,通过将进程拆分为父进程和子进程来工作。 fork
返回父进程中的子进程ID(非零数字,因此 true ),并返回子进程中的0( false )。
如果您可以在其他地方添加代码,另一种解决问题的可能方法是将setjmp(jmp_buf)
写为条件,并在条件之后添加longjmp(jmp_buf, 1);
。然而,这似乎打破了问题的规则。
答案 4 :(得分:1)
如果/ elses是/ ors。要么执行if部分,要么执行else,但不要同时执行。
答案 5 :(得分:1)
不,声明是if
... else
,而不是if
... and then also maybe
。条件评估一次,并选择分支。
答案 6 :(得分:0)
一般来说,不,这是不可能的。 if / else被转换为Java字节码的方式(在任何一种情况下,转换为机器代码),一个进程将只运行语句的两个分支之一。如果我们没有if / else,我们最终会使用goto
来合成它,这看起来很像这样:
if (condition) goto if_block;
else_block:
printf("World");
goto after_ifelse;
if_block:
printf("Hello");
after_ifelse:
正如您所看到的,如果条件为真(即使它可能在某种程度上也是假的!),该过程将遵循'if'分支并跳过其他。没有办法在一个过程中解决这个问题;任何方式都需要更改程序的代码,或破坏的硬件(特别是RAM或CPU),或足够的辐射来杀死你。我所知道的每个编译器和环境都以这种方式对待if/else
,尽管在else
(并且反转条件)之后有if
个案例是很常见的,这使得(非常有效)假设任何不为真的布尔条件都为假。
现在有了所说的......在C中,这是半可能的,但不是你想的那样 - 而不是每个操作系统。在* nix系统上,有一个通常称为fork()
的系统调用,它允许一个进程变为两个进程(从而避免“一个进程将只运行一个分支”限制)。
if (fork())
printf("Hello");
else
printf("World");
但是(1)这段代码有一个固有的竞争条件 - 现在两个分支都设置为运行,但任何一个分支都可以在另一个分支之前运行。您需要{child}进程中的wait
。并且(2)这不是一个“条件”,它是一个函数调用。如果您不允许添加代码,那么这不应该作为答案。
或者你可以做一些邪恶的宏观内容来将else
完全翻译成其他内容。但是之后阅读你的代码的人会想要找你并没收你的键盘,那就好了。
答案 7 :(得分:0)
两种语言中的布尔类型变量不允许你想要做什么。重点是它们必须是一个或另一个。
要完成您想要的任务,您可能需要自定义类型。
//This type allows for quantum weirdness
public class NotABool{
public boolean isTrue = false;
public boolean isFalse = false;
//Funky setMethod
void set(boolean value){
//...
}
}
NotABool nab = new NotABool();
if (NotABool.isTrue){
//Print "Hello"
}
if (NotABool.isFalse){
//Print "World"
}
你能澄清一下你想要完成的事情吗?
答案 8 :(得分:0)
它疯了,但是:
int test = 0;
String s = "";
switch (test) {
case 0: s += "Hello";
default: s += "World";
}
System.out.println(s);
答案 9 :(得分:0)
您描述的功能看起来更像switch
结构。
在Java中,您只能切换int
和enum
类型,但在C中,您可以切换字符串以及int
类型。
看起来像这样:
int i = 0;
switch (i) {
case 0:
System.out.print("Hello ");
case 1:
System.out.print("World!");
break;
}
结果输出为“Hello World!”
当i
为0
时,它与第一种情况匹配并执行代码,直到找到下一个break;
语句。如果i
为1
,则只打印出“世界!”。