C语言中输出格式问题

笔试中经常会出现很多输出格式问题

%m.ne
输出数据共占m列,n位小数,数值长度如果小于m则左边补空格

%m.ns
输出m列,只取字符串左端n个字符,若这n个字符输出在m列右侧,左补空格。

官方解释很难理解,问题本身在于字符串的长度


int main()
{
	char s[20];
	strcpy(s, "Hello,World");
	printf("s[]=%6.9s\n", s);
	system("pause");
	return 0;
}

在这里插入图片描述
很明显输出了9位,继续看


int main()
{
	char s[20];
	strcpy(s, "Hell");
	printf("s[]=%6.9s\n", s);
	system("pause");
	return 0;
}

在这里插入图片描述
我们继续看

int main()
{
	char s[20];
	strcpy(s, "Hell");
	printf("s[]=%6.1s\n", s);
	system("pause");
	return 0;
}

输出
在这里插入图片描述
可见:
我们的m是限定输出的长度,但是如果n是大于m的并且字符串长度是大于n的,将会输入n个字符。

如果字符串长度是小于这个m的,并且n也是小于m的,输出长度就是m,读取数据的内容是从字符串左边到右边取n个,不足m的左边补空格。

实际上来说,n是实际读取字符串时的长度,但是m是输出长度,当读取长度大于n大于输出长度m时,会输出m的长度,字符串长度不足m n中最小时左边补空格。

这时候出现了6位,但是左边是补了空格的。
所以我们这个格式是限定这个字符串长度在m 到 n之间,如果不足则左边
补空格。
同理: %m.n e也是如此

猜你喜欢

转载自blog.csdn.net/flf1234567898/article/details/107876469