?: оператор на sprintf - PullRequest
       20

?: оператор на sprintf

1 голос
/ 03 июля 2011

Очевидно, что слишком много Python или слишком много любого динамически типизированного языка вредны для программиста. В любом случае, я борюсь с упражнением на C ++ и быстро задаю вопрос о синтаксисе. Я не смог найти никакого исходного кода, где это применяется (если возможно).

Могу ли я использовать оператор, который включает оператор?: В качестве аргумента sprintf ?. Это мой код без компиляции, поэтому вы получите представление:

return sprintf("The cosine of %2f %s is %2f", angle, (angleType == "g" ? "degrees" : "radians"), result);

angleType - это значение, введенное пользователем, указывающее, вводит ли он градусы или радианы.

angle - значение угла.

результат - фактическое значение косинуса.

Я хотел напечатать сообщение как можно более наглядным, поэтому придумал это.

Если это возможно?

Спасибо!

Ответы [ 3 ]

6 голосов
/ 03 июля 2011

Да, вы можете использовать ?: везде, где ожидается выражение.

Одна из ваших проблем, вероятно, связана с условием angleType == "g".В C и C ++ нельзя сравнивать подобные строки;вам нужно использовать strcmp или что-то в этом роде.Если angleType не является std::string, в этом случае это должно сработать.

Другая проблема заключается в том, что вы, похоже, ожидаете, что sprintf вернет строку.Вместо этого вы несете ответственность за передачу ему строки, в которую он затем запишет свой вывод.Но поскольку это C ++, лучше использовать std::string в любом случае!

Если это не решит вашу проблему, опубликуйте сообщение об ошибке компилятора!

4 голосов
/ 03 июля 2011

Первая проблема, взгляните еще раз на прототип в sprintf(3):

   int sprintf(char *str, const char *format, ...);

Первый аргумент - это буфер, в который sprintf(3) записывает.Вы дали ему строку формата.

Вторая проблема: angleType == "g" - сравнение строк в C не работает таким образом.== 'g' будет работать, если angleType будет char.Или, если вы уверены, что у вас есть C ++ std::string, конечно, но только в этой строке нет этих данных.

1 голос
/ 03 июля 2011

Я думаю, что это проблема с вашим кодом: angleType == "g", если я правильно угадаю, что angleType это char *, а не std :: string. Попробуйте изменить его на strcmp(angleType, "g") == 0 и посмотреть, правильно ли оно.

Я не вижу проблем с?: Единственное ограничение - оба результата должны быть одного типа.

...