2016-04-09 2 views
0

Ich bin neu im Programmieren und probiere verschiedene Aktivitäten online aus, um einen Überblick zu bekommen. Ich habe ein Problem mit einem bestimmten Problem. Ich möchte ein Programm erstellen, bei dem der Benutzer einen Wert eingibt und eine bestimmte Zeichenfolge ausgibt. Zum Beispiel, wenn der Benutzer 0 eintritt, wird die Zeichenfolge ‚schwarz‘, drucken 1 Eingabe wird die Zeichenfolge ‚braun‘, wie im Bild unten gesehen drucken:C-Konsole - Trennung verschiedener Werte

enter image description here

Mein Problem ist, dass ich will der Benutzer einen Wert wie 012 eingeben und es würde "schwarz, braun, rot" mit Leerzeichen drucken. Ich habe einen Anfang gemacht, indem ich folgendes gemacht habe:

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

int colours(int t){ 
    if(t == 0){ 
     printf("black"); 
    } 
    else if(t == 1) { 
     printf("brown"); 
    } 
    else if (t == 2) { 
     printf("red"); 
    } 
    else if(t == 3) { 
     printf("orange"); 
    } 
    else if(t == 4) { 
     printf("yellow"); 
    } 
    else{ 
     printf("incorrect colour number"); 
    } 
    return; 
} 

int main() 
{ 
    int n; 
    printf("Enter n: "); 
    scanf("%d", &n); 
    printf("colour code"", colours(n)); 
    return 0; 
} 

Wie kann ich mehrere Farben gleichzeitig drucken? Ich frage nicht nach Code Ich brauche nur einen Hinweis, was zu verwenden ist, ich bin nicht sicher, ob die Verwendung von IF-Anweisungen für dieses Problem richtig ist?

+0

*** Wie kann ich mehrere Farben auf einmal drucken *** .... können Sie ein bisschen mehr erklären, was Sie in der Eingabe und der erwarteten Ausgabe wollen ... ??? –

+2

Zuerst lernen Sie die 'switch' Anweisung. Dann lerne über Schleifen. Und schließlich lesen Sie die Eingabe als eine Zeichenfolge, und erhalten Sie die Ziffern nacheinander aus der Zeichenfolge in der Schleife. –

+0

Ihre 'colors' Funktion ist mehr oder weniger OK (auch wenn sie vereinfacht werden kann), aber Sie sollten sie' PrintColor' nennen, was wiederspiegelt, was sie tatsächlich macht. Wenn Sie mehrere Farben drucken möchten, wie Sie es in Ihrer Frage beschrieben haben, müssen Sie "012" in die Werte 0, 1 und 2 zerlegen und für jeden der Werte die Funktion 'PrintColor' aufrufen. –

Antwort

0

Um die Benutzereingabe zu "zerlegen", könnten Sie versuchen, sie als Zeichenfolge, eine Tabelle von Zeichen zu erhalten.

char* input = (char*) malloc(sizeof(char) * maxlength + 1); // allocate a char table to store user input, maxlength being the maximum length you expect. 
scanf("%s", input); 

Hinweis 1: Sie haben 1 bis zur maximalen Länge hinzuzufügen, die Sie von der Benutzereingabe empfangen erwarten, da scanf ein mehr benötigt char den Charakter hinzufügen \0 die Zeichenfolge zu beenden.
Hinweis 2: Das Zeichen \0 ist auch als NULL-terminator bekannt.

Dann gehen Sie durch die Zeichenfolge wie:

for(int i = 0 ; i < strlen(input) ; i++) 
{ 
    colours(input[ i ]); 
} 

Hinweis 1: Sie müssen #include <string.h>strlen verwenden.
Hinweis 2: Sie müssen möglicherweise Ihr Zeichen in einen Int umwandeln, um es an colours zu übergeben, indem Sie verwenden: colours((int) input[ i ]);.
Hinweis 3: Wenn Sie eine char in eine int umwandeln, erhalten Sie den ASCII-Wert des Zeichens.

Und verwenden Sie die ASCII code (Nummern suchen) von jedem char, um sie zu identifizieren und zu drucken. Daher können Sie es einer der beiden Test mit folgenden:

void colours(int t) // as mentioned in the comments, you do not have to return something. 
{ 
    switch(t) 
    { 
     case 49: // ASCII code of 1 
      printf("brown\n"); 
      break; 

     // ... other cases 

     default: // Don't forget the default statement 
      printf("incorrect colour number\n"); 
      break; 
    } 
} 

oder:

switch(t - (int) '0') // (ASCII code of t - ASCII code of '0') gives you the number given by the user, as an int 
{ 
    case 1: // 
     printf("brown\n"); 
     break; 

    // ... other cases 

    default: 
     printf("incorrect colour number\n"); 
     break; 
} 

Wie andere in den Kommentaren gesagt, ist es am besten Praxis einen Schalter Case-Anweisung zu verwenden, wenn Sie müssen Mach mehr als 2 aufeinanderfolgende else if.

Schließlich vergessen Sie nicht, den Speicher frei Sie manuell zugewiesen haben, so dass Sie nicht über einen Speicherverlust:

free(input); 
+1

Absolute Legende, so viel gelernt aus diesem Grund, vielen Dank. – Vbobo

0

Zunächst einmal würde ich Ihnen raten, Ihre „Farben“ zu erklären Funktion als Typ void, da es nichts zurückgeben muss (void colours(int t){).

Dies ist die Art, wie ich dieses Problem Ansatz würde:

initialisieren ein Array, das eine Zeichenfolge aus einer Benutzereingabe gespeichert werden (zB .123). Dann übergeben Sie das Array an eine Funktion (google dies, da es nicht so einfach ist wie eine Ganzzahl übergeben). Machen Sie dann eine Schleife, die durch das Array läuft, bis sie das Ende erreicht und eine bestimmte Farbe für jeden Durchlauf druckt. (Z. array[0] 1 ist, so drucken braun ist array[1] 2, drucken, so rot, array[2] 3 ist, drucken, so Orange).