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
shabbir's Avatar, Join Date: Jul 2004
Go4Expert Founder
Use fflush before the scanf and that should work.
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
xpi0t0s's Avatar, Join Date: Aug 2004
Mentor
scanf is a crap way of getting user input. Use fgets instead and parse the string.
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
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).
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