Member 13396113 Ответов: 1

Как сделать этот код простым


Привет, новичок в программировании на Си, и мне нужна помощь в чем-то. Я пытаюсь сделать это проще. Как и для операторов switch, я хотел бы для каждого случая вызывать функцию вместо того, чтобы помещать туда всю функцию целиком. но я продолжаю получать ошибки

#include <stdio.h>
#include <stdlib.h>
int
main(void)
{
int user; /*The choice of the user running the program and also what is used for the Switch statements*/
char ch; /*User's answer to run another program or to exit the program. */
	do {
	
	printf("\n\t\t\t\t\t\t\tMENU");
	printf("\n\t\t\t\t\t\t1. Heart Rate Program\n"); /*If user presses 1, Heart Rate Program will Run*/
	printf("\t\t\t\t\t\t2. Leap Year Program\n");   /*Press 2 and Leap Year program will run*/
	printf("\t\t\t\t\t\t3. Chronological Order Program\n");  /*Press 3 and Chronological Order program will run*/
	printf("\t\t\t\t\t\t4. Speed Ticket Program\n"); /*Press 4 and Speed ticket program will run*/
	printf("\t\t\t\t\t\t5.\n");
	printf("\t\t\t\t\t\t6.\n\n");
	printf("\t\t\t\t\t\tEnter your choice: ");
	scanf("%d", &user); /*User picks a number and goes to "user" memory allocation*/
	
	
	/*Switch statement is used to determine which item the user picks and which program to run*/
	switch (user) {
	
		case 1:/*Heart Rate Program*/
			{
				int VALUE, LOWER=80, UPPER=115;
					printf("\n\n\t\t\t\t\t\tHeart Rate:");
					scanf("%d", &VALUE);
						if(VALUE<LOWER)
							printf("\n\t\t\t\t\t\tHeart Rate is LOW\n");
						else if(VALUE>LOWER && VALUE<UPPER)
							printf("\n\t\t\t\t\t\tHeart Rate is OK\n");
						else
							printf("\n\t\t\t\t\t\tHeart Rate is HIGH\n");
			}
			break;
		case 2: /* Leap Year Program*/
			{
				int YEAR;
					printf("\n\n\t\t\t\t\t\tYEAR :");
					scanf("%d", &YEAR);
						if(YEAR%100==0&&YEAR%400==0)
							printf("\n\t\t\t\t\t\t%d is a LEAP YEAR!\n", YEAR);
						else
							printf("\n\t\t\t\t\t\t%d is NOT A LEAP YEAR!\n", YEAR);
			}
			break;
		case 3:/* Chronological Order Program*/
			{
				int FIRST, SECOND, SMALL, LARGE;
					printf("\n\n\t\t\t\t\t\tFIRST :");
					scanf("%d", &FIRST);
					printf("\n\t\t\t\t\t\tSECOND:");
					scanf("%d", &SECOND);
						if(FIRST<SECOND)
							SMALL=FIRST, LARGE=SECOND;
						else if(SECOND<FIRST)
							SMALL=SECOND, LARGE=FIRST;
						else
							return 0;
				printf("\n\t\t\t\t\t\t%d is the smaller number.", SMALL);
				printf("\n\t\t\t\t\t\t%d is the larger number.", LARGE);
				printf("\n\t\t\t\t\t\t%d, %d Ascending Order", SMALL, LARGE);
				printf("\n\t\t\t\t\t\t%d, %d Descending Order\n", LARGE, SMALL);
				
			}
			break;
		case 4: /* Speed Ticket Program*/
			{
				int SPEED=0;
				printf("\n\n\t\t\t\t\t\tSPEED:");
				scanf("%d", &SPEED);
					if(SPEED>=100)
						printf("\n\t\t\t\t\t\tP800 FINE.\n");
					else if(SPEED>=80&&SPEED<100)
						printf("\n\t\t\t\t\t\tP500 FINE.\n");
					else
						printf("\n\t\t\t\t\t\tNO FINE.\n");
			}
			break;
		case 5:
		case 6:
		default :
			printf("\t\t\t\t\t\tInvalid Entry! Please Try Again.\n");
			
		
				}
		printf("\n\n\t\t\t\t\t\tWould you like to try another one? Y/N: ");
		scanf(" %c", &ch);
		system("cls");	
	}
	
	while (ch == 'y' || ch == 'Y');
	
	return (0);
}


Что я уже пробовал:

я пробовал то, что видел в интернете, но это говорит мне, что я делаю что-то неправильно.

Jochen Arndt

Какие ошибки вы получаете для каких частей кода?

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

Пожалуйста, используйте зеленую ссылку "улучшить вопрос", чтобы отредактировать свой вопрос и добавить эту информацию.

1 Ответов

Рейтинг:
5

CPallini

Цитата:
Я хотел бы для каждого случая вызвать функцию вместо того, чтобы помещать туда всю функцию целиком. но я продолжаю получать ошибки
Тогда сделай это.


Например, вы можете заменить
case 1:/*Heart Rate Program*/
    {
        int VALUE, LOWER=80, UPPER=115;
            printf("\n\n\t\t\t\t\t\tHeart Rate:");
            scanf("%d", &VALUE);
                if(VALUE<LOWER)
                    printf("\n\t\t\t\t\t\tHeart Rate is LOW\n");
                else if(VALUE>LOWER && VALUE<UPPER)
                    printf("\n\t\t\t\t\t\tHeart Rate is OK\n");
                else
                    printf("\n\t\t\t\t\t\tHeart Rate is HIGH\n");
    }
    break;

с
case 1:
    heart_rate_fun();
    break;


обеспечить вас
  • объявите heart_rate_fun
void heart_rate_fun();



  • реализовать (определить) heart_rate_fun путем перемещения соответствующего кода
void heart_rate_fun()
{
  int VALUE, LOWER=80, UPPER=115;
  printf("\n\n\t\t\t\t\t\tHeart Rate:");
  scanf("%d", &VALUE);
  if(VALUE<LOWER)
    printf("\n\t\t\t\t\t\tHeart Rate is LOW\n");
  else if(VALUE>LOWER && VALUE<UPPER)
    printf("\n\t\t\t\t\t\tHeart Rate is OK\n");
  else
   printf("\n\t\t\t\t\t\tHeart Rate is HIGH\n");
}


Member 13396113

@CPallini
Большое вам спасибо, я использую int для объявления heart_rate one, думаю, именно здесь я делаю что-то не так.

CPallini

Добро пожаловать.

Member 13396113

@CPallini
также быстрый вопрос: как вы определяете, является ли это void, int, double и т. д. Для объявления функций, которые есть.

CPallini

void, если функция не возвращает никакого значения.
int, если функция возвращает int, например, остаток инт(инт делимое, делитель инт)
и т.д..

Mohibur Rashid

Дополнительное предложение вместе с @CPallini
объявить что-то
#определить COMMON_INDENT "\п\т\т\т\т\т"

и затем

printf(COMMON_INDENT " \Theart Rate is HIGH\n");
функции printf(COMMON_INDENT "\т\т%д %д по убыванию\N", то большой, маленький);


и наряду с другими предложениями, прописные буквы только для констант, а не для переменных.