Ошибка в коде си - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Добрый день,буду благодарен за помощь в данном коде,выдает ошибку. [Warning] return makes integer from pointer without a cast [Warning] assignment makes pointer from integer without a cast main.c
#include "carti.h"
#include "functions.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
int main(){
    carti *head1;
    int i=0,l=0,k,n,n1,m=0,id=0,f,rs;
    carti *a,*b,*p,*cautat,*v;
    carti s,y;
    char adr[100],adr1[100],adr2[100],num[100],*fname;
    int optiune;
    optiune=0;
    do{
    system("CLS");
    printf("\t\t\tLucrarea de laborator 2 & 3\n\t\t\t\tla disciplina\n\t\t\tStructuri de date si algoritmi \n\n");
    puts(" >> MENU <<");
    puts(" 1. Crearea listei.");
    puts(" 2. Introducerea datelor.");
    puts(" 3. Afisarea datelor.");
    puts(" 4. Cautarea unui element.");
    puts(" 5. Modificarea listei.");
    puts(" 6. Determinarea lungimei listei.");
    puts(" 7. Sortarea elementelor.");
    puts(" 8. Interschimbarea a 2 elemente.");
    puts(" 9. Eliberaraea memoriei.");
    puts(" 10.Adaugarea unui element la inceputul listei.");
    puts(" 11.Adaugarea unui element la sfirsitul listei.");
    puts(" 12.Inserarea inainte de element.");
    puts(" 13.Inserarea dupa element.");
    puts(" 14.Stergerea unui element.");
    puts(" 15.Pentru a desparti lista.");
    puts(" 16.Pentru a uni lista.");
    puts(" 17.Scrierea datelor in fisier.");
    puts(" 18.Citirea datelor din fisier.");
    puts(" 0. Iesire.");
    printf("\n Alegeti optiunea: ");
    scanf("%d",&optiune);
    switch (optiune){
        case 1: {
         printf(" Dati numarul de cartie: ");
         scanf("%d",&n);
         head=create(head,n);
        system("PAUSE");
        break;
        }
        case 2: {
            if(!head){
        puts(" Memoria nu a fost alocata");
            getch();
            break;
         }
         if(!id)
         {  read(head,n);
         id=1;
         }
         else
         puts(" Datele au fost deja introduse");
        system("PAUSE");
        break;
        }
        case 3: {
            if(!head){puts(" Memoria nu a fost alocata");}
        if(id)
         {
      puts(" Lista de structuri");
            show(head);
         }
         else
            {
      printf(" Doriti sa introduceti informatia?(1/0): ");
      scanf("%d",&f);
      if(f)
      {read(head,n);
       id=1;
      puts(" Lista de structuri");
                show(head);
      }
      }
 
        system("PAUSE");
        break;
        }
        case 4: {
        printf(" Introduceti denumirele de cautat: ");
        fflush(stdin);
        gets(adr);
        p=searchs(head,adr);
        if(p==0){
            puts(" Cartiul nu a fost gasit in baza de date");
            puts(" Pentru a continua apasa-ti tasta 'Enter'");
              getch();
              break;
        }
        puts(" Cartiul cautat");
        printf(" Denumire: %s\n Autor: %s\n Editura: %s\n Buget: %d\n Lansare: %d\n",p->denumire,p->autor,p->editura,p->buget,p->lansare);
        system("PAUSE");
        break;
        }
        case 5: {
         printf(" Dati denumirele cartiului pe care doriti sa-l modificati: ");
         fflush(stdin);
         gets(adr);
         cautat=searchs(head,adr);
         if(cautat==0)
         {
             puts(" Cartiul nu a fost gasit in baza de date");
             puts(" Pentru a continua apasa-ti tasta 'Enter'");
             getch();
             break;
         }
         modify(head,cautat);
         printf(" Doriti sa afisati cartiul modificat?(1/0): ");
         scanf("%d",&f);
         if(f)
         {
         puts(" Cartiul dupa modificare");
         show2(cautat);
         puts("\n Pentru a continua apasa-ti tasta 'Enter'");
         getch();
         break;
         }
         else break;
 
        system("PAUSE");
        break;
        }
        case 6: {
            if(!head)
         {
        puts("Memoria nu a fost alocata");
        getch();
        break;
         }
         k=lenght(head);
         printf(" Lungimea listei este << ");
         printf("%d",k);
         printf(" >>\n");
        system("PAUSE");
        break;
        }
        case 7: {
            sorts(head);
            puts(" Lista a fost sortata");
            printf(" Doriti sa afisati lista sortata(1/0): ");
            scanf("%d",&f);
            if(f)
            {
            puts(" Lista dupa sortare");
            show(head);
            }
            puts("\n Pentru a continua apasa-ti tasta 'Enter'");
            getch();
            break;
        system("PAUSE");
        break;
        }
        case 8: {
        printf(" Dati adresa primului element de schimbat: ");
         fflush(stdin);
         gets(adr1);
         a=searchs(head,adr1) ;
         if(a==0)
         {
        puts(" Elementul cu asa adresa nu a fost gasit");
        getch();
        break;
         }
         printf(" Dati adresa la al doilea element de schimbat: ");
         fflush(stdin);
         gets(adr2);
         b=searchs(head,adr2);
         if(b==0)
         {
           puts(" Elementul cu asa adresa nu a fost gasit");
           getch();
           break;
         }
         swaps(a,b);
         puts(" Interschimbarea elementelor a fost efectuata cu succes");
         printf(" Doriti sa fie afisata lista modificata(1/0): ");
         scanf("%d",&f);
         if(f)
         {
       printf(" Lista dupa interschimbare\n");
       show(head);
       }
       puts("\n Pentru a continua apasa-ti tasta 'Enter'");
         getch();
         break;
 
        system("PAUSE");
        break;
        }
        case 9: {
         head=freem(head);
         if(head)
         puts(" Lista nu a fost eliberata") ;
         if(!head)
         id=0;
         puts(" Memoria a fost eliberata cu succes!!!");
        system("PAUSE");
        break;
        }
        case 10: {
         puts(" Introduce-ti informatia despre elementul de adaugat");
         rs=prepend();
         if (rs==0)
         {puts(" Lista este vida");}
         if (rs==-1) {puts(" Elementul nu a fost adaugat");}
         if (rs==1) {puts(" Elementul a fost adaugat cu succes");}
        system("PAUSE");
        break;
        }
        case 11: {
         puts(" Introduce-ti informatia despre elementul de adaugat");
         introducere(&s);
         rs=append(head,s,&n);
         if (rs==0)
         {puts(" Lista este vida");}
         if (rs==-1) {puts(" Elementul nu a fost adaugat");}
         if (rs==1) {puts(" Elementul a fost adaugat cu succes");}
        system("PAUSE");
        break;
        }
        case 12: {
         printf(" Dati denumirele elementului inaintea caruia doriti sa inserati: ");
         fflush(stdin); gets(adr);
         cautat=searchs(head,adr);
         if (cautat==NULL)
         {
        puts(" Acest element nu exista");
        getch();
        break;
         }
         puts(" Introduceti datele despre elementul care doriti sa-l adaugati\n ");
         introducere(&s);
         head=insertbefore(head,cautat,s,&n);
         puts(" Elementul a fost adaugat cu succes");
        system("PAUSE");
        break;
        }
        case 13: {
            printf(" Dati denumirele elementului dupa care doriti sa inserati: ");
         fflush(stdin); gets(adr);
         cautat=searchs(head,adr);
         if (cautat==NULL)
         {
        puts("Acest element nu exista");
        getch();
        break;
         }
         puts(" Introduceti datele despre elementul care doriti sa-l adaugati");
         introducere(&s);
         rs=insertafter(head,cautat,s,&n);
         if (rs==-1) {puts("Elementul nu a fost adaugat");}
         if (rs==1) {puts("Elementul a fost adaugat cu succes");}
        system("PAUSE");
        break;
        }
        case 14: {
         if(!head)
         {
         puts(" Memoria nu a fost alocata");
            getch();
            break;
         }
         puts(" Lista de structuri");
         printf("\n");
         show(head);
         printf(" Dati denumirele elementului care doriti sa-l stergeti: ");
         fflush(stdin);
         gets(adr);
         cautat=searchs(head,adr);
         if (cautat==NULL)
         {
           puts(" Acest element nu exista");
           getch();
           break;
         }
         head=deletes(head,cautat,&n);
         puts(" Stergerea a fost efectuata cu succes");
         getch();
         break;
        system("PAUSE");
        break;
        }
        case 15: {
            printf(" Dati indicele cartii de unde doriti sa impartiti lista in doua: ");
            scanf("%d", &n1);
            split(head,&head1, n1);
            show(head);
            puts("\n Lista dupa despartire");
            showhead1(head,head1);
        system("PAUSE");
        break;
        }
        case 16: {
            if(head1){
        join(head,&head1);
        puts(" Unirea a avut loc cu succes!");
        }
        else{puts(" Despartiti lista!");    }
        system("PAUSE");
        break;
        }
        case 17: {
        if(!head)
        {
        puts(" Memoria nu a fost alocata");
        getch();
        break;
        }
        printf(" Dati denumirele fisierului in care doriti sa salvati lista: ");
        fflush(stdin);
        gets(num);
        rs=save(head,num);
        if(rs==0) {puts(" Salvarea nu a avut loc");}
        if(rs==1) {puts(" Salvarea s-a efectuat cu succes");m=1;}
        system("PAUSE");
        break;
        }
        case 18:{
        if(!head)
        {
        puts(" Memoria nu a fost alocata");
        getch();
        break;
        }
        else{
        printf(" Dati denumirele fisierului din care doriti sa incarcati lista: ");
        fflush(stdin);
        gets(num);
        rs=load(head,num);
        if(rs==0)
        {
        puts(" Deschiderea nu s-a efectuat");
        getch();
        break;
        }
        if(rs==1)
        {
        id=1;
        puts(" Deschiderea a fost efectuata cu succes");
        printf(" Doriti sa afisati lista incarcata?(1/0): ");
            scanf("%d",&f);
            if(f)
       {
        puts(" Lista incarcata");
        printf("\n");
        show(head);
    }
        }
        }
        system("PAUSE");
        break;
        }
        case 0:{
            if(head){
                if(!m)
      {
    printf(" Informatia va fi pierduta...salvati?(1/0): ");
    scanf("%d",&f);
    if(f)
    {printf(" Dati denumirele fisierului in care doriti sa salvati lista: ");
          fflush(stdin);
          gets(num);
          rs=save(head, num);
          if(rs==0) {puts(" Salvarea nu a avut loc");}
          if(rs==1) {puts(" Salvarea a  fost efectuata cu succes");}
    } else
    printf(" Pentru a iesi apasa-ti tasta 'ENTER'");
    getch();
    free(head);
            head=NULL;
    return 0;
       }
      }
        printf(" Doriti sa iesiti?(1/0): ");
        scanf("%d",&f);
        if(f)
        {
        if(head)
        {
            free(head);
            head=NULL;
        }
        return 0;
        }
        else
        break;
    default:
          puts(" Alegeti optiunea corect");
          getch();
        }
    }
    }
    while(optiune!=0);
    getch();
    return 0;
}
functions.h
#include "carti.h"
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
 
