2017-10-21 2 views
0

Ich möchte alle 2 Sekunden eine zufällige Musiknote auf dem Terminal, auf meiner Okarina üben. Der Satz der Musiknoten ist (A, B, C, D, E, F und G), das ist der Code, mit dem ich Hilfe brauche, da ich neu im Codieren bin.Wie kann man zufällige Buchstaben aus einem Satz in der Sprache c im Terminal drucken?


#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); 

         } 
    } 

ich diesen Fehler beim Kompilieren.

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

Wenn ich das% c in printf ändern zu% s alles, was ich im Terminal bekommen "@" alle 2 Sekunden, was mache ich falsch? für den anderen Teil meiner Frage, wie die gedruckten zufälligen Notizen hinzufügen welchen Code muss ich hinzufügen?

+4

nachschlagen '' und srand' rand' –

+2

Ändern 'char Hinweise [7] = {A, B, C, D, E, F, G}; 'to' char notes [] = {"ABCDEFG"; ' –

+1

und wenn du herausgefunden hast, wie man rand benutzt, initialisiere eine Variable i, die die Zufallszahl zwischen 0 und 6 erhält, auf das Array als Notizen [i ] –

Antwort

1

Sie müssen char Variablen nicht separat deklarieren, initialisieren Sie einfach Ihr Array mit den gewünschten Notizen.

Dann wird, um die erste Note zu nehmen, würden Sie notes[0] tun müssen, um für die zweite notes[1] zum dritten notes[2], ... und für die letzte notes[sizeOfArray - 1]. Also, in der Regel Zugriff auf das i-te Element eines Arrays von notes[i] tun, wo die Indizierung beginnt bei 0.

So können Sie nicht printf("%c\n", notes); tun, da %c ein einzelnes Zeichen erwartet, während notes ein Array von Zeichen (ein Stachel könnte man sagen). Wenn Sie %s verwenden, wird die gesamte Zeichenfolge gedruckt, aber das wollen wir nicht.

Wenn wir das erste Zeichen des Arrays drucken wollen, würden wir tun:

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

Jetzt wollen wir mit wahlfreiem Zugriff den Arrays, so dass wir nicht wollen, 0, aber etwas zufällig, die im erlaubten Bereich sein (wir müssen aufpassen, nicht außerhalb der Grenzen zu gehen). So würde dies etwas schön sein:

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

Sie können ersetzen, dass randomIndex, durch einen Funktionsaufruf, das einen zufälligen Index zurück, wie die randomRange() ich unten haben.

Beispiel:

#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; 
} 

Output:

D 
F 
A 
G 
G 
+1

Dank Sie mir sehr geholfen, ich werde alle diese Codes studieren (das ist das erste Mal Ich sehe sie) – badboys

+0

, wie man die Antwort annimmt, die ich dir gab +1 – badboys

Verwandte Themen