2015-11-26 2 views
0

Он просит создать хэш-функцию, которая превращает почтовый индекс в целое число, суммируя его символы. Это мой код. Я еще не добрался до хэш-функции.Структуры, используемые для хранения почтовых индексов

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
typedef struct PostalCode 
{ 
    int size; 
    char *array[6]; 
} PostalCode; 

int main() 
{ 
int size = 6, i; 
PostalCode *h = malloc(sizeof(PostalCode)); 
h->size = size; 
h->array = malloc(sizeof(char)*size); 

printf("Please enter your postal code: \n"); 

for (i=0; i<6; i++) 
    scanf(" %c", &(h->array[i])); 
} 

И ошибки, которые я получаю сейчас: postalcode.c: 9: 11: ошибка: назначение выражения с типом массива h-> массив = таНос (SizeOf (Char) * размер);

+0

Вы объявляете имя переменной с типом данных 'Postalcode' –

+0

' char * array [6]; '->' char array [6]; '' scanf ("% c", & (h-> array [i])); TTFN – chux

+0

Я все еще получаю ту же ошибку, я получаю, что мне нужны% c и & # – Michael

ответ

1

Линия

char *array[6] 

объявляет массив из 6 указателей на Чаре, и это не то, что вы хотите здесь. Вы можете просто сделать его

char * array 

и устранить ошибку таким образом, или последовать совету chux, то есть у

char array[6] 

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

Несколько других предложения:

Если ваш почтовый код всегда 6 символов, то вы на самом деле не нужна структура PostalCode, если вы не планируете держать некоторую другую информации о почтовом коде нет. Вы можете просто сделать

typedef char PostalCode[6]; 

Конечно, если вы ожидаете, почтовые индексы, чтобы иметь переменную длину, то размер может помочь.

Независимо от того, хотите ли вы структурировать или typedef массив символов, жесткое кодирование значения 6 является плохой идеей. Если это всегда 6 символов, то вы можете #define; или если вы сохраните размер в структуре, то убедитесь, что вы его инициализировали и используете элемент struct вместо литерального номера 6.

Здесь нет необходимости динамически выделять память, но если вы действительно убедитесь, что вы бесплатно Это.

Удачи вам!

+0

Прежде всего, спасибо за массив char *; совет. Однако после того, как я исправил это, появились новые ошибки: «./postalcode.c ./postalcode.c: строка 2: $ '\ r': команда не найдена ./postalcode.c: строка 3: синтаксическая ошибка возле неожиданного токена '('' /postalcode.c: строка 3:' void main() " Кроме того, единственная причина, по которой я использую структуру, - это то, что мой проф попросил нас сделать это путь для практики, иначе я полностью понимаю, что это необязательно. – Michael

+0

Я думаю, что теперь вы получаете ошибки, потому что пытаетесь запустить postalcode.c в качестве сценария оболочки. Вам нужно скомпилировать исходный код и выполнить исполняемый двоичный файл. – OmniProg

Смежные вопросы