void show2(carti *head){
    carti *p;
    p=head;
        printf("  Denumire: %s\n ",p->denumire);
        printf(" Autor: %s\n ",p->autor);
        printf(" Editura: %s\n ",p->editura);
        printf(" Buget: %d\n ",p->buget);
        printf(" Lansare: %d\n ",p->lansare);
}
void introducere(carti* head)
{
  carti *p;
  p=head;
  if(!p)
  p = (carti*)malloc(sizeof(*p));
  printf(" Denumire: ");
  fflush(stdin);
  gets(p->denumire);
  printf(" Autor: ");
  fflush(stdin);
  gets(p->autor);
  printf(" Editura: ");
  gets(p->editura);
  printf(" Buget: ");
  scanf("%d",&p->buget);
  printf(" Lansare: ");
  fflush(stdin);
  scanf("%d",&p->lansare);
  p=p->next;
}

int create(carti* head,int n) {
carti *p,*q;
int i;
    for(i=0;i<n;i++){
    p=(carti*)malloc(sizeof(*p));
 
    if(!p)
    return NULL;
    if(i==0)
    {head=p;}
    else
    {q->next=p;}
    p->next=NULL;
    q=p;
  }
   puts(" Memoria a fost alocata cu succes!!!");
  return head;
 
}
 
