2017-10-21 56 views
0

我想在終端上每2秒打印一次隨機音樂筆記,以在我的ocarina上進行練習。音樂筆記的集合是(A,B,C,D,E,F和G),這是我需要幫助的代碼,因爲我是編碼新手。如何在終端中以c語言打印一組隨機字母?


#include <stdio.h> 
    #include <unistd.h> 
    int main(){ 
       char A, B, C, D, E, F, G; 
       char notes[7] = { A, B, C, D, E, F, G }; 

       while (1) { 

         printf("%c\n", notes); 
         sleep(2); 

         } 
    } 

編譯時我得到這個錯誤。

warning:format ‘%c’ expects argument of type ‘int’, but argument 2 has type ‘char*’ [-Wformat=] printf("%c\n", notes);

當我改變的printf的%C到%s所有我在終端「@」每2秒搞定,我究竟做錯了什麼? 我的問題的另一部分如何添加打印散記 我需要添加哪些代碼?

+4

查一查'srand'和'rand' –

+2

變化'炭筆記[7] = {A,B,C,d,E, F,G};'到'炭筆記[] = {「ABCDEFG」;' –

+1

,一旦你找出如何使用RAND,初始化變量i,其獲取陣列音符之間0和6訪問隨機數[I ] –

回答

1

你並不需要單獨申報char變量,只是你想要的音符初始化數組。

然後,爲了採取的第一個音符,你需要做的notes[0],第二notes[1],第三notes[2],...,以及最後notes[sizeOfArray - 1]。因此,在一般情況下,你做notes[i]訪問數組的第i個元素,其中索引從0

所以開始,你不能這樣做printf("%c\n", notes);,因爲%c預計單個字符,而notes是字符數組(你可以說)。如果您使用%s,它會打印整個字符串,但我們不希望這樣。

如果我們想打印數組的第一個字符,我們會做:

printf("%c\n", notes[0]); 

現在,我們要隨機訪問陣列,因此我們不想0,但一些隨機的,這將在允許範圍內(我們必須小心不要超出範圍)。因此,這將是一件好事:

printf("%c\n", notes[randomIndex]); 

您可以替換randomIndex,通過一個函數調用,將返回一個隨機指數,像randomRange()我有波紋管。

實施例:

#include <stdio.h> 
#include <time.h> 
#include <stdlib.h> 
#include <unistd.h> 

int randomRange(int min, int max) 
{ 
    return (rand() % (max - min + 1)) + min; 
} 

int main(void) 
{ 
    srand((unsigned int)time (NULL)); 
    const int size = 7; 
    char notes[] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G' }; 
    for(int i = 0; i < 5; ++i) { 
     printf("%c\n", notes[randomRange(0, size - 1)]); 
     sleep(2); 
    } 
    return 0; 
} 

輸出:

D 
F 
A 
G 
G 
+1

謝謝你幫了我很多學習後,學習編程, ,我將研究所有這些代碼(即第一次我看到他們) – badboys

+0

如何接受的答案我沒有給你+1 – badboys