Я пытался запрограммировать инструмент, где я получаю данные от пользователя, если это круг, квадрат или прямоугольник, и, соответственно, он будет принимать входные данные измерений и распечатывать площадь для них. Но это не работает, пожалуйста, помогите мне, в чем проблема с моим кодом и как я могу заставить его работать?
#include<stdio.h>
#include<math.h>
float square(float side);
float circle(float rad);
float rect(float a,float b);
int main(){
char lol;
printf("press s for square\n c for circle\n r for rectagle\n");
scanf("%c ", &lol);
if (lol == 's')
{
int t;
printf("enter side measurement");
scanf("%d", &t);
printf("the area is %f", square(t));
}
if (lol == 'c');
{
int r;
printf("enter radius of circle");
scanf("%d", &r);
printf("the area is %f", circle(r));
}
if (lol == 'r')
{
int m,n;
printf("enter 2 sides ");
scanf("%d %d", &m,&n);
printf("the area is %f", rect(m,n));
}
return 0;
}
float square(float side){
return side*side;
}
float circle(float rad){
return 3.14* rad*rad;
}
float rect(float a,float b){
return a*b;
}
Пожалуйста, также сделайте более информативный заголовок, который действительно описывает вашу проблему.
Кроме того, расскажите нам, что вы обнаружили при использовании отладчика.
Просто поставьте `\n` в конце каждого printf
Основной тип с плавающей запятой в C — это double
, а не float
. float
— это тип с ограниченной точностью и диапазоном, который в основном подходит для экономии места в больших массивах данных.
scanf("%c ", &lol);
Уберите пробел после %c
.
Не используйте scanf
для интерактивного ввода. scanf
предназначен для чтения форматированных данных. Чтобы сделать это наполовину надежно, вы должны проверить возвращаемое значение и закодировать некоторую обработку ошибок.
Вы хотите удалить пробную версию ' ' в первом scanf() и удалить ;
после оператора if.
Если main()
стоит последним, вы часто можете обойтись без указания прототипов для таких небольших программ, как эта. Добавлена проверка ошибок scanf()
. Предпочитайте if-else-if, когда условия взаимоисключающие, или, как здесь, оператор switch, чтобы вам не нужно было повторять lol ==
. Немного подправил подсказки (двоеточия, новые строки) и отсортировал как меню, так и соответствующую реализацию. Это упрощает конечным пользователям и упрощает навигацию для всех, кто работает над кодом. math.h определил константу M_PI, если установлено __USE_XOPEN. Лучше использовать константу, чем жестко кодировать значение 3,14 в circle()
.
#define __USE_XOPEN
#include <math.h>
#include <stdio.h>
float circle(float rad) {
return M_PI * rad * rad;
}
float rect(float a, float b) {
return a * b;
}
float square(float side) {
return side * side;
}
int main(void) {
printf("press:\n"
" c for circle\n"
" r for rectangle\n"
" s for square\n"
);
char lol;
if (scanf("%c", &lol) != 1) {
printf("scanf failed\n");
return 1;
}
switch(lol) {
case 'c': {
printf("enter radius of circle: ");
int r;
if (scanf("%d", &r) != 1) {
printf("scanf failed\n");
return 1;
}
printf("the area is %f\n", circle(r));
break;
}
case 'r': {
printf("enter 2 sides: ");
int m, n;
if (scanf("%d %d", &m,&n) != 2) {
printf("scanf failed\n");
return 1;
}
printf("the area is %f\n", rect(m,n));
break;
}
case 's': {
printf("enter side measurement: ");
int t;
if (scanf("%d", &t) != 1) {
printf("scanf failed\n");
return 1;
}
printf("the area is %f\n", square(t));
break;
}
default:
printf("invalid selection %c\n", lol);
}
}
Добро пожаловать в StackOverflow. Пожалуйста, предоставьте более подробное описание проблемы: что вы ожидали и что вместо этого произошло? Это облегчает людям помощь.