printf中%m.nd, %m.ns, %m.nf的输出规则

%m.nd:m代表输出一共占m列,不够m列前面补空格,够m列不作任何处理,n代表这个数一共要有n列,不够前面补0,够n列不做任何处理

int main()
{
	int a = 123;
	printf("%.4d\n",a);
	printf("%5d\n", a);
	printf("%5.4d\n", a);
	return 0;
}

在这里插入图片描述

%m.ns:m代表这个字符串一共输出m列,n代表取这个字符串前n个元素输出到整个m列的右侧,当n<m时,用空格补齐左边的余缺,当n>=m时,不做处理

int main()
{
	char*s = "hello world";
	printf("%5.3s\n",s);
	printf("%6.7s\n",s);
	printf("%.2s\n",s);
	return 0;
}

在这里插入图片描述

%m.nf:m代表这个数一共要输出m列,包括小数点和小数的位数,n代表小数的个数,当浮点数的小数小于n时,采用四舍五入,大于时,后面补0

int main()
{
	float a = 1.25;
	printf("%5.1f\n",a);
	printf("%.4f\n",a);
	printf("%4.3f\n",a);
	return 0;
}

在这里插入图片描述

在C语言中,你可以编写一个简单的函数来验证并格式化浮点数。下面是一个示例程序,它会接收一个浮点数作为输入,并按照`%m.nf`和`%m.ne`格式进行输出,其中`m`表示整数部分的小数位数,`.nf`用于固定小数点后的位数,`.ne`则省略小数部分如果为0: ```c #include <stdio.h> #include <math.h> // Function to format and validate float number void format_float(float num, int precision) { // Check if the number is finite if (!isfinite(num)) { printf("Invalid floating-point number\n"); return; } // Split into integer and fractional parts long int integer = (long int)num; double fraction = modf(num, &integer); // Format with specified precision char buffer[64]; // Enough for most cases snprintf(buffer, sizeof(buffer), "%ld", integer); if (fraction > 0) { snprintf(buffer + strlen(buffer), precision, ".%*f", precision, fraction); } else if (precision > 0 && fraction == 0) { // If no decimal part, add a dot for .ne format buffer[strlen(buffer)] = '.'; buffer[strlen(buffer) + precision] = '\0'; } printf("%s\n", buffer); // Output formatted number } int main() { float input; printf("Enter a floating-point number (or 'q' to quit): "); while (scanf("%f", &input) == 1 && input != 'q') { int precision; // User-specified precision printf("Format: %m.nf or %m.ne (enter 'p' for default 2): "); scanf("%*[^\n]%d", &precision); format_float(input, precision > 0 ? precision : 2); // Use default of 2 if not specified } return 0; } ``` 在这个程序里,用户可以输入一个浮点数,然后选择`%m.nf`或`%m.ne`格式,还可以指定小数位数(默认为2)。如果输入的是非数字字符或'q',则退出循环。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值