Zeeking99 Ответов: 2

Улучшения в моей программе на языке Си.


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

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

celsiustofahrenheit(float celsius)
{
	float fahrenheit;
	
	fahrenheit = celsius * (9.0/5.0) + 32;
	
	return fahrenheit;
}

fahrenheittocelsius(float fahrenheit)
{
	float celsius;
	
	celsius = ( fahrenheit - 32 )  * 5.0/9.0;
	
	return celsius;
}

main()
{
	char option,option2;
	float input,output;

	do
	{
	printf("--WELCOME--\nThis is a temperature converter\n");
	printf("'C' for Fahrenheit to Celsius\n'F' for Celsius to Fahrenhiet\n'E' to exit the program\n");
	
	option = getch();
	
	if(option == 'c' || option == 'C')
	{
		printf("Enter temperature in Fahrenheit : ");
		scanf("%f",&input);
		
		output = fahrenheittocelsius(input);
		
	    printf("\n%.2f degrees Fahrenheit is %.2f degrees Celsius\n",input,output);
	}
	
	if(option == 'f' || option == 'F')
	{
		printf("\nEnter the Temperature in Celsius : ");
		scanf("%f",&input);
		
		output = celsiustofahrenheit(input);
		
		printf("\n%.2f degrees Celsius is %.2f degrees Fahrenheit\n",input,output);
	}
	
	if(option == 'e' || option == 'E')
	{
		return 0 ;
	}
	
	printf("To use the program again press 'Y' or else press any other key\n");
	option2 = getch();
    }
    while(option2 == 'Y'  || option2 == 'y');
	
	getch();
}


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

Как я могу внести улучшения в эту программу?

2 Ответов

Рейтинг:
4

John R. Shaw

1. Ваши функции преобразования возвращается тип int по умолчанию. Вы всегда должны указывать тип возвращаемого значения.
2. main в программе на языке Си должен возвращать значение int. Кроме того, укажите тип возвращаемого значения.
3. Вы можете избавиться от локальной переменной в обеих функциях преобразования.
4. преобразование входного символа в верхний регистр сэкономит вам несколько тестовых случаев.
5. Либо использовать оператор switch или использовать if...else если образец заявления. Проверка входного значения с помощью нескольких операторов if не имеет смысла, поскольку только один оператор будет истинным.

Просто для удовольствия - я быстро переписал ваш код.

#include <stdio.h>
#include <conio.h>
#include <ctype.h>

// Returns farentheit
float CelsiusToFahrenheit(float celsius)
{
	// converting from double to float to stop warnings
	return (float)(celsius * (9.0/5.0) + 32);
}

// Returns celsius
float FahrenheitToCelsius(float fahrenheit)
{
	// converting from double to float to stop warnings
	return (float)((fahrenheit - 32) * 5.0/9.0);
}

int main()
{
	char option;
	float input,output;
	
	for(;;)
	{
		printf("\n--WELCOME--\nThis is a temperature converter\n");
		printf("'C' for Fahrenheit to Celsius\n'F' for Celsius to Fahrenhiet\n'E' to exit the program\n");
		
		option = getch();
		switch (toupper(option))
		{
		case 'C':
			printf("\nEnter temperature in Fahrenheit : ");
			scanf("%f",&input);
			
			output = FahrenheitToCelsius(input);
			
			printf("%.2f degrees Fahrenheit is %.2f degrees Celsius\n",input,output);
			break;
		case 'F':
			printf("\nEnter the Temperature in Celsius : ");
			scanf("%f",&input);
			
			output = CelsiusToFahrenheit(input);
			
			printf("%.2f degrees Celsius is %.2f degrees Fahrenheit\n",input,output);
			break;
		case 'E':
			return 0;
		default:
			printf("\nInvalid input \'%c\': Please try again.\n", option);
		}
    }

	return 0;
}


Zeeking99

Да, спасибо за это.

Рейтинг:
12

CPallini

Напишите правильную подпись для ваших функций: например

float celsiustofahrenheit(float celsius)


Сделайте свой C чтобы соответствовать стандарту:
  • не используйте conio заголовок
  • То main функция должна вернуть int.


Тогда использовать doubles вместо floatс.

Вы не можете написать
Цитата:
celsiustofahrenheit(поплавок Цельсия)
{
поплавок по Фаренгейту;

Фаренгейт = Цельсий * (9.0/5.0) + 32;

возвращение Фаренгейта;
}

Таким образом:
double celsiustofahrenheit(double celsius)
{
        return celsius * (9.0 / 5.0) + 32.0;	
}


Zeeking99

Почему вы говорите не использовать заголовок conio?

CPallini

Потому что это не стандартно. Видеть
https://en.wikipedia.org/wiki/Conio.h