显然过多的Python或过多的动态类型语言对于程序员来说并不健康。无论如何,我正在努力进行C ++练习并且对语法有一个快速的问题。我找不到任何应用此代码的源代码(如果可能的话)。
我可以使用包含?:运算符作为sprintf参数的语句吗?这是我的无编码代码,所以你得到一个想法:
return sprintf("The cosine of %2f %s is %2f", angle, (angleType == "g" ? "degrees" : "radians"), result);
angleType 是用户输入的值,指定他是输入度数还是弧度。
角度 是角度的值。
结果 是实际的余弦值。
我想尽可能打印一条描述性的信息,所以我想出了这个。
如果可能的话?
谢谢!
答案 0 :(得分:6)
是的,您可以在任何需要表达的地方使用?:
。
您的一个问题可能是条件angleType == "g"
。在C和C ++中,你无法比较那样的字符串;你需要使用strcmp
或类似的东西。除非angleType
是std::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
并查看其是否正确。
我没有看到任何问题?:,它唯一的约束,两个结果必须是相同的类型。