C17标准下Visual Studio 2019实现输出值对齐格式化问题
问题原因
你的代码存在三处核心问题:
- 格式符语法错误:
%*10.lf不符合printf格式规范,使用*动态指定宽度时不需要额外加数字后缀,正确写法为%*.lf - 宽度参数设置过大:你设置的20位列宽远大于示例需求,导致输出间隔不符合预期
- 类型选择有隐患:如果仅输入整数,用double存储大整数可能出现精度丢失,更推荐用整数类型
修正方案
按照示例的右对齐效果,设置第一列宽度为10,第二列宽度为15即可匹配预期输出,修正后代码如下:
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int main() { // 如果输入都是整数,建议改用long long避免精度问题 long long num1, num2, num3, num4; printf("Enter numbers: "); scanf("%lld", &num1); scanf("%lld", &num2); scanf("%lld", &num3); scanf("%lld", &num4); // 固定宽度写法:%10lld表示右对齐占10位,%15lld表示右对齐占15位 printf("%10lld %15lld\n", num1, num2); printf("%10lld %15lld\n", num3, num4); return 0; }
如果你需要动态指定列宽,可使用*传参的写法:
// 10和15为动态传入的列宽参数,顺序和格式符一一对应 printf("%*lld %*lld\n", 10, num1, 15, num2); printf("%*lld %*lld\n", 10, num3, 15, num4);
如果必须保留double类型,把格式符替换为%10.0lf和%15.0lf即可。
内容的提问来源于stack exchange,提问作者Moon
相关产品推荐
相关产品推荐

