Надо поправить код! - C (СИ)
Формулировка задачи:
Решил помочь одному из пользователей с написанием программы и столкнулся с проблемой:
46 строка:
warning assignment from incompatible pointer type
80 строка:
void valude not ingnored as it ought to be
И да, впервые использую указатель на структуру, проверьтеvoid outPrint(){..}
, правильно ли работаю с указателем?#include <stdio.h> #include <stdlib.h> #include <locale.h> #define MAX_NAME 24 #define SIZE 10 struct animal{ char name[MAX_NAME];// Название double size; // Средний размер (м.) double weight; // Средний вес (кг.) int year; // Продолжительность жизни (лет) }fish[SIZE],fishAlf[SIZE];//fishAlf - рыбы по алфавиту int inScan(void) { FILE *base = fopen("base.txt","r");// Указатель на файл; r - чтение из файла if(!base) return printf("Файл не найден!"); else{ size_t i; for( i = 0; i < SIZE; i++){// Заполнение структуры из файла fscanf(base, "%s", &fish[i].name); fscanf(base, "%lf", &fish[i].size); fscanf(base, "%lf", &fish[i].weight); fscanf(base, "%d", &fish[i].year); fish[i] = fishAlf[i]; } fclose(base); for( i = 0; i < SIZE; i++){// Размещение стркутры в алфавитном порядке size_t j; for( j = i+1; j < SIZE; j++){ if(strcmp(fishAlf[i].name, fishAlf[j].name)>0){ struct animal tmp = fishAlf[i]; fishAlf[i] = fishAlf[j]; fishAlf[j] = tmp; } } } } } void outPrint(int alf, double size, double weight, int year) { struct animal *p_fish; if(alf == 1) p_fish = &fish; else p_fish = &fishAlf; size_t i; for( i = 0; i < SIZE; i++){ if(size >= p_fish[i].size){ if(weight >= p_fish[i].weight){ if(year >= p_fish[i].year){ printf("\nНазвание: %s\n", p_fish[i].name); printf("Размер: %.2lf м.\n", p_fish[i].size); printf("Вес: %.3lf кг.\n", p_fish[i].weight); printf("Продолжительность жизни: %d лет\n", p_fish[i].year); } } } } } int findAnimal(void) { printf("Параметры для вывода списка рыб:"); printf("Вывод по алфавиту (0 - нет, 1 - да): "); int alf = EOF; while(alf < 0 || alf > 1){ scanf("%d",alf); if(alf < 0 || alf > 1) printf("Неверно! Вывод по алфавиту ( 0 - нет, 1 - да): "); } printf("Разеры рыбы от N м.: "); double size; scanf("%lf", size); printf("Вес рыбы от N кг.: "); double weight; scanf("%lf", weight); printf("Продолжительность жизни от N лет: "); int year; scanf("%d", year); return outPrint(alf, size, weight, year); } int main(void) { setlocale(LC_ALL, "Rus"); printf("~ ПРОГРАММА 'РЕЧНЫЕ РЫБЫ' ~\n\n"); inScan(); findAnimal(); return 0; }
Исправил 80 строку.
void outPrint
заменил наint outPrint
Но теперь так жеwarning
с45/46 строкой
, через указатель не выводит результаты структуры.Решение задачи: «Надо поправить код!»
textual
Листинг программы
fscanf(base, "%s", &fish[i].name); fscanf(base, "%lf", &fish[i].size); fscanf(base, "%lf", &fish[i].weight); fscanf(base, "%d", &fish[i].year); fish[i] = fishAlf[i];
Объяснение кода листинга программы
base
- это файловый дескриптор, который указывает на файл, с которым мы работаем.fish
- это массив структур, который содержит информацию о рыбах. Каждая структураfish
содержит поляname
(имя рыбы),size
(размер рыбы),weight
(вес рыбы) иyear
(год рождения рыбы).fishAlf
- это массив, который, вероятно, содержит информацию о рыбах в другом формате.- Код считывает данные из файла в массив
fish
. Сначала считывается имя рыбы, затем размер, вес и год рождения. - После считывания данных, содержимое массива
fish
присваивается массивуfishAlf
, возможно, для дальнейшей обработки или отображения.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д