Re: [ROOT] Problem with reading character strings

From: Qingjun Liu (qjliu@gibbs.npl.washington.edu)
Date: Thu Mar 01 2001 - 19:17:53 MET


Hi,

	I have tried the following code, which worked fine.
However, when replaced scanf() with gets(), I ran into the
same problem as you reported.

void doit(){
        
	gROOT->Reset();
	char *as;
        as = new char [200];
        printf("enter your comments\n");
        scanf("%s",as);
        printf("Here is your comment: %s\n",as);

        int h;
        printf("New: enter hybrid serial number:");
        scanf("%d", &h);
        printf("You entered hybrid serial number, which is %d\n",h);
        delete [] as;
}

Qingjun
 *******************************************************************
 *Dr. Qingjun Liu                                                  *
 *CENPA                      Phone:     (206) 616-8141 (O)         * 
 *University of Washington              (206) 985-1666 (H)         *
 *P.O. Box 354290            Fax  :     (206) 685-4634             *
 *Seattle, WA 98195          Email: qjliu@gibbs.npl.washington.edu *
 *******************************************************************


On Thu, 1 Mar 2001, Craig Everton wrote:

> 
> 
> I've just recently started using Root. I'm having a lot of problems with
> what I thought would be very simple. One of my buttons calls the
> function scanner_new() which puts a few prompts at the command line for
> reading a serial number (integer) and a comment (string). See below;
> 
> void scanner_new(){
>   int h;
>   int i = 0;
>   char comment[200], a, cmt[200];
>   char a;
> 
>   printf("New: enter hybrid serial number:");
>   scanf("%d", &h);
> 
>   printf("Enter any comments:");
>   gets(comment);
> 
>   printf("The comment is : %s \n",comment);
>   
>   e->SetHybrid(h,comment);
>   e->ReadLastInfo();
>   e->ResetAll();
> }
> 
> There is no problem with reading in the hybrid number but the line
> 
> gets(comment);
> 
> is not recognized. There is no error message, the script just skips to the
> next line in the code. I thought that perhaps the stdio.h library may need
> to be included explicitely but adding the line 
> 
> G__loadfile("stdio.h") doesn't help.
> 
> 
> I've tried many fixes such as;
> 
> printf("Enter any comments:");
>   a=getchar();
>   while (a != "\n") {
>   a=getchar();
>   comment[i] = a;
>   putchar(a);
>   i++;
>   }
> 
> AND
> 
> printf("enter any comments");
> 
> while(cmt != "\n"){
> scanf("%s",cmt);
> strcat(comment, " ");
> strcat(comment, cmt);
> }
> 
> But "\n" and "\r" is never found so the while loop never exits.
> 
> I've also tried
> 
>  
>   cmt = new TString();
>   printf("Enter any comments:");
>   cmt->ReadString(comment);
> 
> 
> 
> But get the error
> 
> Can't call TString::ReadString(comment) in current scope
> 
> 
> I'd appreciate it if anyone could tell me where I'm going wrong.
> 
> Thanks in advance
> 
> 
> Craig
> 
> -======================================================
> Craig Everton
> Experimental Particle Physics (EPP)
> School of Physics 
> University of Melbourne,  Victoria
> AUSTRALIA    3010
> Phone : (work)   (613) 9344 5075		
>         (home)   (613) 9387 6726
> Fax :            (613) 9347 4783
> Email : everton@liszt.ph.unimelb.edu.au
> ======================================================
> 
> 
> 



This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:50:38 MET