以下程序妳的所有要求都滿足了,僅供參考:
#include <stdio.h>
const int N = 20;
int main()
{
int input, Max, Sec, i = 2;
printf("請輸入至少2個且不多於20個整數(退出請輸入0,多於2個時): \n");
while(i)
{
while(!scanf("%d", &input)) //阻止妳不配合地輸入字符,而不是數字
{
printf("輸入非法,請重新輸入...\n");
while(getchar() != '\n')
; //註意這個分號,為空操作
}
if(0 == input)
continue; //保證這組數至少有2兩個,且不為0
if(2 == i)
Max = Sec = input;
else if(Max < input) //此時其實Max = Sec
Max = input;
else
Sec = input;
i--;
}
if(Max == Sec)
printf("您已經有效輸入了2次,但沒有找到次大數,繼續...\n\n");
while(input && i++ < N - 2)
{
while(!scanf("%d", &input))
{
printf("輸入非法,請重新輸入...\n");
while(getchar() != '\n')
;
}
if(0 == input)
break; //輸入0結束
if(Max != Sec) //1Max與Sec不相等時(意味著 Max > Sec)
{
if(Max < input)
{
Sec = Max;
Max =input;
}
else if(Max == input)
; //Max = input 時不作任何處理,註意這個分號
else if(Sec < input)
Sec = input;
}
else if(Max < input) //2Max = Sec 時
Max = input;
else
Sec = input;
}
if(Max == Sec) //如果從壹開始就壹直輸入重復數
printf("很遺憾!最終還是沒有找到次大數,盡管您輸入了%d個有效數。Bye!\n\n", i + 1);
else
printf("您輸入了 %d 個有效數,其中次大數是:%d\n\n", i + 1, Sec);
return 0;
}