Я имею дело с этой проблемой: я создаю связанный список (используя структуру) и хочу загрузить ввод от пользователя. Когда я отлаживаю этот код, отладчик останавливается на строке scanf.

typedef struct Person{
char name[64];
int number;
} Person;

Person* record = malloc(sizeof(Person));
printf("Input name: \n");
scanf("%63s", record->name);

Я знаю, что (*record).number == record->number и '&' используется для получения адреса переменной, но я понятия не имею, как решить мою проблему самым простым способом, если я хочу использовать scanf для загрузки ввода .

Заранее спасибо.

1
Martin 13 Апр 2011 в 15:48
Без отладчика работает?
 – 
pmg
13 Апр 2011 в 15:56
Кажется, работает .. по мне.
 – 
Sadique
13 Апр 2011 в 15:57
2
Дело не только в том, что отладчик ждет вашего ввода?
 – 
fnokke
13 Апр 2011 в 15:58
Я использую Eclipse в Windows 7, и когда я запускаю программу, она работает и никогда не останавливается. Printf ничего не печатает (потому что в коде должна быть ошибка).
 – 
Martin
13 Апр 2011 в 16:03
1
Боде: как написано ниже, должно быть какое-то неожиданное поведение среды Eclipse, потому что другой код правильный.
 – 
Martin
13 Апр 2011 в 16:26

1 ответ

Когда программа отлаживается с помощью gdb и встречается оператор scanf, отладчик запрашивает ввод данных пользователем. Если вы введете ввод в этот момент и нажмете Enter, выполнение продолжится.

Например, 1. Если исходный код указан в имени файла «llist.c»

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

typedef struct Person{
char name[64];
int number;
} Person;

int main()
{

    Person* record = malloc(sizeof(Person));
    if(record == NULL)
    {
       printf("Memory allocation failed\n");
       return;
    }
    printf("Input name: \n");
    scanf("%63s", record->name);
    printf("Name %s\n", record -> name);
    return 0;
}

Скомпилируйте его, используя опцию отладки как

gcc -g -o список llist.c

  1. Запустите отладчик как gdb ./list и введите команду run, чтобы начать выполнение программы.
  2. При появлении запроса на ввод введите любую строку и нажмите Enter.
  3. Затем строка выводится на терминал.
1
Nallu 13 Апр 2011 в 16:11
1
Привет, это работает, но когда я пытаюсь запустить или отладить ту же программу в Eclipse, она не работает! Та же проблема. Поэтому я думаю, что между Eclipse и Win должно быть что-то не так.
 – 
Martin
13 Апр 2011 в 16:24