user-0 提问: 一个应该是主函数上的错误

回复:
user: user-1
content: 电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址； 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……

user: user-2
content: #include <stdio.h> #include <malloc.h> #include <stdlib.h> #define NO 0 #define OK 1 #define TRUE 1 #define FALSE 0 #define max 100 typedef int ElemType; struct          \\struct结构变量的声明不用前面的typedef吧  { int top; ElemType *base; int stacksize; }table;   struct {  int *base; int front; int rear; }man;  void initstack(table *S);  int push(table *S,ElemType x); int pop(table *S,ElemType *e); int InitQueue(man *Q); int DeQueue(man *Q,ElemType e); int EnQueue(man *Q,ElemType e); int QueueEmpty(man *Q); void list(man *Q);  void initstack(table *S) { S=&table;                                          \\必须初始化结构指针，跟数组不一样 S->base=(ElemType*)malloc(max*sizeof(ElemType)); S->top=0; S->stacksize=max; }/*创建空栈*/  int push(table *S,ElemType x) { { S=&table;                                          \\必须初始化结构指针，跟数组不一样 if(S->top>=S->stacksize) { S->base=(ElemType *)realloc(S->base,(S->stacksize+1)*sizeof(ElemType)); if(!S->base) return NO; S->stacksize++; } S->base[S->top++]=x; return OK; }/*压栈*/  int pop(table *S,ElemType *e) { if(S->top==0) return NO; *e=S->base[--S->top]; return OK; } /*弹栈*/   int InitQueue(man *Q) {  Q->base=(ElemType *)malloc(max*sizeof(ElemType));     if(!Q->base) /* 存储分配失败 */       return NO;     Q->front=Q->rear=0;     return OK; }/* 构造一个空队列Q */  int DeQueue(man *Q,ElemType e) { if(Q->front==Q->rear) /* 队列空 */       return NO;     e=Q->base[Q->front];     Q->front=(Q->front+1)%max;     return OK;  }/* 若队列不空,则删除Q的队头元素,用e返回其值,并返回OK;否则返回ERROR */  int EnQueue(man *Q,ElemType e) {  if((Q->rear+1)%max==Q->front) /* 队列满 */       return NO;     Q->base[Q->rear]=e;     Q->rear=(Q->rear+1)%max;     return OK; }/* 插入元素e为Q的新的队尾元素 */  int QueueEmpty(man *Q) {  if(Q->front==Q->rear) /* 队列空的标志 */       return TRUE;     else       return FALSE; }/* 若队列Q为空队列,则返回TRUE,否则返回FALSE */  void list(man *Q) { int i; i=Q->front; while(i!=Q->rear) { printf("%4d",Q->base[i]); i=(i+1)%max; } }   int main() {  int j,k,n,i,e; man A; man B; table a; InitQueue(&A); InitQueue(&B); initstack(&a); printf("一人几张\n"); scanf("%d",&n); for(i=0;i<n;i++) { printf("\nA的第%d个数:",i+1); scanf("%d",&j); EnQueue(&A,j);  } list(&A); for(i=0;i<n;i++) { printf("\nB的第%d个数:",i+1); scanf("%d",&j); EnQueue(&B,j); } list(&B); for(k=0;k<max;k++) { for(i=max;i>=0;i--)//扫描是否有以入栈的元素与之前元素相同         { if(a.base[i]==j)              break;         }         if(a.base[i]==j)//如果当前栈中有与输入元素相同的值，出栈          for(n=max;n>=i;n--)          { pop(&a,&e); EnQueue(&A,e); }         else if(QueueEmpty(&A)==TRUE) { printf("\nB胜"); break; } else//否则入栈         {  DeQueue(&A,j); push(&a,j);         } for(i=max;i>=0;i--)//扫描是否有以入栈的元素与之前元素相同         { if(a.base[i]==j)              break;         }         if(a.base[i]==j)//如果当前栈中有与输入元素相同的值，出栈          for(n=max;n>=i;n--)          { pop(&a,&e); EnQueue(&B,e); }         else if(QueueEmpty(&B)==TRUE) { printf("\nA胜"); break;   } else//否则入栈         {  DeQueue(&B,j); push(&a,j);         } } return OK; }   看不下去了，我发现现在的CSDN真的是学不到东西，经典的代码看不到，全是一些新手在误导新手

user: user-3
content: 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。

user: user-2
content: typedef struct结构变量的声明不用前面的typedef吧

user: user-0
content: 这个是做一个金钩钓鱼，不用洗牌，不用发牌，无视大小王，只是10以内。http://jingyan.baidu.com/article/d169e1869e9b1c436611d8ef.html大概玩法应该是在for(k=0;k<max;k++)这句之后错了，但我还是不会改