Есть несколько проблем в вашей программе
- вы смешиваете получает и scanf ("% d") так, как было сказано в комментариях выполучит пустые строки
- использование получает опасно, потому что нет защиты от переполнения буфера, используйте fgets
- вы говорите Макс,12 символов но на самом деле это 11, потому что вам нужно место для завершающего нулевого символа
- вы не проверяете результат получает и scanf
- вы не проверяете результат fopen
- не является мягким, чтобы просить 0/1, пока цель Y / N
- получает (и fgets ) возвращает \ n при чтении, но вы, вероятно, не хотите его
Вот предложение, учитывающее предыдущие замечания:
#include <stdio.h>
#include <string.h>
int main()
{
char nameuser[12];
int userChoice;
printf("Name(Max. %d Characters): ", sizeof(nameuser) - 1);
if (fgets(nameuser, sizeof(nameuser), stdin) == NULL)
return 0;
char * p = strchr(nameuser, '\n');
if (p != NULL)
*p = 0;
for (;;) {
char messageuser[127];
printf("Message(Max. %d Characters): ", sizeof(messageuser) - 1);
if (fgets(messageuser, sizeof(messageuser), stdin) == NULL)
return 0;
if ((p = strchr(messageuser, '\n')) != NULL)
*p = 0;
FILE * fptr = fopen("chat.txt", "a");
if (fptr == NULL) {
printf("cannot open file");
return 0;
}
fprintf(fptr, "%s: %s\n", nameuser, messageuser);
fclose(fptr);
printf("Another Message? Y/N: ");
if ((fgets(messageuser, sizeof(messageuser), stdin) == NULL) ||
(*messageuser != 'Y'))
return 0;
}
}
Компиляция и выполнение:
pi@raspberrypi:/tmp $ gcc -pedantic -Wextra q.c
pi@raspberrypi:/tmp $ rm -f chat.txt
pi@raspberrypi:/tmp $ ./a.out
Name(Max. 11 Characters): me
Message(Max. 126 Characters): this is me
Another Message? Y/N: Y
Message(Max. 126 Characters): and nobody else
Another Message? Y/N: N
pi@raspberrypi:/tmp $ cat chat.txt
me: this is me
me: and nobody else
Примечание: я принимаю пустые имена и сообщения и пробелы в начале / конце, я позволю вам это исправить, иначе слишком просто ...