Take a look at gets() reference
Get string from stdin
Reads characters from the standard input (stdin) and stores them as a C string into str until a newline character or the end-of-file is reached.
The newline character, if found, is not copied into str.
A terminating null character is automatically appended after the characters copied to str.
Notice that gets is quite different from fgets: not only gets uses stdin as source, but it does not include the ending newline character in the resulting string and does not allow to specify a maximum size for str (which can lead to buffer overflows).
So, basically gets() is not only unsafe (can lead to buffer overflows) but also reads what's in the input buffer.
I recommend you to use fgets(), but if you want a quick (and lazy and stupid) solution, just flush the input buffer:
char name[13]; printf("Profile name: "); fflush(stdin); gets(name); printf("\n%s", name);
'\0'.fgets(name, sizeof name, stdin)instead ofgets()issue is answered many times see one of the answer stackoverflow.com/questions/7231349/…scanffor reading strings either. Just usefgets.scanfformat to make it consume any white-space (such as the trailing new-line) in the input. But don't quote me on that.