printf函数将wrt格式化为不同的值。

时间:2014-11-21 09:14:31

标签: c printf

我正在使用struct创建一个复数计算器,这是我的printf函数

printf("%d%c%di", sum.real, sign, sum.imag);

除了一件事,我可以纠正一切,当sum.imag部分为1或-1时,它打印出来" 1i"或" -1i"除了使用很多" if" s,我可以格式化printf函数,如果sum.imag是1或-1,它不应该打印值而不是打印"我" ??

1 个答案:

答案 0 :(得分:1)

我认为你不能用你的格式字符串来做这件事;你必须使用if语句:

if (sum.imag == 1 || sum.imag == -1) {
    printf("%d%ci", sum.real, sign);
} else {
    printf("%d%c%di", sum.real, sign, sum.imag);
}

或者你可以使用三元表达式作为格式字符串,但这将是一个相当多的不可读,并且实际上是未定义的行为,虽然它应该适用于大多数现代编译器,虽然它们会产生警告(有时)未使用的论点。您可以在this question上了解详情。

printf((sum.imag == 1 || sum.imag == -1) ? "%d%ci" : "%d%c%di"), sum.real, sign, sum.imag);