Как исправить ошибку сегментации для цикла while в c - PullRequest
0 голосов
/ 27 февраля 2019

Я работаю над заданием и пытаюсь написать код для ответа на этот вопрос:

Напишите программу, которая вычисляет общий вес груза.У пользователя есть много типов ящиков (пронумерованных от 1 до n).Для каждого типа ящика программа спрашивает пользователя о весе и количестве.Затем программа вычисляет и печатает общий вес груза.В приведенном ниже примере вывода у пользователя есть три типа ящиков.Для поля типа 2 пользователь вводит часовой -1, чтобы указать, что он завершил ввод.Ваша программа должна напечатать Тип 1, 2, 3 и т. Д., Как показано в выходных данных ниже.

Enter weight (lbs) of Type 1 box: 4
Enter quantity: 2
Enter weight (lbs) of Type 2 box: -1 
The total weight is 8 lbs.

Когда я запускаю этот код, он запускает первую строку для ввода веса, но затем дает мнеОшибка сегментации и говорит (ядро сброшено).-1 является часовым, и даже когда введенный вес находится внутри цикла while, результат остается тем же.Что я делаю неправильно?Извините, я новичок в C

#include <stdio.h>

int main()
{
    int weight; //weight of boxes
    int quantity; //number of boxes 
    int total_weight; //total weight
    int n = 1;

    printf("Enter weight (lbs) of Type %d box: ", n);
    scanf("%d", weight);
    while(weight!=-1) //Iterate loop until w=-1 
    {
        printf("Enter quantity: \n");
        scanf("%d", quantity);

        total_weight= total_weight + (quantity*weight);
        n++;
    }

    printf("The total weight is %0.2d", total_weight);
    return 0;


}

Ответы [ 3 ]

0 голосов
/ 27 февраля 2019
while(weight!=-1) //Iterate loop until w=-1 
{
printf("Enter quantity: \n");
scanf("%d", quantity);

total_weight= total_weight + (quantity*weight);
n++;
}

Проблема в состоянии условия, вес никогда не меняет своего значения, поэтому условие всегда выполняется, поэтому бесконечный цикл.

Исправьте это утверждение scanf("%d", &weight);

0 голосов
/ 27 февраля 2019

Ваша проблема в том, что вы пытаетесь присвоить значение указателю quantity и weight, вместо этого вам нужно поставить &quantity и &weight, также у вас нет другого ввода для веса, вы должнытакже используйте цикл do вместо цикла while.Это должно выглядеть так

#include <stdio.h>

int main()
{
int weight; //weight of boxes
int quantity; //number of boxes 
int total_weight; //total weight
int n = 1;
    do
    {
    printf("Enter weight (lbs) of Type %d box: ", n);
    scanf("%d", &weight);
    printf("Enter quantity: \n");
    scanf("%d", &quantity);

    total_weight= total_weight + (quantity*weight);
    n++;
}while (weight != -1);

printf("The total weight is %0.2d", total_weight);
return 0;

}

0 голосов
/ 27 февраля 2019

Это не то, как вы используете scanf

scanf("%d", weight);
scanf("%d", quantity);

Вы должны передать адрес переменной, а не значение переменной.

Это будет выглядеть так:

scanf("%d", &weight);
scanf("%d", &quantity);

Ваш цикл while зависит от значения weight.Значение weight никогда не изменяется в вашем цикле, поэтому цикл никогда не может выйти.


Эта строка:

total_weight= total_weight + (quantity*weight);

использует значение total_weight, которое былоникогда не инициализируется.
Вы должны инициализировать свои переменные.


В целом, я думаю, что ваш фиксированный код должен выглядеть следующим образом:
#include <stdio.h>

int main()
{
    int weight       = 0; //weight of boxes
    int quantity     = 0; //number of boxes 
    int total_weight = 0; //total weight
    int n            = 1;

    while(weight!=-1)
    {
        printf("Enter weight (lbs) of Type %d box: ", n);
        scanf("%d", &weight);        // Update weight **inside** the loop
        printf("Enter quantity: \n");
        scanf("%d", &quantity);

        total_weight= total_weight + (quantity*weight);
        n++;
    }

    printf("The total weight is %0.2d", total_weight);
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...