0

当整数作为参数传递给它时,应该为整数分配什么值才能获得显示的空白值作为回报?printf

尽管我为整数分配了一个空值,但它会打印 0

有人可以建议可以做些什么来实现这一目标吗?

谢谢

4

5 回答 5

1

'Blank values' are (empty) strings and no integer can result in a blank value.

于 2013-07-01T14:11:44.423 回答
1

如果您指示printf()打印一个整数,则没有由空字符串表示的整数值。整数上下文中没有“空值”,C 中的 NULL 被明确定义为指针上下文中的零值。在整数上下文中,0只是一个值。至于应该做什么,使用条件测试来确定是否调用printf(),或者使用条件测试在使用printf()显示整数和使用printf()(或其他函数)显示一些适当长度的空格字符串之间进行选择。

于 2013-07-01T18:43:07.943 回答
1

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为四个空格,列的宽度

于 2016-06-08T18:29:37.117 回答
0

如果有一个你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 上查看演示

于 2019-06-22T08:02:52.807 回答
0

只需将整数转换为字符串,然后在将其提供给 printf 之前去除(前导)零:

v1=42
v2=0
printf '%2s %2s\n' "${v1#0}" "${v2#0}"

这为 v1 打印 42,为 v2 打印两个空白。在 Bourne shell 或 Bash 中运行良好。

于 2019-06-22T07:38:39.320 回答