HOW TO SCAN MULTIPLE TIMES USING while()?????

jose_peeterson's Avatar, Join Date: May 2011
Contributor
Code:
//hi experts,
  //              i can't get the following code to read in  multiple times after the 
"more(y/n)" printout. it does not scan a second time it just exists the loop after just once 
//can you please fix the bug in this simple program.

char op = 'y';

while(op == 'y') 
 {    
  printf("Enter formula: ");
  scanf("%s",molecule);
 
  l = strlen(molecule);

  calc_weight(element,s,molecule,l);
 
 printf("More? (y/n) : "); // THIS DOES NOT WORK???
 scanf("%c",&op);       //      WHY???????

 }
 

return 0;    
    
}

Last edited by shabbir; 27Jun2011 at 21:30.. Reason: Code blocks
0
shabbir's Avatar, Join Date: Jul 2004
Go4Expert Founder
Use fflush before the scanf and that should work.
0
priyatendulkar's Avatar, Join Date: Jun 2011
Go4Expert Member
The issue is in scanf
scanf reads the input after enter/return key is pressed.But the newline generated by it is not consumed by scanf.Hence next time when scanf reads the input it reads newline instead of your input.

I tried using fflush on my Linux system..2.6.9-22.EL..But it doesnt seem to work

Alternative solution could be as under:
U can use scanf as
scanf("%c%*c",&op);
In this case scanf will read the newline and discard it
0
xpi0t0s's Avatar, Join Date: Aug 2004
Mentor
scanf is a crap way of getting user input. Use fgets instead and parse the string.
0
jose_peeterson's Avatar, Join Date: May 2011
Contributor
hi thanks for replies BUT priyatendulkers method reads a second time but when it reaches the condition in the while loop it fails and exits the loop even after typing y.
please help me
thanks
0
xpi0t0s's Avatar, Join Date: Aug 2004
Mentor
After using fgets you can still use sscanf if you really want to. But writing parsing code yourself is better; user input is usually not rigidly formatted enough for the scanf family to handle it. You'll need to know about the family of functions that includes atoi() (ascii to integer).
0
priyatendulkar's Avatar, Join Date: Jun 2011
Go4Expert Member
It fails as u might have not modified
scanf("%s",molecule);

Even here u'll need to consider the same

scanf("%s%*c",molecule);

Use the above method if u still wish to use scanf...

Else u can use fgets instead as suggested by xpi0t0s which would be a better approach