Рубрики

Тип данных меток регистра оператора switch в C ++?

В операторе switch C ++ выражение каждой метки case должно быть целочисленным константным выражением.

Например, следующая программа завершается неудачно при компиляции.

/ * Использование неконстантной метки в регистре * /
#include<stdio.h>

int main()

{

  int i = 10;

  int c = 10;

  switch(c) 

  {

    case i: // не выражение "const int"

         printf("Value of c = %d", c);

         break;

    / * Еще несколько случаев * /

                     

  }

  return 0;

}

Помещение const прежде, чем я заставлю вышеупомянутую программу работать

#include<stdio.h>

int main()

{

  const int i = 10;

  int c = 10;

  switch(c) 

  {

    case i:  // Работает отлично

         printf("Value of c = %d", c);

         break;

    / * Еще несколько случаев * /

                     

  }

  return 0;

}

Примечание: приведенный выше факт только для C ++. В Си обе программы выдают ошибку. В Си использование целочисленного литерала не вызывает ошибку.

Программа для нахождения наибольшего числа между двумя числами с использованием регистра переключателя:

#include<stdio.h>

int main()

{

  int n1=10,n2=11;

  

  // n1> n2 (10> 11) ложно, поэтому используя

  // логический оператор '>', n1> n2 выдает 0

  // (0 означает ложь, 1 означает истину) Итак, случай 0

  // выполняется, поскольку 10> 11 ложно. Мы тут

  // использовали приведение типа для преобразования логического значения в int,

  // чтобы избежать предупреждения.

  

  switch((int)(n1 > n2)) 

  {

    case 0:  

         printf("%d is the largest\n", n2);

         break;

    default:

         printf("%d is the largest\n", n1);

  }

  

  // n1 <n2 (10 <11) верно, поэтому с использованием логического

  // оператор '<', n1 <n2 выдает 1 (1 означает истину,

  // 0 означает ложь) Итак, по умолчанию выполняется так, как мы

  // нет случая 1 для выполнения.

  

  switch((int)(n1 < n2))

  {

    case 0:  

         printf("%d is the largest\n", n1);

         break;

    default:

         printf("%d is the largest\n", n2);

  }

  

  return 0;

}
// Этот код предоставлен Santanu

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

Тип данных меток регистра оператора switch в C ++?

0.00 (0%) 0 votes