2017-01-16 4 views
-4

Das ist mein Code. Für die Eingabe:Switch-Gehäuse wahrscheinlich nicht triggern

A 1

sollte es Ausgabe 2, aber es wird Druck 1 aus irgendeinem Grund, und ich weiß nicht, ist, wo das Problem ist.

Ich brauche Werte L mal umkehrt, geänderte Werte von char T.

Unlucky abhängig ist, ist es immer 1. Drucken

#include <stdio.h> 
#include <ctype.h> 

int main(void) { 
    int N, aa, bb; 
    int k1 = 1, k2 = 0, k3 = 0, k4 = 0, k5 = 0; 
    scanf("%d", &N); 
    char *T = new char[N]; 
    int *L = new int[N]; 

    for (int length = 0; length < N; length++) { 
     scanf("%c", &T[length]); 
     scanf("%d", &L[length]); 
    } 
    for (int i = 0; i < N; i++) { 
     switch (toupper(T[i])) { 
     case 'A': 
      for (int j = 0; j < L[i]; j++) { 
       aa = k1; 
       bb = k2; 
       k2 = aa; 
       k1 = bb; 
      } 
      break; 
     case 'B': 
      for (int j = 0; j < L[i]; j++) { 
       aa = k1; 
       bb = k3; 
       k3 = aa; 
       k1 = bb; 
      } 
      break; 
     case 'C': 
      for (int j = 0; j < L[i]; j++) { 
       aa = k1; 
       bb = k4; 
       k4 = aa; 
       k1 = bb; 
      } 
      break; 
     case 'D': 
      for (int j = 0; j < L[i]; j++) { 
       aa = k1; 
       bb = k5; 
       k5 = aa; 
       k1 = bb; 
      } 
      break; 
     case 'E': 
      for (int j = 0; j < L[i]; j++) { 
       aa = k2; 
       bb = k3; 
       k3 = aa; 
       k2 = bb; 
      } 
      break; 
     case 'F': 
      for (int j = 0; j < L[i]; j++) { 
       aa = k2; 
       bb = k4; 
       k4 = aa; 
       k2 = bb; 
      } 
      break; 
     case 'G': 
      for (int j = 0; j < L[i]; j++) { 
       aa = k2; 
       bb = k5; 
       k5 = aa; 
       k2 = bb; 
      } 
      break; 
     case 'H': 
      for (int j = 0; j < L[i]; j++) { 
       aa = k3; 
       bb = k4; 
       k4 = aa; 
       k3 = bb; 
      } 
      break; 
     case 'I': 
      for (int j = 0; j < L[i]; j++) { 
       aa = k3; 
       bb = k5; 
       k5 = aa; 
       k3 = bb; 
      } 
      break; 
     case 'J': 
      for (int j = 0; j < L[i]; j++) { 
       aa = k4; 
       bb = k5; 
       k5 = aa; 
       k4 = bb; 
      } 
      break; 
     } 
    } 
    if (k1 == 1) 
     printf("1"); 
    else if (k2 == 1) 
     printf("2"); 
    else if (k3 == 1) 
     printf("3"); 
    else if (k4 == 1) 
     printf("4"); 
    else 
     printf("5"); 
    return 0; 
} 
+2

Diese Variablen wollen ein Array sein ... Sie brauchen auch keinen Schalter :) – Rakete1111

+0

Anstelle von Variablen wie 'k4' und' k5' wollen Sie wirklich 'k [4]' und 'k [5] '. Wie Rakete sagt, ** benutze ein Array **. Sie können auch 'std :: vector' anstelle von' new x [] 'verwenden, um die Speicherverwaltung zu vereinfachen. – tadman

+2

Verwenden Sie einen Debugger. – mascoj

Antwort

1

Schauen Sie hier:

for(int length = 0; length < N; length++){ 
    scanf("%c", &T[length]); 
    scanf("%d", &L[length]); 
} 

Wenn Sie Ihre Eingabe ist "1 A1", dann geht die Leerstelle in T, und scanf tut sein Bestes, um "A1" in eine Ganzzahl zu scannen. Sie könnten diesen Fehler entdeckt haben, indem Sie diese Werte ausdrucken, bevor Sie sie verwenden wollten.