Есть ли способ сократить оператор if с помощью switch? - PullRequest
2 голосов
/ 18 октября 2019

Мне нужно найти способ сократить мои операторы if-else с помощью switch. Операторы if-else очень длинные и выглядят очень непрофессионально, и я надеюсь, что есть способ сократить их до пары строк вместо путаницы из нескольких строк, как у меня сейчас.

Я пыталсяреализовать блок переключателей, но он не работал правильно и так, как я хотел, чтобы он шел.

int numbers(int tal[]) {
int choice,a;
printf("\nWrite a specific number: ");
scanf("%d", &choice);
int b = 0;
for(a = 0 ;a < MAX ;a++){
    if(tal[a]== choice){
        b = 1;
        printf("\nExists in the sequence on this location: ");
        if(a <= 9)
        printf(" Row 1 och column %d\n",a +1);
        else if (a > 9 &&a <= 19)
        printf(" Row 2 och column %d\n", (a +1) - 10);
        else if (a > 19 &&a <= 29)
        printf(" Row 3 och column %d\n", (a +1) - 20);
        else if (a > 29 &&a <= 39)
        printf(" Row 4 och column %d\n", (a +1) - 30);
        else if (a > 39 &&a <= 49)
        printf(" Row 5 och column %d\n", (a +1) - 40);
        else if (a > 49 &&a <= 59)
        printf(" Row 6 och column %d\n", (a +1) - 50);
        else if (a > 59 &&a <= 69)
        printf(" Row 7 och column %d\n", (a +1) - 60);
        else if (a > 69 &&a <= 79)
        printf(" Row 8 och column %d\n", (a +1) - 70);
        else if (a > 79 &&a <= 89)
        printf(" Row 9 och column %d\n", (a +1) - 80);
        else if (a > 89 &&a <= 99)
        printf(" Row 10 och column %d\n", (a +1) - 90);
        break;
    }
}
if (b == 0)
    printf("\n%d It does not exists in the sequence", choice);
}

Я получил его, и я изменил все операторы if-else на этот;изменить: nvm ответ столбца я получаю неправильно.

int choice,a,row,col;
printf("\nWrite a specific number: ");
scanf("%d", &choice);
int b = 0;
for(a = 0 ;a < MAX ;a++){
    if(tal[a]== choice){
        b = 1;
        printf("\nExists in the sequence on this location: ");
        if(a <= 9)
       col = a % 10 + 1;
       row = a / 10 + 1;
       printf("Row %d och column %d\n", row, col);
        break;
    }
}
if (b == 0)
    printf("\n%d It does not exists in the sequence", choice);

введите описание изображения здесь

1 Ответ

7 голосов
/ 18 октября 2019

Вы можете сделать его немного лучше:

  • Правильно сделав отступ
  • Пропуск избыточных проверок с >

следующим образом:

if(a <= 9)
    printf(" Row 1 och column %d\n",a +1);
else if (a <= 19)
    printf(" Row 2 och column %d\n", (a +1) - 10);
else if (a <= 29)
    printf(" Row 3 och column %d\n", (a +1) - 20);
...

Но в этом случае вы можете полностью избежать блока if, вычислив значения, например, так:

col = a % 10 + 1;
row = a / 10 + 1;

print("Row %d och column %d\n", row, col);
...