Thread overview
help with: scanf("%.*s", a[])
Jun 01, 2003
Andrew Edwards
Jun 01, 2003
Andrew Edwards
June 01, 2003
Hello everyone!
I'd first like to say that I'm quite impressed at the
work that has gone on since I disappeared in February.
Kudos on a job well done! I'd also like to thank and
apologize to everyone that responded to my request
for aid on my "Unicode: Japanese Study Program".
I have not had the time, until now to even look at your
responses. To everyone that has emailed me about
working on a D Tutorial, I'm sorry that I couldn't get
back to you.

My Excuse: The Marines called and I had to run.
Just returned on Friday! (Probably lame...but true!)

Now! The nature of my problem.
I'm trying to accomplish the following:

import stream;
int main()
{
  char[] a = "Hello! Welcome to D!";
  printf("%.*s\n", a);
  printf("What did you say your name was again? ");
  scanf("%.*s", a); // &a doesn't work either
  printf("Well %.*s, I wish you the best of luck!", a);
  return 0;
}

D output:
Hello! Welcome to D!
What did you say your name was again? Andrew
Well Hello! Welcome to D!, I wish you the best of luck!
-------------------------------------------------------------

Review of stream.d reveals the following definition
for scanf().

 int scanf(char[] format, ...)
 {
  va_list ap;
  ap = cast(va_list) &format;
  ap += format.size;
  return vscanf(format, ap);
 }

This how vscanf() handles 'D'  strings

 // D string?
 bit dstr = false;
 if (fmt[i] == ".")
 {
  i++;
  if (fmt[i] == "*")
  {
   dstr = true;
   i++;
  }
 }

  if (dstr) // D string (char[])
   *cast(char[]*)*arg = s;
  else  // C string (char*)
  {
   s ~= 0;
   (cast(char*)*arg)[0 .. s.length] = s[];
  }

-------------------------------------------------------------

I'm not sure if it's something I'm doing wrong or
something wrong with the scanf()/vscanf() implementation.

Please advise.


June 01, 2003
"Andrew Edwards" <edwardsac@spamfreeusa.com> escribió en el mensaje
news:bbbh1p$2ut5$1@digitaldaemon.com...
| Hello everyone!

Hi, welcome back.

|   scanf("%.*s", a); // &a doesn't work either

I think this should be stream.scanf, but it doesn't work either. Why don't you read a 0-terminated string and copy it to "a"? Or maybe you could use gets instead of scanf.

————————————————————————— Carlos Santander


---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.486 / Virus Database: 284 - Release Date: 2003-05-29


June 01, 2003
"Carlos Santander B." <carlos8294@msn.com> wrote in message news:bbblun$22g$1@digitaldaemon.com...
> "Andrew Edwards" <edwardsac@spamfreeusa.com> escribió en el mensaje news:bbbh1p$2ut5$1@digitaldaemon.com...

> Hi, welcome back.

Thanks!

> I think this should be stream.scanf, but it doesn't work either. Why don't you read a 0-terminated string and copy it to "a"? Or maybe you could use gets instead of scanf.

After I import stream, I didn't think I have to clarify which scanf I'm
trying to
use. As for the 0-terminated strings and gets, I'm not interested in using C
functions, because I don't know C.

Stream.d seams to address the use of scanf for D strings, so I'd like to
learn it
the D way.