Я работаю над назначением C для школы, и задание просит нас использовать эту специальную сигнатуру функции, которая вызывает ошибки для моего компилятора.Проблемы с сигнатурой функции C
Я получаю сообщение об ошибке из строки 38 (наименьшая сигнатура функции) в vector_test.c, ошибка читается «», «ожидается (получена« * »)». Это мой первый опыт работы в C, поэтому я думаю, что я должен делать что-то неправильно в отношении того, как я настроил typedef в types.h или что-то в этом роде, просто не совсем уверен и думал, что получу дополнительные мнения. Все, что вы могли бы указать на то, что я делаю неправильно, было бы полезно, спасибо!
Вот код:
vector_test.c
#include "types.h"
int smallest(const Vector3t, int);
void main (int argc, char *argv[]) {
unsigned int N = 0;
printf ("Number of elements ===>");
scanf ("%u", &N);
struct Vector3t points[N];
for (int i = 0; i < N; i++)
{
scanf("%d,%d,%d", &points[i].x, &points[i].y, &points[i].z);
}
for (int p = 0; p < N; p++)
{
printf("%i", points[p].x);
printf("%i", points[p].y);
printf("%i\n\n", points[p].z);
}
int result = smallest(points, N);
printf("%s", "The point closest to the origin is (");
printf("%i", points[result].x);
printf("%s", ", ");
printf("%i", points[result].y);
printf("%s", ", ");
printf("%i", points[result].z);
printf("%s", ")");
}
int smallest(const Vector3t* pts, int n)
{
int shortest = 99999999;
int shortIndex = -1;
for (int i = 0; i < n; i++)
{
int distance = pts[i].x + pts[i].y + pts[i].z;
if (distance < shortest)
{
shortest = distance;
shortIndex = i;
}
}
return shortIndex;
}
types.h
#ifndef types_H
#define types_H
struct vec3 {
int x;
int y;
int z;
};
typedef struct Vector3t {
int x;
int y;
int z;
} vec3;
#endif
Вот инструкции присваивания для этой конкретной части, так что вы можете увидеть, что я пытаюсь do:
1. Create a header file called “types.h” (with a macro guard)
a. In this header file, create a struct type called vec3 with int types: x, y, and z
b. Create a typedef to the struct vec3 above and call it Vector3t
2. Create a C source file called “vector_test.c”
a. This file should include “types.h” and any other C system includes you may need
b. Create a main function that does the following:
i. Prompts the user “Number of elements ===> “
ii. Read an unsigned int from the user – this variable will be referred to as N
iii. Create an array of Vector3t of size N and call it points
iv. Read in triples of int (comma separated) from the user to populate the entire array
v. Using the function signature: int smallest(const Vector3t* pts, int n), implement a
function that returns the index of the point that is the closest to the point (0, 0, 0)
vi. Call this function and store the index into an int called result
vii. Print out to the user “The point closest to the origin is (<x>, <y>, <z>)” where <x>, <y>, and <z>
correspond to the values of points[result]
viii. Free all allocated data
У вас нет типа 'Vector3t'. У вас есть 'struct vec3',' struct Vector3t', а ваш typedef последнего - 'vec3'. Вы не можете просто использовать имя типа struct без 'struct' впереди. – Dmitri
У вас первая точка вашего назначения неправильно. Таким образом, вторая часть недействительна. – DeiDei
Изменение моего кода typedef, чтобы выглядеть так, казалось, это трюк: typedef struct vec3 Vector3t; Спасибо за помощь! – Nyoxide