?:sprintf上的操作符

时间:2011-07-03 08:39:12

标签: c++ printf logical-operators

显然过多的Python或过多的动态类型语言对于程序员来说并不健康。无论如何,我正在努力进行C ++练习并且对语法有一个快速的问题。我找不到任何应用此代码的源代码(如果可能的话)。

我可以使用包含?:运算符作为sprintf参数的语句吗?这是我的无编码代码,所以你得到一个想法:

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

angleType 是用户输入的值,指定他是输入度数还是弧度。

角度 是角度的值。

结果 是实际的余弦值。

我想尽可能打印一条描述性的信息,所以我想出了这个。

如果可能的话?

谢谢!

3 个答案:

答案 0 :(得分:6)

是的,您可以在任何需要表达的地方使用?:

您的一个问题可能是条件angleType == "g"。在C和C ++中,你无法比较那样的字符串;你需要使用strcmp或类似的东西。除非angleTypestd::string,否则这应该可行。

另一个问题是你似乎期望sprintf返回一个字符串。相反,负责传递一个字符串,然后它将写入其输出。但由于这是C ++,最好还是使用std::string

如果这不能解决您的问题,请发布您的编译器错误消息!

答案 1 :(得分:4)

第一个问题,再看一下sprintf(3)中的原型:

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

第一个参数是sprintf(3)写入的缓冲区。你已经给它了格式字符串。

第二个问题:angleType == "g" - C中的字符串比较不起作用。如果== 'g'angleType,则char会有效。或者如果你确信你有一个C ++ std::string,当然,但这一行没有那些数据。

答案 2 :(得分:1)

我认为这是代码的问题:angleType == "g",如果我猜对了,angleType是char *,而不是std :: string。尝试将其更改为strcmp(angleType, "g") == 0并查看其是否正确。

我没有看到任何问题?:,它唯一的约束,两个结果必须是相同的类型。