2013-07-28 87 views
0

這是我的代碼,我需要它先說出1-10個數字的數字,然後打印出它們是哪一個。它獲得的數量是正確的,但不是打印數字等於1-10,它打印前10個數字。C - 從間隔打印隨機數

#include <time.h> 
#include <stdlib.h> 
#include <stdio.h> 
int main() { 
    int i; 
    int br = 0, brr = 0, brrr = 0, br1 = 0; 
    int polje[50]; 
    srand(time(NULL)); 
    for(i = 0; i < 50; i++) { 
     polje[i] = rand() % 30 + 1; 
     printf("%d ", polje[i]); 
    } 
    printf("\n"); 
    for(i = 0; i < 50; i++) { 
     if(polje[i] >= 1 && polje[i] <= 10) 
      br++; 
    } 
    printf("Brojevi od 1 do 10 pojavljuju se %d puta a to su ", br); 

    do { 
     for(i = 0; i < 10; i++) 
      printf("%d ", polje[i]); 

    } while (polje[i] >= 1 && polje[i] <= 10); 

    return 0; 
} 
+1

請嘗試用英文變量名重寫 – tohava

+1

呃你的代碼看起來應該是打印前十個數字。 – CBIII

+1

你應該改變'rand()%30 + 1;'爲'(rand()%30)+ 1;'''''''',我不知道你在哪裏告訴它只打印1到10之間的數字。與'+' – higuaro

回答

1

...然後打印它們是哪些

如果您需要打印數字以相同的順序按它們出現在科索沃波爾陣列:

#include <time.h> 
#include <stdlib.h> 
#include <stdio.h> 
int main() { 
    int i; 
    int br = 0, brr = 0, brrr = 0, br1 = 0; 
    int polje[50]; 
    srand(time(NULL)); 
    for(i = 0; i < 50; i++) { 
     polje[i] = rand() % 30 + 1; 
     printf("%d ", polje[i]); 
    } 
    printf("\n"); 
    for(i = 0; i < 50; i++) { 
     if(polje[i] >= 1 && polje[i] <= 10) 
      br++; 
    } 
    printf("Brojevi od 1 do 10 pojavljuju se %d puta a to su ", br); 

    // changed from here: 
    for(i = 0; i < 50; i++) { 
     if(polje[i] >= 1 && polje[i] <= 10) 
      printf("%d ", polje[i]); 
    } 

    return 0; 
} 

如果您需要打印其各種索引(位置)在波列陣列中:

#include <time.h> 
#include <stdlib.h> 
#include <stdio.h> 
int main() { 
    int i; 
    int br = 0, brr = 0, brrr = 0, br1 = 0; 
    int polje[50]; 
    srand(time(NULL)); 
    for(i = 0; i < 50; i++) { 
     polje[i] = rand() % 30 + 1; 
     printf("%d ", polje[i]); 
    } 
    printf("\n"); 
    for(i = 0; i < 50; i++) { 
     if(polje[i] >= 1 && polje[i] <= 10) 
      br++; 
    } 
    printf("Brojevi od 1 do 10 pojavljuju se %d puta a to su ", br); 

    // changed from here: 
    for(i = 0; i < 50; i++) { 
     if(polje[i] >= 1 && polje[i] <= 10) 
      printf("%d ", i); 
    } 

    return 0; 
} 
0

我認爲這是你正在尋找的代碼。我也拿出了do-while循環。這可能會導致一個無限循環,如果polje[10]爲1之間 - 10,因爲當它得到測試的條件i將永遠是10

for(i = 0; i < 50; i++) // changed it from 10 to 50 
    if((polje[i] >= 1 && polje[i] <= 10)) // if statement 
     printf("%d ", polje[i]); 
0

如果你想那麼這裏1之間打印的號碼10是你的代碼的修正版本:

#include <time.h> 
#include <stdlib.h> 
#include <stdio.h> 
int main() { 
    int i; 
    int br = 0, brr = 0, brrr = 0, br1 = 0; 
    int polje[50]; 
    srand(time(NULL)); 
    for(i = 0; i < 50; i++) { 
     polje[i] = rand() % 30 + 1; 
     printf("%d ", polje[i]); 
    } 
    printf("\n"); 
    for(i = 0; i < 50; i++) { 
     if(polje[i] >= 1 && polje[i] <= 10) 
      br++; 
    } 
    printf("\nBrojevi od 1 do 10 pojavljuju se %d puta a to su \n", br); 

    //Change the loop from do-while to for and upto 50 iteration instead 10. 
    for(i = 0; i < 50; i++) 
     if(polje[i] >= 1 && polje[i] <= 10) 
      printf("%d ", polje[i]); 

    return 0; 
} 

變化:

  • 更換
do { 
     for(i = 0; i < 10; i++) 
      printf("%d ", polje[i]); 

    } while (polje[i] >= 1 && polje[i] <= 10); 

for(i = 0; i < 50; i++) 
    if(polje[i] >= 1 && polje[i] <= 10) 
     printf("%d ", polje[i]); 

,因爲沒有必要築巢for loopwhile loop的。

  • 變化
for(i = 0; i < 10; i++) 

for(i = 0; i < 50; i++) 

因爲你必須在數組中不僅之間的第一10個號碼全1之間的數字打印到10 1至10(根據我的理解)。