2015-05-30 2 views
0

Итак, вот код, который у меня есть на данный момент.Программа для печати из очереди печатает номер вместо

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

struct cake { 
    char name; 
    int waitTime; 
    int prepTime; 
    int bakeTime; 
    int turnTime; 
}; 

struct cake redVelvet(){ 
    struct cake c; 
    c.name = "R"; 
    c.waitTime = 0; 
    c.prepTime = 60; 
    c.bakeTime = 30; 
    c.turnTime = 0; 
    return c; 
}; 
struct Node { 
    struct cake cake; 
    struct Node* next; 
}; 
// Two glboal variables to store address of front and rear nodes. 
struct Node* front = NULL; 
struct Node* rear = NULL; 

// To Enqueue an integer 
void Enqueue(struct cake x) { 
    struct Node* temp = 
     (struct Node*)malloc(sizeof(struct Node)); 
    temp->cake = x; 
    temp->next = NULL; 
    if (front == NULL && rear == NULL){ 
     front = rear = temp; 
     return; 
    } 
    rear->next = temp; 
    rear = temp; 
} 

// To Dequeue an integer. 
void Dequeue() { 
    struct Node* temp = front; 
    if (front == NULL) { 
     printf("Queue is Empty\n"); 
     return; 
    } 
    if (front == rear) { 
     front = rear = NULL; 
    } 
    else { 
     front = front->next; 
    } 
    free(temp); 
} 

struct cake Front() { 
    if (front == NULL) { 
     printf("Queue is empty\n"); 
     return; 
    } 
    return front->cake; 
} 

void Print() { 
    struct Node* temp = front; 
    while (temp != NULL) { 
     printf("%d ", temp->cake.name); 
     temp = temp->next; 
    } 
    printf("\n"); 
} 


int main(void){ 

    Enqueue(redVelvet()); 
    Enqueue(redVelvet()); 
    Print(); 
    getchar(); 

} 

Так на самом деле я собираюсь иметь много разных пирожных, и если подразумеваются определенные условия, они будут введены в очередь LinkedList. Однако в качестве образца я создал один тип торта (красный бархат) и добавил его в очередь через мою функцию очереди, а затем попытался распечатать его. Однако мой вывод «88 88»

Я хочу, чтобы он печатал вместо названия торта.

+0

Вы используете '% d' спецификатор формата для целых чисел, так что уверен, он печатает целое число, и вам повезло, что ваша программа не сбой. '% s' - спецификатор для строк. –

+0

Ваше имя торта - это символ, который является небольшим числом, и вы печатаете их как цифры, используя «% d». Измените его на char * и напечатайте их, используя «% s». – Tim3880

+0

в C, не возвращайте возвращаемое значение из malloc() и семейства функций. всегда проверяйте (! = NULL) возвращаемое значение из malloc() и семейство функций, чтобы гарантировать успешную операцию – user3629249

ответ

2

Следуя 2 линии изменения кода необходимо

c.name = 'R'; 

Внутри функции печати типа форматировочной должен соответствовать типу переменной

printf("%c ", temp->cake.name); 
+0

Извини, что я плохой. Я изменил его, но теперь я получаю сообщение об ошибке. Исключение при первой возможности в 0x0FF6FB53 (msvcr120d.dll) в файле BakerySimulation.exe: 0xC0000005: Место чтения нарушения доступа 0x00000052. Если есть обработчик для этого исключения, программа может быть безопасно продолжена. – Kando

+0

'exception' это C или C++? – Steephen

+0

@RidwanSameer, какая строка показывает ошибку? – Steephen

Смежные вопросы