Ошибка использования троичного оператора: "ОШИБКА: пустое значение не игнорируется, как должно быть"

(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),

Можете ли вы помочь мне?

3 ответа

Решение

От 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() рекурсивно) не считается хорошей практикой.

Попробуй это

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

или же

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

Функция 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 ) ); 
Другие вопросы по тегам