void read(carti* head,int n){
     carti *p;
     int i=1;
     printf(" Dati informatia despre carti\n");
     p=head;
     while(p){
        printf("\nCARTI %d\n",i++);
        printf(" Denumire: ");
        fflush(stdin);
        gets(p->denumire);
        printf(" Autor: ");
        fflush(stdin);
        gets(p->autor);
        printf(" Editura: ");
        fflush(stdin);
        gets(p->editura);
        printf(" Buget: ");
        scanf(" %d",&p->buget);
        printf(" Lansare: ");
        scanf(" %d",&p->lansare);
        p=p->next;
        if(p==head){
        break;}
     }
}
void show(carti* head){
    int i=1;
    carti *p;
    p=head;
    while(p){
        printf("CARTI %d\n ",i++);
        printf(" Denumire: %s\n ",p->denumire);
        printf(" Autor: %s\n ",p->autor);
        printf(" Editura: %s\n ",p->editura);
        printf(" Buget: %d\n ",p->buget);
        printf(" Lansare: %d\n ",p->lansare);
        p=p->next;
 
    }
}
 
carti* searchs(carti* head,char adr[]){
     carti *p;
     p=head;
     while(p){
        if(stricmp(p->denumire,adr)==0){return p;}
        p=p->next;
     }
     return NULL;
}
void modify(carti *head,carti* a){
    int t;
     printf(" Doriti sa modificati denumirele?(1/0): ");
     scanf("%d",&t);
     if(t){
     printf(" Dati denumirele nou: ");
     fflush(stdin);
     gets(a->denumire);
    }
     printf(" Doriti sa modificati autor?(1/0): ");
     scanf("%d",&t);
     if(t){
     printf(" Dati autor noua: ");
     fflush(stdin);
     gets(a->autor);
 }
      printf(" Doriti sa modificati editurale?(1/0): ");
      scanf("%d",&t);
      if(t){
       printf(" Dati editurale nou: ");
       fflush(stdin);
      gets(a->editura);
 }
 
       printf(" Doriti sa modificati buget?(1/0): ");
       scanf("%d",&t);
      if(t){
       printf(" Dati numarul nou al populatiei: ");
       fflush(stdin);
     scanf("%d",&a->buget);
 }
      printf(" Doriti sa modificati lansare?(1/0): ");
      scanf("%d",&t);
     if(t){
       printf(" Dati numarul nou al suprafetei: ");
       fflush(stdin);
       scanf("%d",&a->lansare);
 }
}
int lenght(carti* head){
    carti *p;
    int l=0;
    p=head;
    while(p){
        l++;
        p=p->next;
        if(p==head)break;
    }
    return l;
}
void sorts(carti* head){
    carti *a,*b;
    int i,k,l;
    a=(carti*)malloc(sizeof(carti));
    if(!a){puts(" Memoria nu a fost alocata");
    exit(1);}
    b=(carti*)malloc(sizeof(carti));
    if(!b){puts(" Memoria nu a fost alocata");
    exit(1);}
    l=lenght(head);
    for(i=0;i<l-1;i++){
        a=head;
        b=a->next;
        for(k=0;k<l-1-i;k++){
        if(stricmp(a->denumire,b->denumire)>0){
        swaps(a,b);
        }
        a=a->next;
        b=b->next;
        }
    }
}
void swaps(carti* a,carti* b){
     carti *na,*nb;
     carti t;
     na=a->next;
     nb=b->next;
     t=*a;
     *a=*b;
     *b=t;
     a->next=na;
     b->next=nb;
}
carti *freem(carti* head){
    carti*p,*q;
    if(head==NULL)
    return NULL;
     p=head;
     while(p){
    q=p;
    p=p->next;
    free(p);
    if(p==head)
    break;
  }
  head=NULL;
  return NULL;
}
 
