0
(choice=='Y'||choice=='y')?((printf("\n...The program is now resetting...\n")&&(main()))):((printf("\n\tThank you for trying out the BPCC App.\n"))&&(exit(0))); 

如果我删除exit(0)整个程序运行正确,但我需要包含exit(0).

你能帮帮我吗?

4

3 回答 3

6

C11标准,第 6.5.13 章,逻辑与 [ &&] 运算符

每个操作数都应具有标量类型。

并从手册页exit()

void exit(int status);

现在,void不是有效值(或标量类型)。所以,你不能写

...:((printf("\n\tThank you for trying out the BPCC App.\n"))&&(exit(0)));
                                                               |--------|
                                        The return value of `exit()` is used
                                            as one of the operands of `&&` here

因此错误。您不能使用(基本上是什么意思?)的返回值来编写逻辑。exit()你必须想出一些替代方案。(比如调用exit()作为下一条指令或类似指令)。正如@BLUEPIXY先生的回答中提到的,一种可能的方法是使用运算符 [ ],如下所示comma,

.... (printf("\n\tThank you for trying out the BPCC App.\n")) , (exit(0))

也就是说,这种方法(main()递归调用)不被认为是一种好的做法。

于 2015-05-18T07:21:27.627 回答
2

试试这个

(printf("message") && (exit(0),1))

或者

(printf("message") , exit(0))
于 2015-05-18T08:58:47.697 回答
1

函数exit声明如下

_Noreturn void exit(int status);

所以你不能在这样的表达式中使用它

(printf("\n\tThank you for trying out the BPCC App.\n"))&&(exit(0))

您可以使用逗号运算符代替运算符 &&。

因此,三元运算符可以如下所示

( choice == 'Y' || choice == 'y' ) 
   ? ( printf( "\n...The program is now resetting...\n" ) , ( void )main() )
   : ( printf( "\n\tThank you for trying out the BPCC App.\n" ), exit( 0 ) ); 

或者以下方式

( choice == 'Y' || choice == 'y' ) 
   ? ( printf( "\n...The program is now resetting...\n" ) , exit( main() ) )
   : ( printf( "\n\tThank you for trying out the BPCC App.\n" ), exit( 0 ) ); 
于 2015-05-18T09:33:28.833 回答