I'm trying to pad\justify my text such that everything aligns properly. Can I do this from within sprintf? I've tried all kinds of combinations within the format string. Basically, this is the output I would like: #001 #002 #003 .... #010 etc
unsigned char num; unsigned char buf[20]; num = 0x01; sprintf(&buf[0], "#%bU", num);
I think this will do what you want:
sprintf(buf, "#%3.3bu\n", num);
Ahh cool...that works. What about lining up decimal points for floats? for example: #001: 1000.0 #002: 20.1
float f; unsigned char c; unsigned char buf1[20]; unsigned char buf2[20]; c = 1; f = 1000.0; sprintf(buf1, "#%3.3bu %4.1f\n", c, f); c = 2; f = 20.1; sprintf(buf2, "#%3.3bu %4.1f\n", c, f);
Err... My example of the decimal alignment didn't come out quite right. Here is how I am needing it to align:
#001 1000.0 #002 10.1 etc
The printf/sprintf format specifiers are described in detail in the Manual They are standard ANSI 'C', so any decent 'C' textbook should also have the information you require!
I have stared at the manual's printf description for quite some time and haven't seen the answer that I'm looking for. I'll check some of my C books. But in the meantime, as a forum user, sharing ideas or discussing that which others may not understand\find is the sole purpose of a forum. Its a great way to get a quick answer someone may already know. So I encourage you, Mr. Neil, to participate if possible. Thanks James
Maybe this link would be helpful. That's where I went to figure out the first question. http://www.keil.com/support/man/docs/c51/c51_printf.htm Jon
In "%4.1f", the numbers do not mean, as you might expect, "4 digits before the decimal, and 1 after". They mean "total field width of 4 characters, with 1 character after the decimal point." For your right-justified floats to line up, the total field width must be at least as large as the value you are trying to print. 2000.1, for example, is six characters wide. Larger values will overflow the field. So, you might try: "#%03u %6.1f" or, including the two spaces in the field width of the float "#%03u%8.1f" The "precision" field (the number after the decimal point) is irrelevant for integers.
View all questions in Keil forum