Почему я получаю эту ошибку и предупреждение? Ошибка и предупреждение в описании - PullRequest
0 голосов
/ 19 марта 2019

У меня проблема, которую я не могу исправить. Я получаю сообщение об ошибке: ошибка: тип объекта int () не назначается читать = б; И предупреждение: предупреждение: несовместимый указатель на целочисленное преобразование, возвращающее 'int ()' из функции с типом результата 'int' [-Wint-преобразование] возврат прочитанного;

И я хочу вернуть значение b в main, и я хочу знать, почему оно не работает. Я надеюсь, что вы можете мне помочь. Вот код:

#include <stdio.h>
int read()
{
  FILE *fptr;
  char b;
  fptr = fopen("./chat.txt","r");

  if(fptr == NULL)
  {
    printf("Something went wrong");
  }

  b = fgetc(fptr);
  while(b != EOF)
  {
    printf ("%c", b);
    b = fgetc(fptr);
  }
  fclose(fptr);
  read = b;

  return read;
} 

Ответы [ 2 ]

2 голосов
/ 19 марта 2019

Ошибка совершенно правильная. Эта строка кода:

read = b;

пытается присвоить значение b, которое является char, read, которое является функцией, возвращающей int.

Удалить строку и просто вернуть b. Компилятор повысит значение char до int для вас. Или, что еще лучше, замените b на int, потому что, как вы, возможно, не знаете (но, как указывал выше программист), fgetc возвращает int.

0 голосов
/ 19 марта 2019

Как упоминалось в первом ответе Кристиана, вы пытаетесь присвоить имени вашей функции read значению b .

Вам просто нужно:

return b;

Глядя на ваш код, похоже, что он просто вернет EOF , поскольку это последнее значение, которое b будет иметь, прежде чем вернуться. Не знаю, зачем вам это нужно, поэтому подумал, что я упомяну это.

Вы можете немного улучшить его, используя do / while как:

do
{
    b = fgetc(fptr);
    printf ("%c", b);
} while( b != EOF );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...