Tjenna!
Har en uppgift i C som tyvrr skulle varit inne i sndags, men har blivit frsenad p grund av annat plugg och skit.
Jag skall gra en dynamisk k som jag i princip r frdig med, men det r vissa saker som jag inte kan f huvudet runt.... Hade varit super om ni kunde ta en titt p det och hitta felen!
main.c
menu.c
queue.c
queue.h
Har en uppgift i C som tyvrr skulle varit inne i sndags, men har blivit frsenad p grund av annat plugg och skit.
Jag skall gra en dynamisk k som jag i princip r frdig med, men det r vissa saker som jag inte kan f huvudet runt.... Hade varit super om ni kunde ta en titt p det och hitta felen!
main.c
Citat:
#include <stdio.h>
#include "queue.h"
int main(){
do{
show_menu();
run_selection(get_selection());
}while(pause());
return 0;
}
#include "queue.h"
int main(){
do{
show_menu();
run_selection(get_selection());
}while(pause());
return 0;
}
menu.c
Citat:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "queue.h"
/* Pausar och vntar p att anvndaren skall trycka p enter fr att
ge anvndaren mer frstelse i vad som hnder */
int pause(){
int c;
printf("\n Tryck enter fr att fortstta!");
/* Tmmer inmatningsstrmmen */
while((c = getchar()) != '\n' && c != EOF);
getchar();
return 1;
}
/* Tmmer skrmen p text (skriver egentligen ut ett antal tomma rader) och skriver ut menyn t anvndaren */
void show_menu(){
/*Tmmer skrmen*/
printf("\033[2J");
/*Skriver ut menyn fr anvndaren.*/
printf ("\n**** Meny ****\n");
printf ("1. Lgg till personer i kn\n");
printf ("2. Ta bort personer ur kn\n");
printf ("3. Skriv ut kn\n");
printf ("4. Avsluta\n\n");
}
/* Ber anvndaren skriva in ett val mellan 1 och 4 och returnerar sedan detta till nsta funktion som anropat get_selection */
int get_selection(){
int val;
printf(" Ange ett alternativ 1-4: ");
scanf("%d", &val);
return val;
}
/* Kr den funktion som anvndaren valt */
void run_selection(int selection){
printf("\n");
switch (selection){
case 1:
add_to_queue();
break;
case 2:
remove_from_queue();
break;
case 3:
print_queue();
break;
case 4:
exit(0);
break;
default:
printf( "Ogiltigt val! Tryck enter och vlj ett alternativ mellan 1-4" );
break;
}
}
/* Lgger till en person i kn */
void add_to_queue(){
int data;
printf("\nSkriv in:");
scanf("%d", data);
enqueue(data);
}
/* Tar bort en person ur kn */
void remove_from_queue(){
int data;
printf("\nTar bort den frsta");
dequeue(*data);
}
void delete_from_queue(){
int data;
printf("\nVad ska tas bort?");
scanf("%d", data);
delete(*data);
}
#include <stdlib.h>
#include <string.h>
#include "queue.h"
/* Pausar och vntar p att anvndaren skall trycka p enter fr att
ge anvndaren mer frstelse i vad som hnder */
int pause(){
int c;
printf("\n Tryck enter fr att fortstta!");
/* Tmmer inmatningsstrmmen */
while((c = getchar()) != '\n' && c != EOF);
getchar();
return 1;
}
/* Tmmer skrmen p text (skriver egentligen ut ett antal tomma rader) och skriver ut menyn t anvndaren */
void show_menu(){
/*Tmmer skrmen*/
printf("\033[2J");
/*Skriver ut menyn fr anvndaren.*/
printf ("\n**** Meny ****\n");
printf ("1. Lgg till personer i kn\n");
printf ("2. Ta bort personer ur kn\n");
printf ("3. Skriv ut kn\n");
printf ("4. Avsluta\n\n");
}
/* Ber anvndaren skriva in ett val mellan 1 och 4 och returnerar sedan detta till nsta funktion som anropat get_selection */
int get_selection(){
int val;
printf(" Ange ett alternativ 1-4: ");
scanf("%d", &val);
return val;
}
/* Kr den funktion som anvndaren valt */
void run_selection(int selection){
printf("\n");
switch (selection){
case 1:
add_to_queue();
break;
case 2:
remove_from_queue();
break;
case 3:
print_queue();
break;
case 4:
exit(0);
break;
default:
printf( "Ogiltigt val! Tryck enter och vlj ett alternativ mellan 1-4" );
break;
}
}
/* Lgger till en person i kn */
void add_to_queue(){
int data;
printf("\nSkriv in:");
scanf("%d", data);
enqueue(data);
}
/* Tar bort en person ur kn */
void remove_from_queue(){
int data;
printf("\nTar bort den frsta");
dequeue(*data);
}
void delete_from_queue(){
int data;
printf("\nVad ska tas bort?");
scanf("%d", data);
delete(*data);
}
queue.c
Citat:
#include <stdlib.h>
#include <stdio.h>
typedef struct node {
int data;
struct node *next;
} node;
typedef struct {
struct node *first;
struct node *last;
} queue_c;
static queue_c queueref;
//Funktionsprototyper
#include "queue.h"
static int destroy_node(node node_ref);
static node *create_node(int data);
int enqueue(int data)
{
node *new_node, *last_node;
int result = 0;
new_node = create_node(data);
if(new_node != NULL){
if(queueref.first != NULL){
queueref.first = new_node;
queueref.last = new_node;
}
else{
queueref.last->next = new_node;
queueref.last = new_node;
}
result = 1;
}
return result;
}
static node *create_node(int data)
{
node *noderef;
noderef = (node*) malloc(sizeof(node));
noderef->data = data;
noderef->next = NULL;
return noderef;
}
int dequeue(int *data)
{
node *first_node;
int result = 0;
if(queueref.first != NULL){
first_node = queueref.first;
data = (int*) queueref.first->data;
queueref.first = first_node->next;
result = destroy_node(first_node);
}
return result;
}
static int destroy_node(node *node_ref)
{
free(node_ref);
return node_ref == NULL;
}
void print_queue()
{
node *curr_ptr = queueref.first;
if(curr_ptr != NULL){
while(curr_ptr != NULL){
printf("%d -> ", curr_ptr->data);
curr_ptr = curr_ptr->next;
}
}
else{
printf("Kn r tom!");
}
}
int delete(int data)
{
int result = 0;
node *curr_ptr;
node *prev_ptr;
node *temp_ptr;
if(queueref.first == NULL){
printf("Kn r tom!");
}
else if(queueref.first->data == data){
temp_ptr = queueref.first;
queueref.first = queueref.first->next;
result = destroy_node(temp_ptr);
}
else{
prev_ptr = queueref.first;
curr_ptr = queueref.first->next;
while(curr_ptr != NULL){
if(curr_ptr->data == data){
result = 1;
break;
}
prev_ptr = curr_ptr;
curr_ptr = curr_ptr->next;
}
if(result){
temp_ptr = curr_ptr;
prev_ptr->next = temp_ptr->next;
result = destroy_node(temp_ptr);
}
else{
printf("Ingen node innehll talet: %d", data);
}
}
return result;
}
#include <stdio.h>
typedef struct node {
int data;
struct node *next;
} node;
typedef struct {
struct node *first;
struct node *last;
} queue_c;
static queue_c queueref;
//Funktionsprototyper
#include "queue.h"
static int destroy_node(node node_ref);
static node *create_node(int data);
int enqueue(int data)
{
node *new_node, *last_node;
int result = 0;
new_node = create_node(data);
if(new_node != NULL){
if(queueref.first != NULL){
queueref.first = new_node;
queueref.last = new_node;
}
else{
queueref.last->next = new_node;
queueref.last = new_node;
}
result = 1;
}
return result;
}
static node *create_node(int data)
{
node *noderef;
noderef = (node*) malloc(sizeof(node));
noderef->data = data;
noderef->next = NULL;
return noderef;
}
int dequeue(int *data)
{
node *first_node;
int result = 0;
if(queueref.first != NULL){
first_node = queueref.first;
data = (int*) queueref.first->data;
queueref.first = first_node->next;
result = destroy_node(first_node);
}
return result;
}
static int destroy_node(node *node_ref)
{
free(node_ref);
return node_ref == NULL;
}
void print_queue()
{
node *curr_ptr = queueref.first;
if(curr_ptr != NULL){
while(curr_ptr != NULL){
printf("%d -> ", curr_ptr->data);
curr_ptr = curr_ptr->next;
}
}
else{
printf("Kn r tom!");
}
}
int delete(int data)
{
int result = 0;
node *curr_ptr;
node *prev_ptr;
node *temp_ptr;
if(queueref.first == NULL){
printf("Kn r tom!");
}
else if(queueref.first->data == data){
temp_ptr = queueref.first;
queueref.first = queueref.first->next;
result = destroy_node(temp_ptr);
}
else{
prev_ptr = queueref.first;
curr_ptr = queueref.first->next;
while(curr_ptr != NULL){
if(curr_ptr->data == data){
result = 1;
break;
}
prev_ptr = curr_ptr;
curr_ptr = curr_ptr->next;
}
if(result){
temp_ptr = curr_ptr;
prev_ptr->next = temp_ptr->next;
result = destroy_node(temp_ptr);
}
else{
printf("Ingen node innehll talet: %d", data);
}
}
return result;
}
queue.h
Citat:
int enqueue(int data);
int dequeue(int *data);
void print_queue();
int delete(int data);
void show_menu();
int get_selection();
void run_selection(int selection);
void add_to_queue();
void remove_from_queue();
void delete_from_queue();
int pause();
int dequeue(int *data);
void print_queue();
int delete(int data);
void show_menu();
int get_selection();
void run_selection(int selection);
void add_to_queue();
void remove_from_queue();
void delete_from_queue();
int pause();