user-0 提问: 80分真心求解，队列舞会问题

回复:
user: user-1
content: #include <cstdio> #include <cstdlib> typedef struct {     char name[20];     char sex; }people; typedef people DataType; typedef struct node{     DataType data;     struct node *next; }QueueNode; typedef struct{     QueueNode *front;     QueueNode *rear; }LinkQueue;   void Initial(LinkQueue* Q); void Push(LinkQueue* Q,DataType e); DataType Pop(LinkQueue* Q); int IsEmpty(LinkQueue* Q);   int main() {     int i,pair,number;     LinkQueue F,M;     people p,p_f,p_m;  	Initial(&F);  	Initial(&M);     printf("请输入参加舞会的人数：");     scanf("%d",&number);     getchar();     for(i=1;i<=number;i++)     {         printf("请输入第%d个人的姓名:\n",i);         scanf("%s",p.name);         printf("请输入第%d个人的性别(F/M):\n",i);         scanf("%c",&(p.sex));         getchar();         if(p.sex=='F')             Push(&F,p);         else Push(&M,p);     }     printf("请输入配对总数:");     scanf("%d",&pair);     for(i=1;i<=pair;i++)     {         p_f=Pop(&F);         Push(&F,p_f);           p_m=Pop(&M);         Push(&M,p_f);           printf("第%d对为:女:%s  男:%s\n",i,p_f.name,p_m.name);     }          getchar();     return 0; }   void Initial(LinkQueue *Q) /*将顺序队列置空*/   {    Q->front=Q->rear=NULL; }   /*判队列空*/ int IsEmpty(LinkQueue *Q) {     return Q->front==NULL&&Q->rear==NULL; }   /*进队列*/ void Push(LinkQueue *Q,DataType x) { /*将元素x插入链队列尾部*/     QueueNode *p=(QueueNode *)malloc(sizeof(QueueNode));/*申请新结点*/    // p->data=x;     p->next=NULL;     if(IsEmpty(Q))         Q->front=Q->rear=p;  /*将x插入空队列*/     else     { /*x插入非空队列的尾*/         Q->rear->next=p;     /*p链到原队尾结点后*/         Q->rear=p;           /*队尾指针指向新的尾*/     } }   /*出队列*/ DataType Pop(LinkQueue *Q) {     DataType x;     QueueNode *p;     if(IsEmpty(Q))     {         printf("队列为空");/*下溢*/         exit(1);     }     p=Q->front;                   /*指向对头结点*/     x=p->data;                    /*保存对头结点的数据*/     Q->front=p->next;             /*将对头结点从链上摘下*/     if(Q->rear==p)/*原队中只有一个结点，删去后队列变空，此时队头指针已为空*/         Q->rear=NULL;     free(p);   /*释放被删队头结点*/     return x;  /*返回原队头数据*/ }

user: user-0
content: 引用 1 楼 pengzhixi 的回复:输入scanf("%c",p.sex);这个之后你就不和之前一样把回车吃掉？ 我试过了  还是不行啊

user: user-2
content: 仅供参考：//舞会上，男士们（m人）和女士们（n人, n<m）进入舞厅时，各自排成一队。跳舞开始时，依次从男队和女队的队头上各出一人配成舞伴。 //男队中未配对者等待下一轮舞曲。现要求写一算法模拟上述舞伴配对问题。在第t首曲子时，第x个女生和第几个男生配对跳舞？ #include <stdio.h> #include <string.h> #define MAX 26 int m,n,t,x,y,i,j,k; char md[MAX]; char nd[MAX]; char c; void main() {     while (1) {         printf("Input n m(1<=n<m<=%d):",MAX);         fflush(stdout);         rewind(stdin);         if (2==scanf("%d%d",&n,&m)) {             if (1<=n && n<m && m<=MAX) break;         }     }     while (1) {         printf("Input t x(1<=t<=%d 1<=x<=%d):",MAX,n);         fflush(stdout);         rewind(stdin);         if (2==scanf("%d%d",&t,&x)) {             if (1<=t && t<=MAX && 1<=x && x<=n) break;         }     }     for (i=0;i<m;i++) md[i]='A'+i;     for (i=0;i<n;i++) nd[i]='a'+i;     k=0;     for (i=0;i<t;i++) {         printf("%2d: ",i+1);         for (j=0;j<n;j++) {             c=' ';             if (i==t-1 && j==x-1) {c='*';y=k+1;}             printf("%c%c%c",md[k],nd[j],c);             k=(k+1)%m;         }         printf("\n");     }     printf("%d\n",y);  }

user: user-1
content: 输入scanf("%c",p.sex);这个之后你就不和之前一样把回车吃掉？