如何从printf获取空白输出

时间:2013-07-01 14:07:24

标签: c io int printf stdout

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

虽然我为整数分配了一个空值,但它打印0

那应该怎么办?

谢谢

5 个答案:

答案 0 :(得分:1)

'空值'是(空)字符串,没有整数可以导致空值。

答案 1 :(得分:1)

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

答案 2 :(得分: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 默认为四个空格,即列的宽度

答案 3 :(得分:0)

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

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

这将为v1打印42,为v2打印两个空白。 在Bourne shell或Bash中可以正常工作。

答案 4 :(得分: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("");
}

请参见demo at ideone