«Ошибка: ожидаемое выражение» продолжает возвращаться.Что я делаю неправильно? - PullRequest
0 голосов
/ 20 сентября 2019

Итак, я очень новичок в программировании на C и застрял.

Я пишу некоторый код, который читает определенные данные из файла (определяется моей функцией read_file).Одной из моих задач было также скрыть расстояние между двумя заданными точками (как видно из пустого расстояния) и преобразовать его в радианы (как видно по toRadian).

Однако проблема заключается в строке 48 (выделено в коде), где я получаю ошибку

": ожидаемое выражение chord_length = pow (sin (toRadian (lat_2 - LAT_1))/ 2) + cos (toRadian

program.c: 6: 15: примечание: расширен из макроса 'LAT_1'

определить LAT_1 −37.798185 "

ЧтоЯ сделал что-то не так? Я просто не могу разобраться.

Ответы [ 2 ]

1 голос
/ 20 сентября 2019

Вы вычитаете число с плавающей точкой из указателя (lat_2 - LAT_1).Это не имеет никакого смысла.

Также вы передаете его toRadian (), который принимает удвоение и ничего не возвращает ... все неправильно

0 голосов
/ 20 сентября 2019

Это несколько исправленная версия вашей программы.Компилируется почти без ошибок.

Внимательно читайте комментарии, начинающиеся с ***.

Возможно, ошибок больше, но это начало.

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#define LAT_1 -78.98214
#define LONG_1 -7.31600

#define R_PI 3.14159       // *** correct and put PI with more decimals
#define DEGREES 180

int read_file(int i);
double toRadian(double theta);   // *** correct declaration
double distance(double d);    // *** correct declaration

int main()
{
  int i = 0;
  return read_file(i);
}

double toRadian(double theta)
{
  double x;   // *** no need to initialize with 0
  x = R_PI / DEGREES;  // *** something is missing here: up to to find what
                       //     Hint: you need to use the theta parameter
  return x;
}

double distance(double d)   // ** correct prototype
{
  /* This function is designed to calculate the distance between the check-in
  POI and the reference point provided*/
  double dist, angle_distance, chord_length;
  double lat_2, long_2;  // *** double here

  char length[256];
  char* token[6];

  if (fgets(length, 256, stdin) != NULL)
  {
    token[0] = strtok(length, " ");
    int i = 0;
    double dist;
    for (i = 1; i < 6; i++)     // *** what's the purpose of this for loop???
    {
      lat_2 = atof(token[1]);   // *** using atof here
      long_2 = atof(token[2]);
    }

    chord_length = pow(sin(toRadian(lat_2 - LAT_1) / 2) + cos(toRadian
    (LAT_1)) * cos(toRadian(lat_2)) * pow(sin(toRadian(long_2 -
      LONG_1))));   // *** no idea what the formula should be , but pow needs 2 arguments

    angle_distance = 2 * atan2(sqrt(chord_length), sqrt(1 - chord_length)); // *** using chord_length

    dist = 6371 * angle_distance;   // *** using angle_distance
    return dist;    // *** the function must return something.
  }
}    // *** this } was missing

int read_file(int i)  // *** what's the purpose if the i parameter?
{
  /* This function takes the data from the input file,reading and printing the
  User ID, Location (longitude and latitude), Date, Time, and Distance*/
  char length[256];
  char* token[6];

  if (fgets(length, 256, stdin) != NULL)
  {
    token[0] = strtok(length, " ");
    int i = 0;
    double dist;
    for (i = 1; i < 6; i++)
      token[i] = strtok(NULL, " "); /*C programming is fun*/

    printf("Stage 1\n==========\n");
    printf("User: #%s\n", token[0]);
    printf("Location: <%s, %s>\n", token[1], token[2]);
    printf("Date: %s\n", token[3]);
    printf("Time: %s\n", token[4]);
    printf("Distance to reference: %2.2f\n", distance(dist));
  }
  else
  {
    printf("Error opening file. Check file and try again.");
     exit(EXIT_FAILURE);
  }
  return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...