2017-01-16 49 views
-4

这是我的代码。对于输入:开关盒可能不触发

A 1

它应该输出2,但它打印1由于某种原因,我不知道,这里就是问题所在。

我需要反转值L次,更改后的值取决于焦炭T的

倒霉,它总是打印1.

#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

这些变量想成为一个数组......你不需要开关太多:) – Rakete1111

+0

你真的想'k [4]'和'k [5] '。就像Rakete说的那样,**使用数组**。你也可以使用'std :: vector'而不是'new x []'来简化内存管理。 – tadman

+2

使用调试器。 – mascoj

回答

1

看看这里:

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

如果输入是“1 A1”,那么空白空间进入T,并且scanf尽最大努力将“A1”扫描为整数。在尝试使用这些值之前,您可能已经发现了这个错误。