C Программа завершается с -1 (0xFFFFFFFF), казалось бы, нет причин? - PullRequest
1 голос
/ 24 октября 2010
#include <stdio.h>
typedef struct pduct {char name[20];
                        int price;
                        int stock;} PRODUCT;

void init(PRODUCT * product)
{
    printf("What is the name of the product: ");
    fgets(product->name, 20, stdin);
    printf("DEBUG: Did it get written...: %s", product->name);
    printf("What is the current stock of the item: ");
    scanf("%d", product->stock);
    printf("What is the price of the new item: ");
    scanf("%d", product->price);
}

int main()
{
    PRODUCT products[5];
    init(products);
    return 0;
}

Теперь я немного растерялся, правда. После этого он запросит название продукта, распечатает его, чтобы я знал, что он сохранил его, а затем запросит сумму запаса, где он рухнет и вернет -1.

Понятия не имею, что происходит не так. Я пытался заменить fgets на scanf, просто чтобы быть уверенным, но происходит то же самое. Я предполагаю, что мой struct настроен неправильно, но я не знаю как. Возможно, это массив char? Кроме того, это всегда второй вход, независимо от того, как я их расположил. Так почему же первая работает так хорошо?

Спасибо за любую помощь!

Ответы [ 3 ]

10 голосов
/ 24 октября 2010

Одна быстрая ошибка, которую я вижу, отсутствует & в scanf.

scanf("%d", &product->stock);
            ^
scanf("%d", &product->price);
            ^

Компилятор предупреждает вас о таких ошибках:

warning: format ‘%d’ expects type ‘int *’, but argument 2 has type ‘int’

Не игнорируйте компиляторпредупреждения.

1 голос
/ 24 октября 2010

scanf получает указатель на то место, где вы храните результат.В этом случае вы используете текущее (неинициализированное) значение акции в качестве адреса, куда следует записать результат сканирования.Вам нужно сказать scanf("%d", &product->stock) и т. Д.

1 голос
/ 24 октября 2010

Вам необходимо передать адрес product->stock. То есть:

scanf("%d", &product->stock);
...