Re: reading a line through scanf
- From: pete <pfiland@xxxxxxxxxxxxxx>
- Date: Thu, 30 Jun 2005 06:58:42 GMT
Suman wrote:
>
> pete wrote:
> > gyan wrote:
> > >
> > > I want to read a line with white spaces though scanf.
> > > So i used:
> > > scanf("%['/n']",string);
> > >
> > > above is working in one program,
> > > but in other..what may be the reason?
> >
> > #define LENGTH 20
> > #define str(x) # x
> > #define xstr(x) str(x)
> >
> > int rc;
> > char array[LENGTH + 1];
> >
> > rc = scanf("%" xstr(LENGTH) "[^\n]%*[^\n]", array);
> ^
> Just a query, should we not write "[^\n]%*1[^\n]", instead?
No.
That's supposed to eat *all*
of the line characters which exceded LENGTH, if there are any,
up to but not including the newline.
> On my gcc (4.0.0)
> it keeps waiting if I don't specify the length.
> > if (!feof(stdin)) {
> > getchar();
> > }
> > if (rc == 0) {
> > *array = '\0';
> > }
> >
> > /* rc will be either 1, 0, or EOF */
> Neat, really very neat!
/* BEGIN new.c */
#include <stdio.h>
#include <stdlib.h>
#define LENGTH 30
#define str(x) # x
#define xstr(x) str(x)
int main(void)
{
int rc;
char string[LENGTH + 1];
fputs("Enter a string with spaces:", stdout);
fflush(stdout);
rc = scanf("%" xstr(LENGTH) "[^\n]%*[^\n]", string);
if (!feof(stdin)) {
getchar();
}
while (rc == 1) {
printf("Your string is:%s\n\n"
"Hit the Enter key to end,\nor enter "
"another string to continue:", string);
fflush(stdout);
rc = scanf("%" xstr(LENGTH) "[^\n]%*[^\n]", string);
if (!feof(stdin)) {
getchar();
}
}
return 0;
}
/* END new.c */
--
pete
.
- References:
- reading a line through scanf
- From: gyan
- Re: reading a line through scanf
- From: pete
- Re: reading a line through scanf
- From: Suman
- reading a line through scanf
- Prev by Date: Re: C directives
- Next by Date: Re: reading a line through scanf
- Previous by thread: Re: reading a line through scanf
- Next by thread: Re: reading a line through scanf
- Index(es):
Relevant Pages
|