Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.04.2022, 19:22   #1
Stefanidd
Новичок
Джуниор
 
Регистрация: 11.04.2022
Сообщений: 1
По умолчанию Поля данных: звезда, тип, звездная величина, созвездие. Вывести список звезд определенного типа. Определить, в каком соз

Всем привет. В коде функция Search не работает правильно. Подскажите где ошибки. Вот задание //Поля данных: звезда, тип, звездная величина, созвездие Вывести список звезд определенного типа. Определить, в каком созвездии находится заданная звезда
[CODE#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
#include <windows.h>

struct cosmos
{
char type[30];
char constellation[11];
float magnitude;
};

typedef struct cosmos DataType;

struct node
{
DataType data;
struct node * next;
};

typedef struct node * list;

DataType input_star (void);
list read_file (char * filename);
list new_node (list, DataType);
int write_file (char * filename, list);
void delete_list (list);
void edit (list);
void show (list);
void search (list begin);
list delete_node (list);

int main (void)
{
char file[50];
char menu;
list stars = NULL;
puts ("Enter the file name");
gets (file);
stars = read_file (file);
do
{
system ("CLS");
puts ("1. Insert");
puts ("2. Show");
puts ("3. Search");
puts ("4. Delete");
puts ("5. Exit");
menu = getchar(); getchar();
switch (menu)
{
case '1': stars = new_node (stars, input_star()); break;
case '2': show (stars); break;
case '3': search (stars); break;
case '4': stars = delete_node (stars);
}
}
while (menu!='5');
if (write_file (file, stars))
puts ("File saved");
else
puts ("File not saved");
delete_list (stars);
return 0;
}

DataType input_star (void)
{
DataType star;
puts ("Type");
gets (star.type);
puts ("Constellation");
gets (star.constellation);
puts ("Magnitude");
scanf ("%f", &star.magnitude);
getchar();
return star;
}

list new_node (list begin, DataType cosmos)
{
list temp = (list) malloc (sizeof(struct node));
temp->data = cosmos;
temp->next = begin;
return temp;
}

list read_file (char * filename)
{
FILE * f;
DataType star;
list begin=NULL, cur;
if ((f = fopen (filename, "rb")) == NULL)
{
perror ("Error open file");
getchar();
return begin;
}
if (fread(&star, sizeof(star), 1, f))
begin = new_node (NULL, star);
else
return NULL;
cur = begin;
while (fread(&star, sizeof(star), 1, f))
{
cur->next = new_node (NULL, star);
cur = cur->next;
}
fclose(f);
return begin;
}

void delete_list (list begin)
{
list temp = begin;
while (temp)
{
begin = temp->next;
free (temp);
temp = begin;
}
}

int write_file (char * filename, list begin)
{
FILE * f;
if ((f = fopen (filename, "wb")) == NULL)
{
perror ("Error create file");
getchar();
return 0;
}
while (begin)
{
if (fwrite (&begin->data, sizeof(DataType), 1, f))
begin = begin->next;
else
return 0;
}
return 1;
}

void print_data (struct cosmos cosmos)
{
printf ("Type : %s\nConstellation : %s\nMagnitude : %.2f\n", cosmos.type,
cosmos.constellation, cosmos.magnitude);
}

void show (list cur)
{
int k=0;
system ("CLS");
if (cur == NULL)
{
puts ("List is empty");
getchar();
return;
}
puts ("| N | Type | Constellation | Magnitude |");
puts ("-------------------------------------------------------------------------");
while (cur)
{
printf ("|%3d | %-29s |%11s|%10.2f |\n", ++k, cur->data.type,
cur->data.constellation, cur->data.magnitude);
cur = cur->next;
}
puts ("-------------------------------------------------------------------------");
getchar();
}

void search (list cur)
{
char type[30];
int constellation=0, k=-1;
DataType star;
system ("CLS");
if (cur == NULL)
{
puts ("List is empty");
getchar();
return;
}
puts ("Type?");
scanf ("%s",&type);
getchar();
while (cur)
{
k++;
if (cur->data.type > type && cur->data.constellation > constellation)
{
constellation = cur->data.constellation;
star = cur->data;
}
cur = cur->next;
}
if (constellation == 0) puts ("Not found");
else print_data (star);
getchar();
}

list delete_node (list begin) /*удаление первого элемента*/
{
struct node * temp;
if (begin) /*если список не пуст*/
{
temp = begin;
begin = begin->next; /*переставляем указатель на следующий элемент*/
free (temp); /*первый удаляем*/
puts ("Deleted");
getchar();
}
return begin;
}
][/CODE]
Stefanidd вне форума Ответить с цитированием
Старый 12.04.2022, 10:38   #2
ForenLi
Форумчанин
 
Регистрация: 02.06.2021
Сообщений: 515
По умолчанию

Код:
cur->data.type > type
Для массивов чаров делает совсем не то, что вы подумали. Есть strcmp и ей подобные.
ForenLi вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дана матрица A (6,6) в каждой строке матрицы определить произведения элементов, чья величина 1< A(I,J)<5. Enerdgazer Помощь студентам 1 27.04.2014 13:49
Описать функцию RadToDeg(R) вещественного типа, находящую величину угла в градусах, если дана его величина R в радианах investr Паскаль, Turbo Pascal, PascalABC.NET 1 02.12.2011 14:47
как сделать сайт(на каком движке)тематика сайта новости и обсуждения звезд и т.д форум тоже будет.? feesta Помощь студентам 6 18.04.2011 02:33
Определить и вывести список файлов в папке SMShrek Microsoft Office Excel 6 17.05.2010 16:43
Изменение типа данных для поля Diamand Microsoft Office Access 6 04.03.2010 23:36