Нахождение кубиков заданного цвета - найти ошибку - C (СИ)
Формулировка задачи:
помогиле найти ошибку в коде!!!! ( ошибку пишет где свич!!!)
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
struct book
{
char colour [20];
char mater [20];
float dlina;
};
int main()
{
int n;
book *lib;
int i;
printf ("Enter kolichestvo kubikov ");
scanf ("%d",&n);
lib=(book *)calloc(n,sizeof(book));
printf ("NADO VVESTI ODIN IZ CVETOV^ RED,BLUR,YELLOW,GREEN...\n");
printf ("NADO VVESTI ODIN IZ MATERIALOV^ paper,metal,wood...\n");
printf ("NADO VVESTI RAZMER^ dlina rebra v sm...\n");
for (i=0;i<n;i++)
{
printf ("\nEnter color %d-go cubika (red,blur,yellow,green) ",i+1);
scanf ("%s",&lib[i].colour);
printf ("\nEnter material %d-go cubika (paper,metal,wood) ",i+1);
scanf ("%s",&lib[i].mater);
printf ("\nEnter razmer %d-go cubika (dlina rebra v sm) ",i+1);
scanf ("%d",&lib[i].dlina);
}
int r=0;
int b=0;
int y=0;
int g=0;
int k=0;
for (k=0;k<n;k++)
{
switch (lib[k].colour)
{
case 'RED':
case 'red':
r=r+1;
break;
case 'blur':
case 'BLUR':
b=b+1;
break;
case 'YELLOW':
case 'yellow':
y=y+1;
break;
case 'GREEN':
case 'green':
g=g+1;
break;
}
}
printf("\nChislo RED cubikov - %d",r);
printf("\nChislo BLUR cubikov - %d",b);
printf("\nChislo YELLOW cubikov - %d",y);
printf("\nChislo GREEN cubikov - %d",g);
getch();
return 0;
}Решение задачи: «Нахождение кубиков заданного цвета - найти ошибку»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
struct book
{
char colour [20];
char mater [20];
float dlina;
};
int main()
{
const char *s1 = "red";
const char *s2 = "blur";
const char *s3 = "green";
const char *s4 = "yellow";
int n;
book *lib;
int i;
printf ("Enter kolichestvo kubikov ");
scanf ("%d",&n);
lib=(book *)calloc(n,sizeof(book));
printf ("NADO VVESTI ODIN IZ CVETOV^ RED,BLUR,YELLOW,GREEN...\n");
printf ("NADO VVESTI ODIN IZ MATERIALOV^ paper,metal,wood...\n");
printf ("NADO VVESTI RAZMER^ dlina rebra v sm...\n");
for (i=0;i<n;i++)
{
printf ("\nEnter color %d-go cubika (red,blur,yellow,green) ",i+1);
scanf ("%s",&lib[i].colour);
printf ("\nEnter material %d-go cubika (paper,metal,wood) ",i+1);
scanf ("%s",&lib[i].mater);
printf ("\nEnter razmer %d-go cubika (dlina rebra v sm) ",i+1);
scanf ("%d",&lib[i].dlina);
}
int r=0;
int b=0;
int y=0;
int g=0;
int k=0;
for (k=0;k<n;k++)
{
if (strcmp (lib[k].colour,s1)==0) {r=r+1;}
else {if (strcmp (lib[k].colour,s2)==0) {b=b+1;}
else {if (strcmp (lib[k].colour,s3)==0) {g=g+1;}
else {if (strcmp (lib[k].colour,s4)==0) {y=y+1;}
} } }
}
}
printf("\nChislo RED cubikov - %d",r);
printf("\nChislo BLUR cubikov - %d",b);
printf("\nChislo YELLOW cubikov - %d",y);
printf("\nChislo GREEN cubikov - %d",g);
getch();
return 0;
}
Объяснение кода листинга программы
- В начале программы объявляется структура book, которая содержит поля colour (цвет), mater (материал) и dlina (размер).
- Далее, в функции main(), определяются константы s1, s2, s3 и s4, которые представляют цвета и материалы.
- Затем, пользователю предлагается ввести количество кубиков, для которых нужно найти информацию.
- Выделенная память для массива структур book приводится в соответствие с количеством кубиков, введенным пользователем.
- После этого пользователю предлагается ввести цвет, материал и размер для каждого кубика.
- Далее, происходит поиск кубиков заданного цвета, используя условные операторы if-else и функцию strcmp() для сравнения строк.
- В конце программы выводятся результаты поиска - количество кубиков каждого цвета.
- Возможно, стоит добавить проверку на некорректный ввод данных, чтобы избежать ошибок при работе с программой.