我必须找到两个没有数组的最小数字

时间:2017-04-05 09:43:24

标签: c do-while

基本上我在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 个答案:

答案 0 :(得分:3)

您需要添加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;
}

答案 1 :(得分:0)

您可以使用两个变量来完成您需要的操作

#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
  5. 中的scanf