【发布时间】:2013-12-06 16:29:25
【问题描述】:
所以我正在创建一个程序,该程序将在队列中显示学生的 ID 以及他们的姓名。我终于可以显示用户名了,但我还需要显示 ID。我害怕开始乱搞,把一切都搞砸了。有人告诉我通往光明的路;)。
编辑:感谢 Paul R 指出这一点。直到现在我才意识到我一次只能显示一个字母作为我的学生姓名,我在这里做错了什么?
#include <stdio.h>
#include <stdlib.h>
struct queueNode
{
int data1;
char data;
struct queueNode *nextPtr;
};
typedef struct queueNode QueueNode;
typedef QueueNode *QueueNodePtr;
void printQueue (QueueNodePtr currentPtr);
int isEmpty (QueueNodePtr headPtr);
char dequeue (QueueNodePtr *headPtr, QueueNodePtr *tailPtr);
void enqueue (QueueNodePtr *headPtr, QueueNodePtr *tailPtr, char value);
void instructions (void);
int main (void)
{
QueueNodePtr headPtr=NULL;
QueueNodePtr tailPtr=NULL;
int choice;
char name;
int ID;
instructions();
printf("?");
scanf("%d",&choice);
while(choice !=3)
{
switch(choice)
{
case 1:
printf("Enter ID: ");
scanf("\n%d", &ID);
printf("Enter Name: ");
scanf("\n%c", &name);
//RETURN HERE TO ENTER LAST NAME
enqueue(&headPtr, &tailPtr, ID);
enqueue(&headPtr, &tailPtr, name);
printQueue(headPtr);
break;
case 2:
if (!isEmpty(headPtr))
{
ID=dequeue(&headPtr, &tailPtr);
name=dequeue(&headPtr, &tailPtr);
printf("%d %c has been dequeued.\n", ID, name);
}
printQueue(headPtr);
break;
default:
printf("Invalid choice.\n\n");
instructions();
break;
}
printf("?");
scanf("%d", &choice);
}
printf("End of Run\n");
return 0;
}
void instructions(void)
{
printf("Enter your choice: \n"
"1 to add to queue\n"
"2 to remove from queue\n"
"3 to exit\n");
}
void enqueue (QueueNodePtr *headPtr, QueueNodePtr *tailPtr, char value)
{
QueueNodePtr newPtr;
newPtr=malloc(sizeof(QueueNode));
if(newPtr!=NULL)
{
newPtr->data = value;
newPtr->nextPtr = NULL;
if(isEmpty (*headPtr))
{
*headPtr=newPtr;
}
else
{
(*tailPtr)->nextPtr=newPtr;
}
*tailPtr=newPtr;
}
else
{
printf("%c not inserted. No memory available.\n", value);
}
}
char dequeue (QueueNodePtr *headPtr, QueueNodePtr *tailPtr)
{
char value;
QueueNodePtr tempPtr;
value = (*headPtr)->data;
tempPtr = *headPtr;
*headPtr = (*headPtr)->nextPtr;
if(*headPtr==NULL)
{
*tailPtr = NULL;
}
free(tempPtr);
return value;
}
int isEmpty(QueueNodePtr headPtr)
{
return headPtr==NULL;
}
void printQueue (QueueNodePtr currentPtr)
{
if(currentPtr==NULL)
{
printf("Queue is empty. \n\n");
}
else
{
printf("The Queue is: \n");
while(currentPtr !=NULL)
{
printf("%c --> ", currentPtr ->data);
currentPtr = currentPtr->nextPtr;
}
printf("NULL\n\n");
}
}
【问题讨论】:
-
你们学生只有一个角色名???
-
@PaulR wow 没有意识到我这样做了。我在那里做错了什么?
-
你为什么分别
enqueuename和ID是你?printQueue和enqueue不应将 ID 作为value传递。