2015-01-11 10 views
-2

Я очень новичок в C. Мне нужно немного что-то сделать, но я не смог преодолеть эту проблему.Почему моя программа рушится?

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

#include<stdio.h> 

main() 
{ 
    char *name; 
    printf("\nName your pet.\n"); 
    scanf("%s", name); 

    int hunger = 5; 
    int time = 0; 
    int loop = 0; 
    int day = 1; 
    int happiness = 40; 
    int health = 100; 
    int tired = 0; 
    int option; 

    while(loop < 1){ 
    printf("\n\nDay %i\ntime = %i\n\n",day,time); 
    printf("1 - check\n2 - interact\n3 - go out\n4 - inventory\n\n"); 
    scanf("\n%i",&option); 
     if (option == 1) { 
      if (tired >= 90){ 
       printf("\n %s is struggling to stay awake", name); 
      } 
      else if (tired >= 75){ 
       printf("\n %s looks really tired", name); 
      } 
      else if (tired >= 50){ 
       printf("\n %s is starting to seem a little sleepy", name); 
      } 
      else if ((tired <= 10)&&(hunger < 50)){ 
       printf("\n %s is full of energy", name); 
      } 




      time = time - 1; 

     } 




    time = time + 1; 
    if (10<=time){ 
     day = day + 1; 
     time = 0; 
     tired = 0; 
     printf("Goodnight!/n"); 
     } 
    } 
} 
+0

Вы не сказали, где он падает, но вы инициализировали имя? –

+0

Можете ли вы описать конкретную ошибку? Любая идея, где это происходит? Просто выставляя код, вы просите сообщество отладить его для вас - не получится. – paisanco

+0

, если вы хотите изучить C, я рекомендую вам также начать изучать gdb/valgrind, а также посмотреть http://c.learncodethehardway.org/ – roger

ответ

1

Он врезается на этой линии: scanf("%s", name);, потому что name не инициализируется, поэтому вы не можете передать его scanf.

Инициализировать name например. вот так: char *name = malloc(sizeof(char) * 20);, так что теперь строка с 20 символами помещается в name.

+0

Большое спасибо! Я пока не полностью понимаю строковые переменные, но это делает работу! – Argy

+0

Рад, что я мог бы помочь! –

0

В вашем коде name есть char*, что означает, что это указатель на char. Поскольку вы не выделили память или не указали действительный адрес для указателя, он указывает на неизвестное местоположение. Написание этого места - вот что вызвало крах.

Чтобы это исправить, либо изменить

char *name; 

Для

char name[100]; 

Или выделить память динамически, используя в качестве mallocsuggested by @returntrue.

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