Ошибка в коде си - C (СИ)
Формулировка задачи:
Добрый день,буду благодарен за помощь в данном коде,выдает ошибку.
[Warning] return makes integer from pointer without a cast
[Warning] assignment makes pointer from integer without a cast
main.c
functions.h
carti.h
#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; }
#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; } }
#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
представляет собой значение, которое будет храниться в новом элементе связанного списка.
Код работает следующим образом:
- Создается новый элемент
new_carti
типаcarti
. - Значение
n
присваивается полюdata
элементаnew_carti
. new_carti
добавляется в начало связанного спискаhead
с помощью указателяhead
.- Возвращается указатель на новый элемент
new_carti
. Список переменных и их значений: head
- указатель на голову связанного списка.new_carti
- новый элемент связанного списка типаcarti
.n
- значение, которое будет храниться в новом элементе связанного списка.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д