如何保存...在C中的状态/进度?

时间:2015-05-26 18:20:58

标签: c do-while

我写了这个程序,它返回用户插入的最大整数。现在,我希望程序返回第二大整数。我创建了一个新变量(称为“状态”),每次循环重复时,该变量应该增加1个单位。然后,在中断条件发生后,我将退回状态变量中的1个单位,以便检索第二个最大数字。我想按照这种想法(如果它在C中可靠),我问你的伙伴我目前的实施有什么问题。

#include <stdio.h>
int main()
{
    int x, tmp=0, status=0, bigger;
    printf("Insert numbers:\n");

    do{
        status+=1;
        scanf("%d", &x);
        if (tmp>=x)
            bigger=tmp; 
        else {
            bigger=x;
            tmp=x;
        }
    }while (x!=0);  

    status-=1;
    printf("The second biggest number is %d.\n", bigger);
    return 0;
}

2 个答案:

答案 0 :(得分:1)

如果您只需要两个最大的整数,则可以在每次迭代中保存它们,这样您就拥有maxmax2值:

#include <stdio.h>
int main()
{
    int x, max=0, max2=0;
    printf("Insert numbers:\n");

    do {
        scanf("%d", &x);
        if (x > max) {
            max2 = max; // Save the previous max, as the second largest value
            max = x ;   // Save the new max
        }
        else if (x > max2) {
            max2 = x;    // The input is not max, but greater than second max
        }
    }while (x!=0);  

    printf("The second biggest number is %d.\n", max2);
    return 0;
}

答案 1 :(得分:0)

代码中的状态只是一个计数器。要解决您的问题:

  • 使用数组存储所有数据。
  • 制作变量并测试它是否与最大且大于所有其他条目
  • 不同

试试这个:

int main()
{
    int x, status=0, bigger=0, secondbigger=0, Array[50];
    while(true){
        scanf("%d",&x)

        if(x==0)break;

        Array[status]=x;
        status++;
    }

    for(i=0;i<status-1;i++){
        if(Array[i]>bigger) bigger=Array[i];
    }
    for(i=0;i<status-1;i++){
        if(Array[i]>secondbigger && Array[i]!=bigger) secondbigger=Array[i];
    }

    printf("The second biggest number is %d.\n", secondbigger);
    return 0;
}