2017-04-05 34 views
-1

所以基本上我在C中有這個分配,我必須輸入數字,直到輸入0,然後輸入0,我必須打印所有數字的第一個和第二個最小數字,我不能使用數組。我得到,我必須使用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); 
+1

除非允許添加更多變量,否則無法完成 –

+2

您需要其他2個變量來執行所需操作。 – LPs

+0

_if loops _....沒有任何意義... – LPs

回答

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

這個INT_MAX意味着什麼,就像是一個固定值? –

+0

完全相同的解決方案;)順便說一句,爲什麼'<='? ?我t hink OP想要整個集合中的最小值,我想可以忽略重複的數字。 – LPs

+0

我相信它必須是'<',因爲如果你輸入2次相同的數字,它會變得最小,second_smallest這是錯誤的,我猜。 – tilz0R

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_MAXint類型。
  2. 對於每個循環,您必須測試是否輸入數字是最小值
  3. 您必須檢查用戶輸入是否有效:檢查scanf返回值。
  4. 刪除\n的格式字符串爲scanf
+1

是的,相當相同的解決方案;)我也會+1你包括像'limits.h'和改進的'scanf'處理 – 4386427

相關問題