Im wanted to pad out blank spaces with a specific character instead of
spaces or zeros, does C support that?
printf("$%*d", '*', 5); // Not sure what the format string is supposed to
look like to do this
example output i would want is this:
$********5 13 22510
"pb" <gl*****@yahoo.com> writes: Im wanted to pad out blank spaces with a specific character instead of spaces or zeros, does C support that?
No. You will have to write your own code to do it.
--
Ben Pfaff
email: bl*@cs.stanford.edu
web: http://benpfaff.org
In article <1103068973.18047@sj-nntpcache-3> pb <gl*****@yahoo.com> wrote: Im wanted to pad out blank spaces with a specific character instead of spaces or zeros, does C support that?
No.
printf("$%*d", '*', 5); // Not sure what the format string is supposed to look like to do this
(Note that //-comments wrap around, so that if this had been intended
to be a code example, it would not have worked so well.
The "*" in "%*d" is a field-width specifier that reads an "int"
argument from the argument list, so:
printf("%*d", 2, 5);
prints the value "5" in a ten-character field. The field is blank
or zero padded depending on the pad option selected: blank by
default, zero if you use a 0 modifier.)
example output i would want is this: $********5
There is no standard way to do this. It is easy to build your own
though: just sprintf() the numeric value, and then work with the
string. In this case, to get an integer printed into a ten digit
field and replace leading blanks or zeros with spaces, just do
something like:
char buf[SOME_SIZE]; /* must be at least 11 chars */
int val;
...
sprintf(buf, "%010d", val); /* produces, e.g., 0000000005 */
subst(buf, '0', '*');
where the subst() function reads:
/*
* Do substitutions on leading characters in the given string:
* Replace all occurrences of "from" with "to". (We assume
* from != '\0'.)
*/
void subst(char *s, char from, char to) {
while (*s == from)
*s++ = to;
}
Note that if you print with leading blanks, you will need to subst()
from ' ' instead of '0'. (This trick works either way.)
--
In-Real-Life: Chris Torek, Wind River Systems
Salt Lake City, UT, USA (40°39.22'N, 111°50.29'W) +1 801 277 2603
email: forget about it http://web.torek.net/torek/index.html
Reading email is like searching for food in the garbage, thanks to spammers.
pb wrote: Im wanted to pad out blank spaces with a specific character instead
of spaces or zeros, does C support that?
Yes, but not directly through a standard function.
printf("$%*d", '*', 5); // Not sure what the format string is
supposed to look like to do this
example output i would want is this: $********5
#include <stdio.h>
#include <string.h>
#define HASH "*********"
int main(void)
{
int amount = 520;
char number[100];
sprintf(number, "%d.%02d", amount / 100, amount % 100);
printf( "$%.*s%s\n",
(int) (sizeof HASH - 1 - strlen(number)),
HASH,
number );
return 0;
}
BTW, $ is not a member of the basic character set.
--
Peter
"pb" <gl*****@yahoo.com> wrote in message
news:1103068973.18047@sj-nntpcache-3... Im wanted to pad out blank spaces with a specific character instead of spaces or zeros, does C support that?
printf("$%*d", '*', 5); // Not sure what the format string is supposed to look like to do this
example output i would want is this: $********5
You've got many good answers already. Here's another
alternative:
#include <iostream>
#include <string>
#include <stdio.h>
unsigned int digits(int value, unsigned int radix)
{
unsigned int result = 0;
if(value < 0)
value *= -1;
result = !value;
while(value)
{
++result;
value /= radix;
}
return result;
}
int main()
{
int value = 42;
int wid = 5;
char prefix = '$';
int leading = 0;
char pad = '*';
int i = 0;
unsigned int d = digits(value, 10) + (value < 0);
if(d > wid)
wid = d;
leading = wid - d ;
putchar(prefix);
for(i = 0; i < leading; ++i)
putchar(pad);
printf("%d\n", value);
return 0;
}
-Mike
Mike Wahler wrote: You've got many good answers already. Here's another alternative:
#include <iostream> #include <string> #include <stdio.h>
Did you forget this was comp.lang.c? It's a good thing, since you might
have gotten flamed in comp.lang.c++ for <stdio.h> instead of <cstdio>,
or, in their anti-C exuberance, for using either.
"Martin Ambuhl" <ma*****@earthlink.net> wrote in message
news:32*************@individual.net... Mike Wahler wrote:
You've got many good answers already. Here's another alternative:
#include <iostream> #include <string> #include <stdio.h> Did you forget this was comp.lang.c?
Actually, no. Those C++ headers are 'residue' from
a 'scratch' file I forgot to delete. (I suppose they
must have been scrolled off the screen.)
It's a good thing, since you might have gotten flamed in comp.lang.c++ for <stdio.h> instead of <cstdio>,
Any flames about that would be unjustified. <stdio.h>
is as valid a standard header in C++ as in C. But yes,
I know, some folks don't know any better.
or, in their anti-C exuberance, for using either.
Let's not go there. :-)
But thanks for pointing out my error.
I'll try to pay better attention in the future.
-Mike
On Wed, 15 Dec 2004 00:37:38 +0000, Chris Torek wrote:
.... printf("%*d", 2, 5);
prints the value "5" in a ten-character field.
Looks like a 2 character field to me. :-)
The field is blank or zero padded depending on the pad option selected: blank by default, zero if you use a 0 modifier.)
example output i would want is this: $********5
There is no standard way to do this. It is easy to build your own though: just sprintf() the numeric value, and then work with the string. In this case, to get an integer printed into a ten digit field and replace leading blanks or zeros with spaces, just do something like:
char buf[SOME_SIZE]; /* must be at least 11 chars */ int val; ... sprintf(buf, "%010d", val); /* produces, e.g., 0000000005 */ subst(buf, '0', '*');
where the subst() function reads:
/* * Do substitutions on leading characters in the given string: * Replace all occurrences of "from" with "to". (We assume * from != '\0'.) */ void subst(char *s, char from, char to) { while (*s == from) *s++ = to; }
Note that if you print with leading blanks, you will need to subst() from ' ' instead of '0'. (This trick works either way.)
That depends on whether you want 0 to be output as ********** or
*********0
Lawrence
Chris Torek <no****@torek.net> wrote: In article <1103068973.18047@sj-nntpcache-3> pb <gl*****@yahoo.com> wrote:
.... printf("%*d", 2, 5);
^^^
10??? prints the value "5" in a ten-character field. The field is blank
^^^
two???
--
Z (zo**********@web.de)
"LISP is worth learning for the profound enlightenment experience
you will have when you finally get it; that experience will make you
a better programmer for the rest of your days." -- Eric S. Raymond
>On Wed, 15 Dec 2004 00:37:38 +0000, Chris Torek wrote: printf("%*d", 2, 5); prints the value "5" in a ten-character field.
In article <pa****************************@netactive.co.uk>
Lawrence Kirby <lk****@netactive.co.uk> wrote:Looks like a 2 character field to me. :-)
Oops. Hasty posting....
Note that if you print with leading blanks, you will need to subst() from ' ' instead of '0'. (This trick works either way.)
That depends on whether you want 0 to be output as ********** or *********0
Right, something else I managed to forget to bring up. And if this
is intended for printing money-amounts, one may have to fiddle with
negative numbers as more special cases.
--
In-Real-Life: Chris Torek, Wind River Systems
Salt Lake City, UT, USA (40°39.22'N, 111°50.29'W) +1 801 277 2603
email: forget about it http://web.torek.net/torek/index.html
Reading email is like searching for food in the garbage, thanks to spammers.
"Chris Torek" <no****@torek.net> wrote in message
news:cp********@news1.newsguy.com... On Wed, 15 Dec 2004 00:37:38 +0000, Chris Torek wrote: printf("%*d", 2, 5); prints the value "5" in a ten-character field. In article <pa****************************@netactive.co.uk> Lawrence Kirby <lk****@netactive.co.uk> wrote:Looks like a 2 character field to me. :-)
Oops. Hasty posting....
I noticed it too, but realized it was merely a typo.
I didn't want to 'pick on' someone whose contributions
here I so highly value. :-) Note that if you print with leading blanks, you will need to subst() from ' ' instead of '0'. (This trick works either way.)
That depends on whether you want 0 to be output as ********** or *********0
Right, something else I managed to forget to bring up. And if this is intended for printing money-amounts, one may have to fiddle with negative numbers as more special cases.
While I did not test exhaustively, the example I posted allows
for the '-' character for negative values.
-Mike
>"Chris Torek" <no****@torek.net> wrote in message news:cp********@news1.newsguy.com... ... And if this is intended for printing money-amounts, one may have to fiddle with negative numbers as more special cases.
In article <zk**************@newsread3.news.pas.earthlink.net >
Mike Wahler <mk******@mkwahler.net> wrote:While I did not test exhaustively, the example I posted allows for the '-' character for negative values.
Well, yes; but I was referring to accountants' desire to print
negative numbers in parentheses, or with the minus sign at the
end, or with a "CR" (credit) or "DB" (debit) suffix, e.g.:
Your Bill
item 1 $***123.45
item 2 $****27.72 CR
total $****95.73
(I always thought these were obnoxious, myself. But my early
training was all mathematics rather than accounting. :-) )
--
In-Real-Life: Chris Torek, Wind River Systems
Salt Lake City, UT, USA (40°39.22'N, 111°50.29'W) +1 801 277 2603
email: forget about it http://web.torek.net/torek/index.html
Reading email is like searching for food in the garbage, thanks to spammers.
"Chris Torek" <no****@torek.net> wrote in message
news:cp*********@news4.newsguy.com... "Chris Torek" <no****@torek.net> wrote in message news:cp********@news1.newsguy.com... ... And if this is intended for printing money-amounts, one may have to fiddle with negative numbers as more special cases. In article <zk**************@newsread3.news.pas.earthlink.net > Mike Wahler <mk******@mkwahler.net> wrote:While I did not test exhaustively, the example I posted allows for the '-' character for negative values.
Well, yes; but I was referring to accountants' desire to print negative numbers in parentheses, or with the minus sign at the end, or with a "CR" (credit) or "DB" (debit) suffix, e.g.:
Your Bill
item 1 $***123.45 item 2 $****27.72 CR total $****95.73
Oh, OK. (I always thought these were obnoxious, myself. But my early training was all mathematics rather than accounting. :-) )
Well, I'm in the opposite 'camp'. All my early programming
learning was in the context of business applications (my first
HLL was COBOL :-) ), and yes, I had to deal with the forms
(value), valueCR, and value- as well. Since OP didn't give
context, I 'defaulted' to the 'simpler' -value. I suppose
the leading asterisks should have been a clue, though. :-)
Aside: One of the accounting oriented things I've done which
I found fun was converting a number to English (e.g. 3125 to
"Three thousand, one hundred twenty-five") for printing bank
drafts. :-)
I do wish I'd learned more math, though. (I struggle with other
than very simple graphics). I'm doing what I can to rectify that
problem when I have time.
Anyway, I'd like to take this opportunity to personally thank
you for all your valuable contributions here. I feel I'm
better with C because of you (and others here). :-)
-Mike
Chris Torek <no****@torek.net> wrote: Well, yes; but I was referring to accountants' desire to print negative numbers in parentheses, or with the minus sign at the end, or with a "CR" (credit) or "DB" (debit) suffix, e.g.:
Or, even more obnoxiously, simply printing them in red, a practice which
thankfully went out of fashion when monochrome copiers became prevalent.
-Larry Jones
I've got an idea for a sit-com called "Father Knows Zilch." -- Calvin This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics |
by: Adrian Neumeyer |
last post by:
Hello folks,
I have a simple question:
I want to control the indentation of strings printed out
with printf(...). Not just a fixed indentation, but lets say
one blank character more for each...
|
by: teachtiro |
last post by:
Hi,
'C' says \ is the escape character to be used when characters are
to be interpreted in an uncommon sense, e.g. \t usage in printf(),
but for printing % through printf(), i have read that %%...
|
by: Erik Leunissen |
last post by:
L.S.
I've observed unexpected behaviour regarding the usage of the '#' flag
in the conversion specification in the printf() family of functions. Did
I detect a bug, or is there something wrong...
|
by: DeltaOne |
last post by:
#include<stdio.h>
typedef struct test{
int i;
int j;
}test;
main(){
test var;
var.i=10;
var.j=20;
|
by: whatluo |
last post by:
Hi, c.l.cs
I noticed that someone like add (void) before the printf call,
like: (void) printf("Timeout\n"); while the others does't. So
can someone tell me whether there any gains in adding...
| |
by: Phil C. |
last post by:
(Cross post from framework.aspnet.security)
Hi. I testing some asp.net code that generates a 256 bit Aes Symmetric Key
and a 256 bit entropy value.
I encrypt the Aes key(without storing it as...
|
by: Bilgehan.Balban |
last post by:
Hi,
I use %#08x to print unsigned integers in hexadecimal format. According
to C ref. man. Harbison & Steele, #08 stands for "pad the number with
up to 8 zeroes to complete it to 8 digit...
|
by: Dino Viehland |
last post by:
I'm assuming this is by-design, but it doesn't appear to be documented:
>>> '%8.f' % (-1)
' -1'
>>> '%#8.f' % (-1)
' -1.'
The docs list the alternate forms, but there isn't one...
|
by: John Messenger |
last post by:
I notice that the C standard allows padding bits in both unsigned and
signed integer types. Does anyone know of any real-world examples of
compilers that use padding bits?
--
John
|
by: Oralloy |
last post by:
Hello folks,
I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>".
The problem is that using the GNU compilers,...
|
by: agi2029 |
last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing,...
| |
by: isladogs |
last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM).
In this session, we are pleased to welcome a new...
|
by: conductexam |
last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and...
|
by: TSSRALBI |
last post by:
Hello
I'm a network technician in training and I need your help.
I am currently learning how to create and manage the different types of VPNs and I have a question about LAN-to-LAN VPNs.
The...
|
by: adsilva |
last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
|
by: 6302768590 |
last post by:
Hai team
i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated ...
|
by: muto222 |
last post by:
How can i add a mobile payment intergratation into php mysql website.
| |
by: bsmnconsultancy |
last post by:
In today's digital era, a well-designed website is crucial for businesses looking to succeed. Whether you're a small business owner or a large corporation in Toronto, having a strong online presence...
| |