|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
11.04.2022, 19:22 | #1 |
Новичок
Джуниор
Регистрация: 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] |
12.04.2022, 10:38 | #2 |
Форумчанин
Регистрация: 02.06.2021
Сообщений: 515
|
Код:
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Дана матрица 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 |