我有一个代码片段,如下所示 -
int main() {
double firstNumber = 245.3252;
double secondNumber = 32.4324;
printf("This is my first number: %.2f", firstNumber);
printf("And what's gonna be in the front if my second number: %.2f", secondNumber);
return 0;
}
这样的代码的问题是它会给我一个如下所示的输出 -
This is my first number: 245.32
And what's gonna be in the front if my second number: 32.43
但是我希望输出看起来像这样(预期输出) -
This is my first number: 245.32
And what's gonna be in the front if my second number: 32.43
我试图使用像%20s那样的宽度修饰符,但是如果我的第一个数字是十位数,那么对齐会再次出现。有人可以告诉我如何使它们看起来完全正确对齐吗?谢谢!
答案 0 :(得分:2)
右对齐实际上是默认值,您只需确保正确指定宽度即可。你想要这样的东西:
printf("This is my first number: %8.2f", firstNumber);
printf("And what's gonna be in the front if my second number: %8.2f", secondNumber);
答案 1 :(得分:2)
最简单的方法:在第一个语句中为格式字符串添加必要的空格字符,同时确保您还修复了数字使用的字符数。
int main() {
double firstNumber = 245.3252;
double secondNumber = 32.4324;
printf("This is my first number: %6.2f", firstNumber);
printf("And what's gonna be in the front if my second number: %6.2f", secondNumber);
return 0;
}
答案 2 :(得分:1)
格式化主要文字
int main(void) {
double Number[] = { 245.3252, 32.4324 };
const char *text[] = {"This is my first number:",
"And what's gonna be in the front if my second number:"};
// Find or set max width of text
int width = max(strlen(text[0]), strlen(text[1]));
// Calculate or set max width of numbers
int maxnumwidth = 6;
int i;
for (int i= 0; i < 2; i++) {
printf("%-*s %*.2f\n", width, text[i], maxnumwidth, Number[i]);
}
return 0;
}
%-*s
:
-
左对齐
*
从参数中获取宽度
s
字符串
%*.2f
:
*
从参数中获取宽度
.2
打印到小数点后两位。
f
浮动或双重
答案 3 :(得分:0)
您可以插入空格。
让我们调用最长字符串m
和另一个n
的长度。在这个例子中,最长的字符串是“如果我的第二个数字是32.43,那么前面会有什么”。
现在,长度最长的字符串不需要任何修改。但是,另一个字符串需要在句子后添加 m - n
空格,但之前数字。所以,在“这是我的第一个数字:”之后但是在“245.32”之前。
注意:在固定宽度字体中,这将是对齐的。但是,在某些字体中,使用此方法时对齐将无法正常工作,因为字符的宽度不固定。
答案 4 :(得分:0)
那么,针对您的具体问题,请尝试以下方法:
printf(“这是我的第一个号码:\ t \ t \ t \ t \ t%.2f \ n”,firstNumber); printf(“如果我的第二个数字:%。2f”,那么前面会有什么,第二个数字);
\ t \ t \ t(3次)+%。2f之前的4个空格