当一个整数作为参数传递给它时,应该为一个整数分配什么值以获得printf显示的空白值?
虽然我为整数分配了一个空值,但它打印0
那应该怎么办?
谢谢
答案 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("");
}