Prosím,pomohl by mi někdo s Céčkem?
Napsal: ned 21. kvě 2006, 19:00
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);
}
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);
}