Я пытаюсь написать программу для моего класса C, которая отслеживает депозиты, сделанные в банке. Он дает вам меню с опциями для ввода депозита, отображения суммы всех депозитов, показа депозитов от самого высокого к самому низкому (с использованием пузырьковой сортировки), показа среднего депозита, отображения самого низкого депозита, а затем вариант выхода. . Насколько я могу судить, параметры ввода, суммирования и выхода работают нормально, но три других параметра не работают. Когда вы выбираете их, независимо от того, какие входные данные вы внесли в массив, он действует так, как будто все они равны нулю. Это то, что у меня есть до сих пор:
#include <stdlib.h>
#include <stdio.h>
int main()
{
int sortCount, sortCount2, sortCount3, swap;// variables for sort
int depositCount = 0, sumCount, lowestCount;
int averageCount, avgSum = 0, avg; //variables for average
char switchInput = 0;//menu input
double deposits[100] = { 0 }, sum = 0, average;
do
{
printf("BANKING MAIN MENU\n\n");
printf("[M]ake a new deposit\n");
printf("[S]um of all deposits\n");
printf("[D]eposits will be displayed from highest to lowest\n");
printf("[A]verage of all deposits\n");
printf("[L]owest deposit will be displayed\n");
printf("[Q]uit\n\n");
printf("Please enter selection:\n\n");
scanf(" %c", &switchInput);
switch (switchInput)
{
case 'm': case 'M'://Deposit screen
printf("\nPlease enter deposit:\n\n");
scanf("%lf", &deposits[depositCount++]);//deposit input
;
for (sortCount = 0; sortCount < depositCount; sortCount++)//Should sort the array highest to lowest
for (sortCount2 = 0; sortCount2 < depositCount - sortCount - 1; sortCount2++)
if (deposits[sortCount] < deposits[sortCount+1])
{
swap = deposits[sortCount];
deposits[sortCount] = deposits[sortCount+1];
deposits[sortCount+1] = swap;
}
break;
case 's': case 'S'://Total of deposits screen
for (sumCount = 0; sumCount < depositCount; sumCount++)//depositCount should have it only use parts of the array where there are inputs.
sum = sum + deposits[sumCount];
printf("\nYour total deposits equal $%.2lf\n\n", sum);
break;
case 'd': case 'D'://Highest to lowest screen
for (sortCount3 = 0; sortCount3 < depositCount; sortCount3++)//depositCount should have it only use parts of the array where there are inputs.
{
printf("$%d \n", deposits[sortCount3]);
}
break;
case 'a': case 'A'://Average screen
for (sumCount = 0; sumCount < depositCount; sumCount++) //depositCount should have it only use parts of the array where there are inputs.
{
avgSum = avgSum + deposits[sumCount];
avg = avgSum / depositCount;
}
printf("Your average deposit is $%.2lf.\n", avg);
break;
case 'l': case 'L'://Lowest screen
printf("The lowest deposit is $%.2lf.\n", deposits[depositCount]);//If the numbers are ordered from highest to lowest, the then entry in the array at the position equal to the number of deposits should be the lowest
break;
case 'q': case 'Q'://quit screen
printf("\nThank you for using our bank!\n\n");
system("pause");
return 0;
break;
default ://invalid option
printf("\nInvalid selection!\n\n");
}
} while (switchInput != 'q'||'Q');
}
относительно: } while (switchInput != 'q'||'Q'); В C можно проверять только одну вещь за раз. Так что это лучше было бы записать как: } while (switchInput != 'q'|| switchInput == 'Q');, еще лучше было бы использовать tolower() из заголовочного файла; ctype.h, затем напишите: } while ( tolower( switchInput ) != 'q' ););
Пузырьковая сортировка не работает с петлями for. Пожалуйста, погуглите "пузырьковая сортировка".
@PaulOgilvie, что ты имеешь в виду? пузырьковая сортировка в основном представляет собой за, вложенный в другой
@ user3629249 должен быть } while (switchInput != 'q' && switchInput != 'Q'); ^^
@ Бруно, пузырь не использует циклы. Он использует циклы while, которые могут использовать некоторые аспекты эффективности вместо простого повторения уже отсортированных частей.
@Bruno, точнее, он использует внешний цикл while (k>0), где k является позицией последнего обмена (все более высокие элементы сортируются) и внутренний цикл for (i=0; i<k; i++) до этого k. См. также Википедию.
@PaulOgilvie ах, хорошо, я неправильно понимаю, для меня «сортировка пузырьком не работает с циклами for». означает дать неверный результат, используя for-loops ;-)





Bubble sort is not sorting array properly in c
в
for (sortCount = 0; sortCount < depositCount; sortCount++)//Should sort the array highest to lowest for (sortCount2 = 0; sortCount2 < depositCount - sortCount - 1; sortCount2++) if (deposits[sortCount] < deposits[sortCount+1]) { swap = deposits[sortCount]; deposits[sortCount] = deposits[sortCount+1]; deposits[sortCount+1] = swap; }
sortCount2 не используется внутри внутреннего за, где вы всегда делаете одно и то же независимо от него. Кроме того, вы идете на 1 индекс после последнего
На S.O. существует множество реализаций пузырьковой сортировки. Я разрешаю вам искать и исправлять
менять должен быть двойной
в
case 'a': case 'A'://Average screen for (sumCount = 0; sumCount < depositCount; sumCount++) //depositCount should have it only use parts of the array where there are inputs. { avgSum = avgSum + deposits[sumCount]; avg = avgSum / depositCount; }
деление должно производиться после сумм, нет каждый раз, поэтому
case 'a': case 'A'://Average screen
for (sumCount = 0; sumCount < depositCount; sumCount++) //depositCount should have it only use parts of the array where there are inputs.
{
avgSum = avgSum + deposits[sumCount];
}
avg = avgSum / depositCount;
а средняя сумма и среднее должны быть двойной
while (switchInput != 'q'||'Q');
должно быть
while ((switchInput != 'q') && (switchInput != 'Q'));
размещенный код не компилируется! При компиляции всегда включайте предупреждения, а затем исправьте эти предупреждения. (для
gcc, при минимальном использовании:-Wall -Wextra -Wcnversion -pedantic -std=gnu11) Примечание: другие компиляторы используют другие параметры для получения тех же результатов.