当整数作为参数传递给它时,应该为整数分配什么值才能获得显示的空白值作为回报?printf
尽管我为整数分配了一个空值,但它会打印 0
有人可以建议可以做些什么来实现这一目标吗?
谢谢
'Blank values' are (empty) strings and no integer can result in a blank value.
如果您指示printf()
打印一个整数,则没有由空字符串表示的整数值。整数上下文中没有“空值”,C 中的 NULL 被明确定义为指针上下文中的零值。在整数上下文中,0
只是一个值。至于应该做什么,使用条件测试来确定是否调用printf()
,或者使用条件测试在使用printf()
显示整数和使用printf()
(或其他函数)显示一些适当长度的空格字符串之间进行选择。
printf 中的 %d 没有修饰符,为零时为空白;但是,显然有时您希望在数字输出中为零输出空白,特别是输出许多为零的数字表。如果您设置使用 printf 执行此任务,则可以进行以下调整以在 int 值为零时允许空白。
1 for (int i = 0; i < STOCKS; i++) {
2 char cur_str[4] = " ";
3
4 if (current_price[i]) sprintf(cur_str, "%+3d", current_price[i]);
5
6 printf(pcb[i+4], "%-15s%4d %4s %4d",
7 stocks[i], ph[year-1][i], cur_str, ph[year][i]);
8 }
向后工作:第 6-7 行是 printf 语句,其中当前价格将使用 %4s 选项和相应的cur_str参数显示在第三列中
第 4 行检查非零当前价格并使用 sprintf 生成正确的调整当前价格(当它不为零时)到cur_str
第 2 行默认cur_str为四个空格,列的宽度
如果有一个你100% 绝对知道永远不会在该上下文中使用的值,则将该值用作“空白”的含义并定义(并使用)一个print_int_with_blank()
函数
#include <stdio.h>
#define IMPOSSIBLE_VALUE 42
int print_int_with_blank(char const *pre, int value, char const *post) {
int n = 0;
if (value != IMPOSSIBLE_VALUE) {
n = printf("%s%d%s", pre, value, post);
}
return n;
}
你可以像这样使用它
#include <stdio.h>
int main(void) {
int a[10];
for (int i = 0; i < 10; i++) {
a[i] = 7 * i;
}
print_int_with_blank("", a[0], "");
for (int i = 1; i < 10; i++) {
print_int_with_blank(", ", a[i], "");
}
puts("");
}
在 ideone 上查看演示
只需将整数转换为字符串,然后在将其提供给 printf 之前去除(前导)零:
v1=42
v2=0
printf '%2s %2s\n' "${v1#0}" "${v2#0}"
这为 v1 打印 42,为 v2 打印两个空白。在 Bourne shell 或 Bash 中运行良好。