Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C Printf函数将wrt格式化为不同的值。_C_Printf - Fatal编程技术网

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

C Printf函数将wrt格式化为不同的值。,c,printf,C,Printf,我用struct做了一个复数计算器,这是我的printf函数 printf("%d%c%di", sum.real, sign, sum.imag); 除了一件事,当sum.imag部分为1或-1时,它当然会分别打印出“1i”或“-1i”,除了使用大量“if”之外,还有什么方法可以格式化printf函数,其中如果sum.imag为1或-1,它不应该打印值,而只打印“I”吗?我认为您不能用格式字符串来实现这一点;您必须使用if语句: if (sum.imag == 1 || sum.imag =

我用struct做了一个复数计算器,这是我的printf函数

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

除了一件事,当sum.imag部分为1或-1时,它当然会分别打印出“1i”或“-1i”,除了使用大量“if”之外,还有什么方法可以格式化printf函数,其中如果sum.imag为1或-1,它不应该打印值,而只打印“I”吗?

我认为您不能用格式字符串来实现这一点;您必须使用if语句:

if (sum.imag == 1 || sum.imag == -1) {
    printf("%d%ci", sum.real, sign);
} else {
    printf("%d%c%di", sum.real, sign, sum.imag);
}
或者,您可以对格式字符串使用三元表达式,但这将有点不可读,而且实际上是未定义的行为,尽管它应该适用于大多数现代编译器,尽管它们会对(有时)未使用的参数发出警告。您可以在上阅读更多关于此的信息


If听起来像是想在格式字符串本身中嵌入一个
If
语句,据我所知,这是不可能的。IMO,要实现这一点,您不需要
太多的“If”
。。。单
if..else
基于
sum.imag
就可以了。正如@SouravGhosh所说,如果喜欢
if(sum.imag==1 | | sum.imag=-1)printf(“%d%ci”,sum.real,sign);else printf(“%d%c%di”,sum.real,sign,sum.imag)第二个示例是未定义的行为。如果sum.imag为1或-1,则printf看起来像
printf(“%d%ci”,sum.real,sign,sum.imag),因此您只有2个格式说明符,但有3个参数,这是未定义的行为。这行还有一个
太多了。当然。但在大多数现代编译器上,它会发出警告,但仍能正常工作。我更新了答案,提到这是未定义的行为,并包含了一个链接,指向关于额外
printf
参数的问题。
printf((sum.imag == 1 || sum.imag == -1) ? "%d%ci" : "%d%c%di"), sum.real, sign, sum.imag);