user-0 提问: 约瑟夫环~~ 编译出错！！！！

回复:
user: user-1
content: 引用 3 楼 turingo 的回复:基本语法完全不对，建议先找本《C Primer Plus》，从基础看起。 ++ 你对于C的语法，还没有搞懂，所以会这样。 强烈建议看书。

user: user-2
content: main中   link *creat(); 改成 create();

user: user-3
content: 纸上学来终觉浅， 绝知此事要躬行。

user: user-1
content: 我记得，约瑟夫环， 只会做以下事情。 1）建立循环链表，并初始化节点数据。 2）输出退出的节点信息,步骤如下，   这个，实际就是查找，输出，删除节点。    2.1）报数，    2.2）从链表上摘除节点，     2.3）输出摘除的节点信息。    2.4）释放摘除的节点 难道，你这个有什么特殊要求么？？？？ 下面那些 ??? 的那些个赋值操作，有何用途？  你的原代码，错误太多，比如Delete() 函数里的n,m 没有初始化，就用作循环次数。  给你修改了一下，可以运行了。  不知道你自己修改的结果如何，帖出来瞧瞧。 自己做出来的，印象更深刻一些。

user: user-3
content: 偶遇到类似问题都是用 “每次用/*...*/注释掉不同部分再重新编译，直到定位到具体语法出错的位置。” 的方法解决的。

user: user-3
content: //假设有n个人团团围做，从第1个人开始数数，数到第m个人时候，第m个人出列， //然后继续从1开始数数，数到第m个人退出 #include <stdio.h> #include <conio.h> int i,k,t; int n,m; static char f[1001];//0该座位未出圈,1该座位已出圈 void main() {     while (1) {         printf("Input n m(1000>=n>=m>=1):");         fflush(stdout);         rewind(stdin);         if (2==scanf("%d%d",&n,&m)) {             if (1000>=n && n>=m && m>=1) break;         }     }     t=0;//已出圈总人数     i=1;//座位编号     k=1;//当前要数的数     while (1) {         if (0==f[i]) {             if (m==k) {                 t++;                 f[i]=1;                 printf("%3d ",i);                 if (0==t%10) printf("\n");                 if (t>=n) break;             }             k++;if (k>m) k=1;         }         i++;if (i>n) i=1;     }     cprintf("Press any key ...");     getch(); }

user: user-4
content: 基本语法完全不对，建议先找本《C Primer Plus》，从基础看起。  引用 楼主 u012257679 的回复:#include<stdio.h> #include<stdlib.h> struct node   //运用结构体定义链表 {     int number;         //序号 	int password;       //密码     struct node *next; //指向本结构体的结点指针 }link,*p,*q,*head;     //node类变量link,结点p、q,头指针head link *creat()  //创建循环链表 { 	int n; 	int i;     for(i=1;i<=n;i++) 	{ 		if(i==1) 		{ 			head=p=(link*)malloc(sizeof(struct link));//开辟新空间 		} 		else 		{ 			q=(struct link*)malloc(sizeof(struct link)); 			p->next=q; 			p=q;     //连接结点 		} 	} 	 	p->next=head;  //头尾相连，形成循环链表 	p=head; 	return head; } void Delete()  //实现某人出列后重新开始，只要删掉此人所在结点即可 { 	int n,m; 	for (int j=1;j<=n;j++) 	{ 		for(int i=1;i<m;i++) 		{	 			p=p->next;   //报数小于m时，指针后移 		} 		m=p->password; 		p->number=p->next->number; 		p->password=p->next->password; 		q=p->next; 		p->next=p->next->next;  		free(q);  //释放p的内存 		printf("%d",p->number);  //输出编号 	} } int main() {     int i,j; 	int n; //人数 	int m;//初始值m     printf("请输入总人数\n");     scanf("%d",&n);    //输入整型变量n     link *creat();     printf("输入这些人的密码\n");     for (i=0;i<n;i++)     {         scanf("%d",&(p->password));     }     printf("请输入M的初值\n");     scanf("%d",&m); //输入整型变量m 	printf("出列顺序为：");     Delete();     printf("\n");     return 0; 	system("pause"); }    编译报错为： C:\Users\xuqianqian\Desktop\yuesefu.cpp(9) : error C2143: syntax error : missing ';' before '*' C:\Users\xuqianqian\Desktop\yuesefu.cpp(9) : error C2501: 'link' : missing storage-class or type specifiers C:\Users\xuqianqian\Desktop\yuesefu.cpp(9) : error C2371: 'link' : redefinition; different basic types         C:\Users\xuqianqian\Desktop\yuesefu.cpp(8) : see declaration of 'link' C:\Users\xuqianqian\Desktop\yuesefu.cpp(10) : error C2501: 'creat' : missing storage-class or type specifiers C:\Users\xuqianqian\Desktop\yuesefu.cpp(17) : error C2059: syntax error : ')' C:\Users\xuqianqian\Desktop\yuesefu.cpp(21) : error C2027: use of undefined type 'link'         C:\Users\xuqianqian\Desktop\yuesefu.cpp(21) : see declaration of 'link' C:\Users\xuqianqian\Desktop\yuesefu.cpp(21) : error C2440: '=' : cannot convert from 'struct creat::link *' to 'struct node *'         Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast C:\Users\xuqianqian\Desktop\yuesefu.cpp(29) : error C2440: 'return' : cannot convert from 'struct node *' to 'int'         This conversion requires a reinterpret_cast, a C-style cast or function-style cast C:\Users\xuqianqian\Desktop\yuesefu.cpp(30) : error C2617: 'creat' : inconsistent return statement         C:\Users\xuqianqian\Desktop\yuesefu.cpp(9) : see declaration of 'creat' C:\Users\xuqianqian\Desktop\yuesefu.cpp(56) : error C2676: binary '*' : 'struct node' does not define this operator or a conversion to a type acceptable to the predefined operator 执行 cl.exe 时出错.  yuesefu.exe - 1 error(s), 0 warning(s)  到底哪儿错了~~~

user: user-1
content: struct node   //运用结构体定义链表 {     int number;         //序号 int password;       //密码     struct node *next; //指向本结构体的结点指针 }link,*p,*q,*head;     //node类变量link,结点p、q,头指针head link *creat()  //创建循环链表,???变量名link， 不能当作类型名。  你把类型定义和变量定义混用了。 1) typedef struct node   //运用结构体定义链表 {     int number;         //序号 int password;       //密码     struct node *next; //指向本结构体的结点指针 }*link,*pnode,node;   link p,q,head;   link creat()  //创建循环链表 ....... 2） struct node   //运用结构体定义链表 {     int number;         //序号 int password;       //密码     struct node *next; //指向本结构体的结点指针 }link,*p,*q,*head;     //node类变量link,结点p、q,头指针head struct node *creat()  //创建循环链表 。。。你可以任选 1） 2） 二者之一，不能二者混用。

user: user-5
content: 单步调试代码 是一个基本技术的！ 楼主自己动手调试下