Member 13602698 Ответов: 1

У меня есть эта ошибка, и я не знаю, как ее исправить ([ошибка] несовместимый тип для аргумента 1 'copy')


#include <stdio.h>
#include <stdlib.h>

struct rec{
       char nam[20];
       float grd;
       int id;
       };
       
int Read(struct rec happy[]);
void Sort(struct rec sad[], int c );
int Strcomp(char *ap, char *bp);
void Swapthem( struct rec fish[], int w);
void copy (char *cp, char *dp);

int main()
{
    struct rec what[20];
    int i=0, no=0;
    
    no = Read(what);
    Sort(what, no); 
    
getchar() ;
    return 0;
}

int Read(struct rec dog[])
{
    int l=0;
    
    FILE *myFile;
    myFile = fopen("studentrec.txt", "r");
        
	printf("List Unsorted:\n");
		
	while(fscanf(myFile, "%s %d %f", &dog[l].nam, &dog[l].id, &dog[l].grd)!=EOF)
	{
        printf("%s\t %d %.2f", dog[l].nam, dog[l].id, dog[l].grd);
		l=l+1;
		printf("\n");
    }
    fclose(myFile);
    
    return l;
}

int Strcomp(char *xp, char *yp)
{
     int x = 0;
    
    while (xp[x] == yp[x] && xp[x] != '\0')
    x=x+1;
    
    if (xp[x] > yp[x])
       return 1;
    else if (xp[x] < yp[x])
         return -1;
    else
        return 0;
}


void Swapthem( struct rec fish[], int m)
{
     int q; 
	 m = 0;
     
	struct rec temp;
	
	q=Strcomp (fish[m].nam, fish[m+1].nam);
          
          	if (q>0)
          	{
                  	copy (temp, fish[m].nam);
                  	copy (fish[m].nam, fish[m+1].nam);
                  	copy (fish[m+1].nam, temp);
          	}
}

void Sort(struct rec cat[], int k)
{
     int y, z, c;
	
	for (y=0; y<k-1; y=y+1)
  	{
	        for (z=0; y+z<k; z=z+1)
  		{
  			Swapthem(cat, z);
		}
		
	}
	printf("\nNew List\n\n");
  
  	for (c=0; c<k; c=c+1)
  	{
  		printf("%s\t %d %.2f", cat[c].nam, cat[c].id, cat[c].grd);
  	}
}

void copy (char *cp, char *dp)
{
    int k=0;

    while(k<20)
    {
    	cp[k]=dp[k];
   		k=k+1;
    }
}


Что я уже пробовал:

проблема заключается в функции swapthem, но я использовал эту функцию в предыдущей программе, которая не имела структуры, но когда я использую ее в этой текущей программе, я получаю эту странную ошибку.

1 Ответов

Рейтинг:
1

KarstenK

Это очень простая ошибка, что ваша функция копирования принимает cahr* в качестве входных данных, и вы даете ей структуру. То есть серьезная ошибка в вашей реализации.

Эта функция копирования очень проблематична, потому что имя неясно, и она имеет константу (20) в своей реализации.

Лучшие функции для вас-это стандартные функции C strcpy и memcpy, но в основном strncpy. Подробности в Google...