4-й случай не работает в операторе switch - PullRequest
0 голосов
/ 22 марта 2020

Я работаю над мини-проектом в C. В этом проекте я хочу преобразовать Цельсий в градусы Фаренгейта и Кельвина, Кельвин в градусы Фаренгейта и Цельсия и Фаренгейт в градусы Цельсия и Кельвина, используя вложенные операторы switch. Но во время выполнения, кажется, запускаются только 3 случая. Может кто-нибудь помочь мне понять проблему?

Код проекта приведен ниже: (Код не работает с 40-й строки )

#include<stdio.h>
#include<conio.h>
void main()
{
float ke,fa,ce;
char choice,ch,cho;
clrscr();
printf("1.Celcius(C)\n2.Kelvin(K)\n3.Fahrenheit(F)\n\n");
printf("Enter your choice : ");
scanf("%c",&choice);
switch(choice)
{
    case 'C':printf("1.Kelvin(k)\n2.Fahrenheit(f)\n\n");
    printf("Enter your choice : ");
    scanf(" %c",&ch);
    switch(ch)
    {
        case 'k':printf("Enter the value of Celcius : ");
        scanf("%f",&ce);
        ke=ce+273.15;
        printf("%f k",ke);
        break;
        case 'f':printf("Enter the value of Celcius : ");
        scanf("%f",&ce);
        fa=(ce*9/5)+32;
        printf("%f f",fa);
        break;
        default:printf("Invalid Input");
    }
    break;
    case 'K':printf("1.Celcius(c)\n2.Fahrenheit(f)\n\n");
    printf("Enter your choice : ");
    scanf(" %c",&cho);
    {
        case 'c':printf("Enter the value of Kelvin : ");
        scanf("%f",&ke);
        ce=ke-273.15;
        printf("%f c",ce);
        break;
        case 'f':printf("Enter the value of Kelvin : ");
        scanf("%f",&ke);
        fa=ke-(273.15)*9/5+32;
        printf("%f f",fa);
        break;
    }
}
getch();
}

1 Ответ

1 голос
/ 22 марта 2020

вы пропустили переключатель (чо) в

scanf(" %c",&cho);
{
    <<< HERE >>>
    case 'c':printf("Enter the value of Kelvin : ");
    scanf("%f",&ke);
    ce=ke-273.15;
    printf("%f c",ce);
    break;
    case 'f':printf("Enter the value of Kelvin : ");
    scanf("%f",&ke);
    fa=ke-(273.15)*9/5+32;
    printf("%f f",fa);
    break;
}

Я призываю вас правильно делать отступы / обрезать строки, чтобы избежать такой ошибки, так как ваш код трудно прочитайте

Я также рекомендую вам проверить результат вашего scanf , чтобы убедиться, что пользователь вводит правильное значение (например, не конец файла для вариантов выбора и недопустимое значение с плавающей точкой в ​​других случаях), иначе вы работа с возможно не инициализированными значениями

main должна возвращать int , а не ничего ( void )

Добавить перевод строки в вашем последнем printf на грипп sh сообщения

Укажите неверный ввод во всех соответствующих случаях

Так, например (я добавил код в комментарии для компиляции под Распбианом)

#include<stdio.h>
/*#include<conio.h>*/

int main()
{
  float ke,fa,ce;
  char choice;

  /*clrscr();*/
  printf("1.Celcius(C)\n2.Kelvin(K)\n3.Fahrenheit(F)\n\n");
  printf("Enter your choice : ");
  if (scanf("%c",&choice) != 1)
  {
    /* EOF */
    return 0;
  }

  switch(choice)
  {
  case 'C':
    printf("1.Kelvin(k)\n2.Fahrenheit(f)\n\n");
    printf("Enter your choice : ");
    if (scanf(" %c",&choice) != 1)
    {
      /* EOF */
      return 0;
    }

    switch(choice)
    {
    case 'k':
      printf("Enter the value of Celcius : ");
      if (scanf("%f",&ce) != 1)
        printf("invalid value\n");
      else
      {
        ke=ce+273.15;
        printf("%f k\n",ke);
      }
      break;
    case 'f':
      printf("Enter the value of Celcius : ");
      if (scanf("%f",&ce) != 1)
        printf("invalid value\n");
      else
      {
        fa=(ce*9/5)+32;
        printf("%f f\n",fa);
      }
      break;
    default:
      printf("Invalid choice\n");
    }
    break;
  case 'K':
    printf("1.Celcius(c)\n2.Fahrenheit(f)\n\n");
    printf("Enter your choice : ");
    if (scanf(" %c",&choice) != 1)
    {
      /* EOF */
      return 0;
    }

    switch (choice) 
    {
    case 'c':
      printf("Enter the value of Kelvin : ");
      if (scanf("%f",&ke) != 1)
        printf("invalid value\n");
      else
      {
        ce=ke-273.15;
        printf("%f c\n",ce);
      }
      break;
    case 'f':
      printf("Enter the value of Kelvin : ");
      if (scanf("%f",&ke) != 1)
        printf("invalid value\n");
      else
      {
        fa=ke-(273.15)*9/5+32;
        printf("%f f\n",fa);
      }
      break;
    default:
      printf("Invalid choice\n");
    }
    break;
  default:
    printf("Invalid choice\n");
  }
  /*getch();*/
  return 0;
}

Казни:

pi@raspberrypi:/tmp $ gcc -Wall t.c
pi@raspberrypi:/tmp $ ./a.out
1.Celcius(C)
2.Kelvin(K)
3.Fahrenheit(F)

Enter your choice : 1
Invalid choice
pi@raspberrypi:/tmp $ ./a.out
1.Celcius(C)
2.Kelvin(K)
3.Fahrenheit(F)

Enter your choice : C
1.Kelvin(k)
2.Fahrenheit(f)

Enter your choice : a
Invalid choice
pi@raspberrypi:/tmp $ ./a.out
1.Celcius(C)
2.Kelvin(K)
3.Fahrenheit(F)

Enter your choice : C
1.Kelvin(k)
2.Fahrenheit(f)

Enter your choice : k
Enter the value of Celcius : 12
285.149994 k
pi@raspberrypi:/tmp $ ./a.out
1.Celcius(C)
2.Kelvin(K)
3.Fahrenheit(F)

Enter your choice : C
1.Kelvin(k)
2.Fahrenheit(f)

Enter your choice : f
Enter the value of Celcius : aze
invalid value
pi@raspberrypi:/tmp $ ./a.out
1.Celcius(C)
2.Kelvin(K)
3.Fahrenheit(F)

Enter your choice : C
1.Kelvin(k)
2.Fahrenheit(f)

Enter your choice : f
Enter the value of Celcius : 12
53.599998 f
pi@raspberrypi:/tmp $ ./a.out
1.Celcius(C)
2.Kelvin(K)
3.Fahrenheit(F)

Enter your choice : K
1.Celcius(c)
2.Fahrenheit(f)

Enter your choice : c
Enter the value of Kelvin : 1
-272.149994 c
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...