int insertafter(carti* head,carti *b,carti a,int *n)
 {
    carti *p;
    p=(carti *) malloc (sizeof (carti));
    if (p==NULL)
    return -1;
    *p=a;
    if(b->next==NULL)
    {
        p->next=NULL;
        b->next=p;
    }
    else
    {
        p->next=b->next;
        b->next=p;
    }
    *n=*n+1;
    return 1;
 }
carti* insertbefore(carti* head,carti *a,carti b,int *n)
{
    carti *p, *q;
    p=(carti *) malloc (sizeof (carti));
    if (p==NULL)
    return p;
    if (a==head)
    {
        *p=b;
        p->next=a;
        head=p;
        return head;
    }
    q=head;
    while (q->next!=a)
    {q=q->next;}
    *p=b;
    q->next=p;
    p->next=a;
    *n=*n+1;
    return head;
}

int prepend()
{
  carti *p;
    p=(carti*)malloc(sizeof(*p));
    if(!p) return 0;
    printf(" Denumire: ");
    fflush(stdin);
    gets(p->denumire);
    printf(" Autor: ");
    fflush(stdin);
    gets(p->autor);
    printf(" Editura: ");
    fflush(stdin);
    gets(p->editura);
    printf(" Buget: ");
    scanf("%d",&p->buget);
    printf(" Lansare: ");
    fflush(stdin);
    scanf("%d",&p->lansare);
    if(head!=NULL)
    {p->next=head;}
    else
    {p->next=NULL;}
    head=p;
    return 1;
}
 
