How can one flush input stream in C?

c, io, stdio, stream

Solution

Update: You need to add another getchar() at the end of your loop to consume the '\n' that follows the Y/N. I don't think this is the best way to go, but it will make your code work as it stands now.

while(another=='y') {
    printf("\nEnter name,age and basic salary : ");
    fgets(buf, BUF_SIZE, stdin);
    sscanf(buf, "%s %d %f", e.name, &e.age, &e.bs);
    fwrite(&e,sizeof(e),1,fp);
    printf("Add another record (Y/N)");
    another=getchar();
    getchar();
}

I would suggest reading the data you want to parse (up to and including the '\n') into a buffer and then parse it out using sscanf(). This way you consume the newline and you can perform other sanity checks on the data.

Problem

I am not able to flush stdin here, is there a way to flush it? If not then how to make `getchar()` to take a character as input from user, instead of a "\n" left by `scanf()` in the input buffer?? ``` #include "stdio.h" #include "stdlib.h" int main(int argc,char*argv[]) { FILE *fp; char another='y'; struct emp { char name[40]; int age; float bs; }; struct emp e; if(argc!=2) { printf("please write 1 target file name\n"); } fp=fopen(argv[1],"wb"); if(fp==NULL) { puts("cannot open file"); exit(1); } while(another=='y') { printf("\nEnter name,age and basic salary"); scanf("%s %d %f",e.name,&e.age,&e.bs); fwrite(&e,sizeof(e),1,fp); printf("Add another record (Y/N)"); fflush(stdin); another=getchar(); } fclose(fp); return 0; } ``` EDIT: updated code, still not working properly ``` #include "stdio.h" #include "stdlib.h" int main(int argc,char*argv[]) { FILE *fp; char another='y'; struct emp { char name[40]; int age; float bs; }; struct emp e; unsigned int const BUF_SIZE = 1024; char buf[BUF_SIZE]; if(argc!=2) { printf("please write 1 target file name\n"); } fp=fopen(argv[1],"wb"); if(fp==NULL) { puts("cannot open file"); exit(1); } while(another=='y') { printf("\nEnter name,age and basic salary : "); fgets(buf, BUF_SIZE, stdin); sscanf(buf, "%s %d %f", e.name, &e.age, &e.bs); fwrite(&e,sizeof(e),1,fp); printf("Add another record (Y/N)"); another=getchar(); } fclose(fp); return 0; } ``` Output: ``` dev@dev-laptop:~/Documents/c++_prac/google_int_prac$ ./a.out emp.dat Enter name,age and basic salary : deovrat 45 23 Add another record (Y/N)y Enter name,age and basic salary : Add another record (Y/N)y Enter name,age and basic salary : Add another record (Y/N) ```

Original source

Related problems