Надо поправить код! - 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, возможно, для дальнейшей обработки или отображения.