int append(carti* head,carti a,int *n)
{
    carti *p, *q;
    if (head==NULL)
    return 0;
    q=head;
    while(q->next)
  {
    q=q->next;
    if(q==head)
    break;
  }
    p=(carti *)malloc (sizeof(carti));
    if (p==NULL)
    return -1;
    *p=a;
    q->next=p;
    p->next=NULL;
    *n=*n+1;
    return 1;
 
}

carti *deletes(carti* head,carti* a,int *n)
 {
    carti *p;
    p=head;
    if (p->next==NULL)
    {
        head=NULL;
        free(p);
        return head;
    }
    if(p==a)
    {
        head=p->next;
        free(p);
    }
    else
    {
    while(p->next!=a)
    {p=p->next;}
    p->next=a->next; free(a);}
    *n=*n-1;
    return head;
 }

int save(carti* head,char*fname)
 {
    carti*p;
    FILE*fp;
    fp=fopen(fname,"w");
    if(!fp)
    return 0;
    p=head;
    while(p)
    {
        fprintf(fp,"%s %s %s %d %d",p->denumire,p->autor,p->editura,p->buget,p->lansare);
        p=p->next;
        if(p==head)
        break;
    }
    fclose(fp);
    return 1;
 }
 
int load(carti* head,char*fname)
 {
    carti*p;
    FILE *fp;
    int i=1,l;
    l=lenght(head);
    fp=fopen(fname,"r");
    p=head;
    for(i=0;i<l;i++){
        fscanf(fp,"%s%s%s%d%d",p->denumire,p->autor,p->editura,&p->buget,&p->lansare);
        p=p->next;
    }
    fclose(fp);
    return 1;
}
void join(carti* head,carti **head1){
    carti *p;
    p=head;
    while(p){
        if(p->next==NULL){
            p->next=*head1;
            break;
        }
        p=p->next;
    }
    *head1=NULL;
}
void split(carti *head,carti **head1, int n1){
    carti *p;
    p=head;
    int i=0;
        while(p){
            if(i==n1-1){
                *head1=p->next;
                p->next=NULL;
                break;
            }
            i++;
            p=p->next;
}
        return;
}
void showhead1(carti *head,carti *head1){
    int i=1;
    carti *p;
    p=head1;
    while(p){
        printf("CARTI %d\n ",i++);
        printf(" Denumire: %s\n ",p->denumire);
        printf(" Autor: %s\n ",p->autor);
        printf(" Editura: %s\n ",p->editura);
        printf(" Buget: %d\n ",p->buget);
        printf(" Lansare: %d\n ",p->lansare);
        p=p->next;
 
    }
}
carti.h
#ifndef ONE
#define ONE
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
 
struct carti{
    char denumire[100];
    char autor[100];
    char editura[100];
    int buget;
    int lansare;
    struct carti* next;
};
typedef struct carti carti;
carti *head;
 
void show2(carti *head);
void introducere(carti* head);
int create(carti* head,int n);
void read(carti* head,int n);
void show(carti* head);
carti* searchs(carti* head,char adr[]);
void modify(carti *head,carti* a);
int lenght(carti* head);
void sorts(carti* head);
void swaps(carti* a,carti* b);
carti* freem(carti* head);
carti* insertbefore(carti* head,carti *a,carti b,int *n);
int insertafter(carti* head,carti *b,carti a,int *n);
int prepend();
int append(carti* head,carti a,int *n);
carti *deletes(carti* head,carti* a,int *n);
int save(carti* head,char*fname);
int load(carti* head,char*fname);
void join(carti* head,carti **head1);
void split(carti* head,carti **head1,int n1);
void showhead1(carti *head,carti *head1);
#endif // ONE

Решение задачи: «Ошибка в коде си»

textual
Листинг программы
carti* create(carti* head,int n)

Объяснение кода листинга программы

В данном коде реализована функция create, которая создает новую переменную типа carti и добавляет ее в начало связанного списка head. Параметр n представляет собой значение, которое будет храниться в новом элементе связанного списка. Код работает следующим образом:

  1. Создается новый элемент new_carti типа carti.
  2. Значение n присваивается полю data элемента new_carti.
  3. new_carti добавляется в начало связанного списка head с помощью указателя head.
  4. Возвращается указатель на новый элемент new_carti. Список переменных и их значений:
  5. head - указатель на голову связанного списка.
  6. new_carti - новый элемент связанного списка типа carti.
  7. n - значение, которое будет храниться в новом элементе связанного списка.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.9 из 5