2014-10-27 4 views
0

Я пытаюсь создать простую программу, в которой хранятся десять «домашних животных» в массив. Каждый элемент содержит данные, к которым необходимо получить доступ через функции. По какой-то причине это, похоже, не работает так, как я ожидал. Кто-нибудь знает, почему программа запрашивает имя, а затем запускает оставшуюся часть программы, не запрашивая пользователя снова?Программа C с использованием структур не работает должным образом

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

struct Pet { 
    char name[50];   //name 
    char type[50];   //type 
    char owner[50];   //owner 
}; 

void setPetName(struct Pet *pet, char *name){ 
    memcpy(pet->name,name, 50); 
} 

void setPetType(struct Pet *pet, char *type){ 
    memcpy(pet->type,type, 50); 
} 

void setOwner(struct Pet *pet, char *owner){ 
    memcpy(pet->owner,owner, 50); 
} 

char* getName(struct Pet *pet){ 
    return pet->name; 
} 

char* getType(struct Pet *pet){ 
    return pet->type; 
} 

char* getOwner(struct Pet *pet){ 
    return pet->owner; 
} 

void printPetInfo(struct Pet *pet){ 
    printf("Pet's name is %s, Pet's type is %s, Pet's owner is %s", pet->name, pet->type, pet->owner); 
} 

int main(){ 

    struct Pet Pets[9]; 
    int index; 

    char name[50], type[50], owner[50]; 
    for (index=0; index<9; index++){ 
     struct Pet pet; 
     printf("Please enter pet's name "); 
     scanf("%s\n", name); 
     setPetName(&pet, name); 
     printf("Please enter pet's type "); 
     scanf("%s\n", type); 
     setPetType(&pet, type); 
     printf("Please enter pet's owner "); 
     scanf("%s\n", owner); 
     setOwner(&pet, owner); 
     printPetInfo(&pet); 
     Pets[index]=pet; 
    } 

    return 0; 
} 
+0

Вы не используете свой массив для домашних животных. – MTilsted

+0

Проблема scanf - это еще одна проблема. Ответил здесь: http://stackoverflow.com/questions/9562218/c-multiple-scanfs-when-i-enter-in-a-value-for-one-scanf-it-skips-the-second-s – McKracken

+0

Все функция принимает 'struct Pet pet' и должна принимать' struct Pet * pet'. Все в c передается по значению, поэтому структура почти всегда должна быть передана с помощью указателя. –

ответ

2

Во-первых, вы не можете держать строку в полукокса:

char name, type, owner; 

Вместо этого вам нужно массив символьного типа (т.е. char name[50];, например)

Затем формат для сканирования строки является %s, не &s

scanf("&s\n", name); 

И FINA Если вы хотите напечатать строку, используйте формат %s, а не %c (%c - это печать одного символа).

+0

Я внес эти изменения, однако это привело к возникновению других проблем типа. Обновленный код отражает изменения, которые вы также указали? – user3451026

+0

Да, это улучшается. Но поскольку вы изменили тип (например, getName и т. д.), вы также забыли исправить строку 'char name, type, owner; ' – kyflare

+0

Итак, теперь программа компилируется, но она по-прежнему зависает после запроса пользователь для имени первого домашнего животного – user3451026

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