Prosím,pomohl by mi někdo s Céčkem?

Vývojová prostředí, aplikace, skripty, http://www... síťové programy, internet, sdílení...
Odpovědět
Martin236
Nováček
Nováček
Registrován: 21. kvě 2006

Prosím,pomohl by mi někdo s Céčkem?

Příspěvek od Martin236 »

Mám program napsaný v jazyku C a potřeboval bych pomoc s finálními upravami.Pomohl by mi někdo s ošetřením vstupu a testováním hodnot vstupů,alokaci paměti,zda ukládaný soubor nepřepisuje jiný,test hodnot vstup. parametrů ,prosím,pomožte mi!už mi jedna dobrá duše pomohla ale nestačila vše.Prosím,pomožte mi někdo,co nejdříve se ozvěte!Děkuji MOC!

Moje ICQ:
283-039-147

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

#define MAXBUF 255

typedef struct bed { /*definovani struktury*/
char *name;
char *surname;
char food;
struct bed *next;
} BED;

void vlozit(BED **head) { /*head - pointer na pointer na prvni zaznam*/
BED *newbed = (BED *)malloc(sizeof(BED)); /*alokuje pamet pro novy zaznam*/
char tmp[MAXBUF]; /*pole charu o velikosti MAXBUF*/

BED *akt; /*pointer namiren na aktualni zaznam*/
akt= *head;


fflush(stdin); /*vycisti buffer*/

printf("Jmeno hosta?: ");
gets(tmp);
newbed->name = (char *)malloc(strlen(tmp) * sizeof(char) + 1); /*alokuje pamet pro zaznam jmeno,pointer na char,alokuje se podle jeho delky-strlen plus ukoncovaci znak*/
strcpy(newbed->name, tmp);

if (newbed->name == NULL) { /*test volne pameti*/
printf("Malo Pameti/n");
exit(1);
}

printf("Prijmeni hosta?: ");
gets(tmp); /*stejne jako predesly pripad jen pro dalsi zaznam prijmeni*/
newbed->surname = (char *)malloc(strlen(tmp) * sizeof(char) + 1);
strcpy(newbed->surname, tmp);

if (newbed->surname == NULL) { /*test volne pameti*/
printf("Malo Pameti/n");
exit(1);
}

printf("Zpusob stravovani?(snidane-s, polopenze-o, plna penze-p: ");
newbed->food = getchar();





newbed->next = NULL; /*dulezite, sluzi jako zarazka*/

if (akt == NULL) { /*pokud aktualni zaznam vrati NULL,pointer se namiri na novou strukturu*/
*head = newbed;
} else {
while (akt->next != NULL)
akt = akt->next;
akt = akt->next = newbed;
}
}

void del(BED *akt) { /*funkce del uvolni pamet kterou zabiral zaznam.pamet,kterou si alokoval,musi se uvolnit*/
free((void *)akt->name);
free((void *)akt->surname);
free((void *)akt);
}

void odhlas(BED **head) {
char str[MAXBUF];
BED *akt = *head, *pred = NULL;
fflush(stdin);



printf("Zadejte jmeno: ");

gets(str);

while (akt != NULL && strcmp(str, akt->name)) {
pred = akt; /*odlozi zaznam jako predesly*/
akt = akt->next;
}

if (akt == NULL) { /*testovani pokud by nenasel zadny zaznam*/
printf("Zaznam sa nenasel");
getch();
return;
}

if (pred == NULL) { /*maze sa prvni zaznam */
*head = akt->next; /*zmena pointeru na prvni zaznam*/
del(akt);
return;
}

pred->next = akt->next;
del(akt);
}


void smaz(BED *akt) {
if (akt != NULL) {
smaz(akt->next);
del(akt);
}
}

void ulozenie (FILE *out, BED *head) {
BED *akt = head;

while (akt != NULL) {

fprintf(out, akt->name); fprintf(out, "\n");
fprintf(out, akt->surname); fprintf(out, "\n");
fprintf(out, &akt->food); fprintf(out, "\n");

akt = akt->next;
}

fflush(out); /*zapiseme*/
}

void nacitanie(FILE *in, BED **head) {
char temp[MAXBUF];
BED* tmpbed;
BED *akt;

akt = (*head) = (BED*)malloc(sizeof(BED));



fscanf(in, "%s", temp);
(*head)->name = (char*)malloc(strlen(temp) + 1);
strcpy((*head)->name, temp);

fscanf(in, "%s", temp);
(*head)->surname = (char*)malloc(strlen(temp) + 1);
strcpy((*head)->surname, temp);


fscanf(in, "%s", &(*head)->food);

(*head)->next = NULL;




while(fscanf(in, "%s", temp) != EOF) {
tmpbed = (BED*)malloc(sizeof(BED));

tmpbed->name = (char*)malloc(strlen(temp) * sizeof(char) + 1);
strcpy(tmpbed->name, temp);

fscanf(in, "%s", temp);
tmpbed->surname = (char*)malloc(strlen(temp) * sizeof(char) + 1);
strcpy(tmpbed->surname, temp);

fscanf(in, "%s", &(tmpbed->food));

tmpbed->next = NULL;

akt->next = tmpbed;
akt = akt->next;
}
}

void vypis(BED *akt) { /*slouzi pro vypsani vsech zaznamu*/
while(akt != NULL) {
printf("%s\n", akt->name);
printf("%s\n", akt->surname);
printf("%c\n\n", akt->food);

akt = akt->next;
}
getch(); /*ceka na uzivatele*/
}

void main() {
char c;

BED *head = NULL, *list = NULL;
FILE *file = fopen("hoste.txt", "a+");
clrscr();
nacitanie(file, &head); /*nacte zaznamy*/


do {
system("cls"); /*menu pro komunikaci*/
printf("1. ubytovani\n");
printf("2. odhlaseni\n");
printf("3. vypis\n");
printf("4. konec\n");

switch(c = getch()) {
case '1': vlozit(&head); break;
case '2': odhlas(&head); break;
case '3': vypis(head); break;
}
} while (c != '4');

ulozenie(file, head); /*ulozi do souboru*/

fclose(file); /*zavre soubor*/

smaz(head);
}
Odpovědět

Zpět na „Programování a web“