Я должен найти два самых маленьких числа без массивов

Таким образом, в основном у меня есть это назначение в C, я должен вводить числа, пока не введу 0, а после того, как я введу 0, я должен напечатать номер 1-й и 2-й минуты из всех этих номеров, и я не могу использовать массивы. Я понял, что мне нужно использовать цикл do-while для ввода, но я не могу понять, как найти два наименьших из них. Я думаю, что это можно сделать с помощью циклов if, но я не знаю, как это сделать, поскольку у меня есть только одна переменная для ввода чисел в нее (int a). И при вводе у меня появляется ошибка при вводе 0, я могу ввести еще один номер до выхода из программы.

#include <stdio.h>

    int main() {

        int a;

        do {
            printf("Enter numbers: ");
            scanf("%d\n", &a);
        //what to do here
        }while(a != 0);

2 ответа

Решение

Вам нужно добавить 2 переменные, чтобы хранить наименьшие обнаруженные значения. подобно

int smallest = INT_MAX;
int second_smallest = INT_MAX;

Затем в цикле необходимо проверить, меньше ли новое входное значение, чем значения, сохраненные до сих пор. Что-то вроде:

if (a <= smallest)
{
    second_smallest = smallest;
    smallest = a;
}
else if (a < second_smallest)
{
    second_smallest = a;
}

Вы можете использовать две переменные, чтобы делать то, что вам нужно

#include <stdio.h>
#include <limits.h>

int main(void)
{

    int a = INT_MAX;
    int min_1 = INT_MAX;
    int min_2 = INT_MAX;

    int valid;

    do
    {
        if (a < min_1)
        {
            min_2 = min_1;
            min_1 = a;

        }
        else if (a < min_2)
        {
            min_2 = a;
        }

        printf("Enter numbers: ");
        valid = scanf("%d", &a);
    }
    while ((a != 0) && (valid == 1));

    if (valid == 1)
    {
        printf("Minimum numbers entered are: %d %d\n", min_1, min_2);
    }
    else
    {
        fprintf(stderr, "Error in data input\n");
    }
}

Так:

  1. использование limits.h определяет инициализировать минимальные переменные к наибольшему значению для int тип INT_MAX,
  2. для каждого цикла вы должны проверить, является ли введенное число минимальным
  3. Вы должны проверить, что пользовательский ввод действителен: проверить scanf возвращаемое значение
  4. Удалить \n в строке формата scanf,
Другие вопросы по тегам