Во-первых, компоновка кода очень запутанная, и в ее нынешнем виде она никогда не будет компилироваться.У вас есть функция input()
, которую вы, кажется, никогда не вызываете, и вы оставляете код вне функции, который должен находиться внутри другой функции, или, что еще лучше, все это должно содержаться внутри функции main()
, чтобы ее можно было выполнить,Вот очищенный пример того, что вы хотите сделать:
#include <stdio.h>
char in[80],out[80];
int main()
{
printf("Client: ");
scanf("%[^\n]",in); //you really should use fgets() here
FILE* fp = fopen("test.txt","w");
if (!fp)
{
perror("Failed to open file");
return 1;
}
fputs(in,fp);
fputs("\n",fp);
fclose(fp);
fp = fopen("test.txt","r");
if (!fp)
{
perror("Failed to open file");
return 1;
}
fgets(out,80,fp);
fclose(fp);
fp = fopen("test.txt","a+");
if (!fp)
{
perror("Failed to open file");
return 1;
}
if (strcmp ("Knock Knock\n",out)==0)
fputs("Server: Who is there?\n",fp);
return 0;
}
Некоторые важные замечания:
1) fp
имеет тип файла FILE*
, так какэто возвращение fopen()
, но вы никогда не объявляете его таковым.Так что это никогда не скомпилируется с этой ошибкой.
2) Каждый раз, когда вы открываете файл с флагом w
, он стирает все содержимое файла.Так что, если вы намеревались добавить в файл историю того, как вы выводили из вашей программы, вам нужно использовать флаг a+
при вызове fopen()
3) Было бы неплоховыведите распечатку ошибки, если вам не удалось открыть файл, вместо того, чтобы почесать голову, почему «test.txt» пуст после того, как программа взяла ввод из stdin
.Также, если вы собираетесь продолжать открывать файл, проверяйте NULL каждый раз, так как вы собираетесь получить непредсказуемые результаты при попытке работать с указателем файла NULL (скорее всего, сбой).
4) scanf()
может привести к неприятным переполнениям буфера от ввода пользователя (или злонамеренного ввода пользователя) ... вместо этого используйте fgets()
с stdin
для буфера известной длины.
Youдолжен быть в состоянии скомпилировать этот код сейчас и запустить его.У меня работает с gcc 4.4.3 на Ubuntu.После запуска ваш файл «test.txt» должен выглядеть следующим образом:
Knock Knock
Server: Who is there?