Here\'s a small program:
#include
int main() {
char str[21], choice[21]; int size;
while(1){
printf(\"$ \");
fgets(str, 20, stdin);
Use a 'char' of a specific size char choice [1]
OR
char c[1];
c = getchar();
if(c[0] == 'y' || c[1] == 'y'){
// DO SOMETHING
}
As described in other answer scanf
call leaves the newline in the input buffer you can also use getchar()
after scanf like this :
scanf("%20s", choice);// always remember( & good) to include field width
// in scanf while reading
Strings otherwise it will overwrite buffer in case of large strings `
getchar(); //this will eat up the newline
Besides , you should also use fgets like this :
fgets(str,sizeof str, stdin); //Its better
It because the scanf
call reads a character, but leaves the newline in the buffer. So when you next time call fgets
is finds that one newline character and reads it resulting in an empty line being read.
The solution is deceptively simple: Put a space after the format in the scanf
call:
scanf("%s ", choice);
/* ^ */
/* | */
/* Note space */
This will cause scanf
to read and discard all training whitespace, including newlines.