Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 初学者想写一个关于C的积分系统，涉及读取存储文件数据，目前仅仅实现积分的储存清除，求大神看看数据为何错乱

回复:
user: user-1
content: 引用 3 楼 LeoThanos的回复:谢谢大神。。刚试了一下   remove那一行有错   注释掉之后ok，但为什么这里要加remove error: cannot convert 'FILE* {aka _iobuf*}' to 'const char*' for argument '1' to 'int remove(const char*)'| 最开始需要给文件一个0，问题就解决了

user: user-1
content: 引用 3 楼 LeoThanos的回复:谢谢大神。。刚试了一下   remove那一行有错   注释掉之后ok，但为什么这里要加remove error: cannot convert 'FILE* {aka _iobuf*}' to 'const char*' for argument '1' to 'int remove(const char*)'| 如果没有remove，你的数据怎么保存

user: user-0
content: 谢谢大神。。刚试了一下   remove那一行有错   注释掉之后ok，但为什么这里要加remove error: cannot convert 'FILE* {aka _iobuf*}' to 'const char*' for argument '1' to 'int remove(const char*)'|

user: user-2
content: 1.你的fopen的打开模式不对，这里可以用a+ 2.你查看积分的时候，应该用fscanf将存在文件里的数字读出来 3.你积分清零的时候，应该将文件给清空，而不仅仅是将grade变成0  #include<stdio.h> int main(){ 	FILE *fp; 	int grade = 0; 	fp = fopen("1.txt", "a+"); 	if (fp == NULL)                                                   //第一次打开无数据定义grade为0 	{ 		printf("无数据存储！\n"); 		grade = 0; 	} 	printf("                        ******************************\n"); 	printf("                        *------欢迎进击的程序员------*\n"); 	printf("                        ******************************\n"); 	printf("1.存入积分 2.查看积分 3.积分清零\n"); 	int i; 	scanf("%d", &i); 	if (i == 1){ 		printf("请输入要存取的积分！\n"); 		int j; 		scanf("%d", &j); 		grade = grade + j; 		fprintf(fp, "%d\n", grade); 	} 	else if (i == 2){ 		fscanf(fp, "%d", &grade); 		printf("%d\n", grade); 	} 	else if (i == 3){ 		fclose(fp); 		fopen("1.txt", "w+"); 		grade = 0; 		printf("积分已清%d\n", grade); 	} 	else{ 		printf("输入错误！\n"); 	} 	fclose(fp); 	return 0; }

user: user-1
content: #include<stdio.h> int main() { 	FILE *fp; 	int grade; 	int x; 	fp = fopen("1.txt", "r+"); 	if (fp == NULL)					//第一次打开无数据定义grade为0 	{ 		printf("无数据存储！\n"); 		grade = 0; 	} 	printf("                        ******************************\n"); 	printf("                        *------欢迎进击的程序员------*\n"); 	printf("                        ******************************\n"); 	printf("1.存入积分 2.查看积分 3.积分清零\n"); 	int i; 	fscanf(fp, "%d", &grade); 	 	scanf("%d", &i); 	if (i == 1) { 		printf("请输入要存取的积分！\n"); 		int j; 		scanf("%d", &j); 		grade = grade + j; 		remove(fp); 		fp = fopen("1.txt", "w+"); 		fprintf(fp, "%d", grade); 	} 	else if(i == 2) { 		printf("%d\n", grade); 	} 	else if(i == 3) { 		grade = 0; 		printf("积分已清%d\n", grade); 		fprintf(fp, "%d", grade); 	} 	else { 		printf("输入错误！\n"); 	} 	fclose(fp); 	return 0; }
user-0 提问: sqrt使用在不同数据类型上的效率问题

回复:
user: user-1
content: 你得对比两种重载形式的汇编代码

user: user-2
content: http://en.cppreference.com/w/cpp/numeric/math/sqrt  A set of overloads or a function template accepting an argument of any integral type. Equivalent to 2) (the argument is cast to double).
user-0 提问: 通过输入文件地址来读取文件内容的程序，出现的问题是所声明的数组大小要跟输入的文件名大小一致，否则就会报错

回复:
user: user-0
content: 引用 4 楼 paschen 的回复:[quote=引用 3 楼 u013232195 的回复:] [quote=引用 1 楼 paschen 的回复:] 你的输入小于19就行，要算上最后的'\0' 老哥，不行啊。只能输入刚好19个字符（实际输入18个字符，算上自动加的\0)才能读取文本，少和多都不行。。。。[/quote]  输入没问题，只是会多接收到\n，导致打开文件失败  换用scanf函数，或者将\n 去除：  #include<stdio.h> int main() { 	FILE*fp; 	char ch, filename[19];//这里的19如果大于我输入的文件名就会报错，必须刚好 	errno_t err; 	printf("Please input file's name:\n"); 	fgets(filename, sizeof(filename), stdin); 	filename[strlen(filename)-1] = '\0'; 	err = fopen_s(&fp, filename, "r"); 	if (err != 0) 	{ 		printf("The file %s was not opened\n", filename); 	} 	while ((ch = getc(fp)) != EOF)  		putchar(ch);  	fclose(fp); 	return 0; }[/quote]多谢多谢，又学到了！

user: user-0
content: 引用 2 楼 qq423399099 的回复:fgets会把回车符也读进来的，所以只有当刚好等于19你才不会出错，改成scanf_s好了  #include<stdio.h> int main() { 	FILE*fp; 	char ch, filename[19];//这里的19如果大于我输入的文件名就会报错，必须刚好 	errno_t err; 	printf("Please input file's name:\n"); 	scanf_s("%s", filename, 19); 	err = fopen_s(&fp, filename, "r"); 	if (err != 0) 	{ 		printf("The file %s was not opened\n", filename); 	} 	while ((ch = getc(fp)) != EOF) 		putchar(ch); 	fclose(fp); 	return 0; } 多谢老哥啊，本来也想到是不是多读取了些什么，可是没想到什么测试的办法，书看少了。

user: user-1
content: 引用 3 楼 u013232195 的回复:[quote=引用 1 楼 paschen 的回复:] 你的输入小于19就行，要算上最后的'\0' 老哥，不行啊。只能输入刚好19个字符（实际输入18个字符，算上自动加的\0)才能读取文本，少和多都不行。。。。[/quote]  输入没问题，只是会多接收到\n，导致打开文件失败  换用scanf函数，或者将\n 去除：  #include<stdio.h> int main() { 	FILE*fp; 	char ch, filename[19];//这里的19如果大于我输入的文件名就会报错，必须刚好 	errno_t err; 	printf("Please input file's name:\n"); 	fgets(filename, sizeof(filename), stdin); 	filename[strlen(filename)-1] = '\0'; 	err = fopen_s(&fp, filename, "r"); 	if (err != 0) 	{ 		printf("The file %s was not opened\n", filename); 	} 	while ((ch = getc(fp)) != EOF)  		putchar(ch);  	fclose(fp); 	return 0; }

user: user-0
content: 引用 1 楼 paschen 的回复:你的输入小于19就行，要算上最后的'\0' 老哥，不行啊。只能输入刚好19个字符（实际输入18个字符，算上自动加的\0)才能读取文本，少和多都不行。。。。

user: user-2
content: fgets会把回车符也读进来的，所以只有当刚好等于19你才不会出错，改成scanf_s好了  #include<stdio.h> int main() { 	FILE*fp; 	char ch, filename[19];//这里的19如果大于我输入的文件名就会报错，必须刚好 	errno_t err; 	printf("Please input file's name:\n"); 	scanf_s("%s", filename, 19); 	err = fopen_s(&fp, filename, "r"); 	if (err != 0) 	{ 		printf("The file %s was not opened\n", filename); 	} 	while ((ch = getc(fp)) != EOF) 		putchar(ch); 	fclose(fp); 	return 0; }

user: user-1
content: 你的输入小于19就行，要算上最后的'\0'
user-0 提问: 进位什么意思？不太理解。

回复:
user: user-1
content: 你小学学的加法运算，当大于等于10时需要往前面一位多加上1，这就是进位，其他进制同理

user: user-2
content: 你能理解十进制的逢十进一么？

user: user-3
content: http://baike.baidu.com/link?url=wbOipFy2Xhk2JPRIhLtnGEYJmrLmkWzy4Y3_QOCzceSwvuN3cdRemIcQtWhvSCMp2pdgUsThPASv2YspAqIDR17WRGWYnFPcEVCDnRaHIhBB_bFmv3aQIk8lZOLA3WYX

user: user-4
content: 为了10分. 3进制么,不能出现超过3的数字.比如3,4,5,6...就跟二进制不能出现2,3,4...一样. 所以3进制的话.就是 0 1 2    10 11 12 20 21 22  到这里要到3了..二位已经不能表示了.所以要进到3位 100 101 102

user: user-5
content: 进制，代表每一位可容纳的（最大值-1），当到达最大值时，无法容纳，往前进一位；如十进制中，每一位最大只能容纳到（10 - 1）= 9， 当再往上加时，需往前进一位，编程10。  对比到实际生活中，可以想象成算盘或其他，以算盘为例，下半部分每个珠子代表1，4之前可以容纳，而一旦要表示5及以上，就需要借助上半部，相当于五进制。而你看到算盘计算值时， 值 = 上半部的珠子*5的1次方 + 下半部的珠子*5的0次方，以此类推

user: user-6
content: 十进制，满十进一.二进制，满二进一

user: user-0
content: 不知道这样做是不是正确

user: user-7

user: user-8
content: 引用 11 楼 u014444402 的回复:[quote=引用 8 楼 yzjxue 的回复:] [quote=引用 4 楼 u014444402 的回复:] 为了10分. 3进制么,不能出现超过3的数字.比如3,4,5,6...就跟二进制不能出现2,3,4...一样. 所以3进制的话.就是 0 1 2    10 11 12 20 21 22  到这里要到3了..二位已经不能表示了.所以要进到3位 100 101 102  刚才又看了小老师的教材，说进制 的任意进制表示任意三个字符， 不特指0  1  2   那个如果把这几个换成 任意字符   H   D   F   的话下面三进制更糊涂。头晕[/quote] 咱转行学点别的吧.[/quote] 中肯

user: user-7
content: 难得糊涂...

user: user-4
content: 引用 8 楼 yzjxue 的回复:[quote=引用 4 楼 u014444402 的回复:] 为了10分. 3进制么,不能出现超过3的数字.比如3,4,5,6...就跟二进制不能出现2,3,4...一样. 所以3进制的话.就是 0 1 2    10 11 12 20 21 22  到这里要到3了..二位已经不能表示了.所以要进到3位 100 101 102  刚才又看了小老师的教材，说进制 的任意进制表示任意三个字符， 不特指0  1  2   那个如果把这几个换成 任意字符   H   D   F   的话下面三进制更糊涂。头晕[/quote] 咱转行学点别的吧.

user: user-0
content: 引用 6 楼 ForestDB 的回复:你能理解十进制的逢十进一么？  没有理解

user: user-0
content: 引用 7 楼 paschen 的回复:你小学学的加法运算，当大于等于10时需要往前面一位多加上1，这就是进位，其他进制同理  非常感谢，一下没有悟通 小学加法会计算，可运用到这来就头晕。

user: user-0
content: 引用 4 楼 u014444402 的回复:为了10分. 3进制么,不能出现超过3的数字.比如3,4,5,6...就跟二进制不能出现2,3,4...一样. 所以3进制的话.就是 0 1 2    10 11 12 20 21 22  到这里要到3了..二位已经不能表示了.所以要进到3位 100 101 102  刚才又看了小老师的教材，说进制 的任意进制表示任意三个字符， 不特指0  1  2   那个如果把这几个换成 任意字符   H   D   F   的话下面三进制更糊涂。头晕
user-0 提问: 一个文件描述符，能否判断这个文件已经打开

回复:
user: user-1
content: 引用 8 楼 shihengzhen101 的回复:[quote=引用 4 楼 qazaq408 的回复:] [quote=引用 2 楼 shihengzhen101 的回复:] 什么文件描述符 是fstream还是FILE*  int F; F = open("/home/dv/zz.txt",O_REONLY|O_CREATE|O_TRUN);   用这种方式打开结果得到文件描述符F,当然这代码文件是打开的，现在我的麻烦事，假如就这样一个文件描述符，作为参数传入函数，在函数内如何判断这个文件是否处于打开状态，要求不适用fcntl()函数[/quote] 我感觉这个不容易办到吧，他就是一个指针，里面又不包含状态信息，把任意一个变量的地址传给他都是有效的，况且把一个已经关闭的文件指针传给你也是检测不出来的，如果不进行文件操作，是不太可能知道这个指针是否有效的，只能做简单的判断，比如是不是空指针[/quote]  文件描述符是个int值，并不是个指针。你把文件指针和文件操作符搞混了。（这也能搞混－ －几天没睡觉了？）

user: user-2
content: 参考Linux源代码相关片断？

user: user-3
content: 什么文件描述符 是fstream还是FILE*

user: user-0
content: 有人么

user: user-3
content: 引用 4 楼 qazaq408 的回复:[quote=引用 2 楼 shihengzhen101 的回复:] 什么文件描述符 是fstream还是FILE*  int F; F = open("/home/dv/zz.txt",O_REONLY|O_CREATE|O_TRUN);   用这种方式打开结果得到文件描述符F,当然这代码文件是打开的，现在我的麻烦事，假如就这样一个文件描述符，作为参数传入函数，在函数内如何判断这个文件是否处于打开状态，要求不适用fcntl()函数[/quote] 我感觉这个不容易办到吧，他就是一个指针，里面又不包含状态信息，把任意一个变量的地址传给他都是有效的，况且把一个已经关闭的文件指针传给你也是检测不出来的，如果不进行文件操作，是不太可能知道这个指针是否有效的，只能做简单的判断，比如是不是空指针

user: user-2
content: 参考Linux命令lsof的源代码？

user: user-0
content: 引用 3 楼 zhao4zhong1 的回复:参考Linux源代码相关片断？ 楼上的楼上，打错。。。。

user: user-0
content: 引用 3 楼 zhao4zhong1 的回复:参考Linux源代码相关片断？ 楼下帮忙看些，谢谢

user: user-0
content: 引用 2 楼 shihengzhen101 的回复:什么文件描述符 是fstream还是FILE*  int F; F = open("/home/dv/zz.txt",O_REONLY|O_CREATE|O_TRUN);   用这种方式打开结果得到文件描述符F,当然这代码文件是打开的，现在我的麻烦事，假如就这样一个文件描述符，作为参数传入函数，在函数内如何判断这个文件是否处于打开状态，要求不适用fcntl()函数
user-0 提问: strcpy对结构体的指针类成员操作

回复:
user: user-1
content: 你的Student *st_3; 没有分配内存  你可以直接创建一个对象：  Student st_3;  而不是一个指针

user: user-2
content: 指针必须要分配空间后才能使用，否则指向的是未知区域（野指针），你尝试向未知区域进行写操作会出现异常  # include <stdio.h> # include <string.h> #include <stdlib.h>  struct Student { 	char name[130]; 	int score; 	Student *next; };  int main() {  	Student *st_3 = (Student *)malloc(sizeof(Student));  	strcpy(st_3->name, "jay"); 	printf("第三个学生的名字是:%s\n", st_3->name);  	return 0; }

user: user-3
content: 引用 1 楼 qq_29025081 的回复:运行有问题 语法没问题Student *st_3;  //野指针，定义了一个指针但没有指向有效的对象 如果定义一个结构体对象Student st_3; 就没有问题

user: user-0
content: 运行有问题 语法没问题
user-0 提问: 用c写出一个运动的小车，并用中断控制速度。

回复:
user: user-1
content: 仅供参考：/***NOTE:     This is an interrupt service routine.  You can NOT compile this     program with Test Stack Overflow turned on and get an executable     file which will operate correctly. */  #include <stdio.h> #include <dos.h> #include <conio.h>  #define INTR 0X1C    /* The clock tick interrupt */  #ifdef __cplusplus     #define __CPPARGS ... #else     #define __CPPARGS #endif  void interrupt ( *oldhandler)(__CPPARGS);  int count=0;  void interrupt handler(__CPPARGS) { /* increase the global counter */    count++;  /* call the old routine */    oldhandler(); }  int main(void) { /* save the old interrupt vector */    oldhandler = getvect(INTR);  /* install the new interrupt handler */    setvect(INTR, handler);  /* loop until the counter exceeds 20 */    while (count < 20)       printf("count is %d\n",count);  /* reset the old interrupt handler */    setvect(INTR, oldhandler);     return 0; }
user-0 提问: 二，八，十，十六进制怎么运算啊？

回复:
user: user-1
content: 参看：http://c.biancheng.net/cpp/html/1717.html

user: user-2
content: 仅供参考：#include <stdio.h> #include <stdlib.h> #include <string.h> #include <locale.h> int main() {     int i,v;     char bs[33];     char b[33];     char hs[9];     char h[9];     char s[4];     char *e;  // 十进制整数转二进制串；     i=1024;     ltoa(i,b,2);     sprintf(bs,"%032s",b);     printf("i=%d,bs=%s\n",i,bs); // 十进制整数转十六进制串；     i=1024;     ltoa(i,h,16);     sprintf(hs,"%08s",h);     printf("i=%d,hs=%s\n",i,hs); // 十六进制字符串转成十进制数     strcpy(hs,"00000400");     sscanf(hs,"%x",&i);     printf("hs=%s,i=%d\n",hs,i); // 二进制字符串转化为十六进制字符串；     strcpy(bs,"00000000000000000000010000000000");     i=strtol(bs,&e,2);     ltoa(i,h,16);     sprintf(hs,"%08s",h);     printf("bs=%s,hs=%s\n",bs,hs); // 二进制字符串转化为十进制数；     strcpy(bs,"00000000000000000000010000000000");     i=strtol(bs,&e,2);     printf("bs=%s,i=%d\n",bs,i); // 十六进制字符串转成二进制串     strcpy(hs,"00000400");     sscanf(hs,"%x",&i);     ltoa(i,b,2);     sprintf(bs,"%032s",b);     printf("hs=%s,bs=%s\n",hs,bs); // ASC\GBK字符串转十六进制串     strcpy(s,"a汉");     i=0;     while (1) {         if (0==s[i]) break;         sprintf(hs+i*2,"%02X",(unsigned char)s[i]);         i++;     }     setlocale(LC_ALL,"chs");     printf("s=%s,hs=%s\n",s,hs); // 十六进制字符串转成汉字（GBK）及字符(ASC)     strcpy(hs,"61BABA");     i=0;     while (1) {         if (1!=sscanf(hs+i*2,"%2x",&v)) break;         s[i]=(char)v;         i++;     }     s[i]=0;     printf("hs=%s,s=%s\n",hs,s);      return 0;  } //i=1024,bs=00000000000000000000010000000000 //i=1024,hs=00000400 //hs=00000400,i=1024 //bs=00000000000000000000010000000000,hs=00000400 //bs=00000000000000000000010000000000,i=1024 //hs=00000400,bs=00000000000000000000010000000000 //s=a汉,hs=61BABA //hs=61BABA,s=a汉

user: user-3
content: http://www.360doc.com/content/15/0310/22/15028327_454164296.shtml
user-0 提问: 用c语言编写一个小车运动的控制台应用程序

回复:
user: user-1
content: console屏幕处理例子程序。终端窗口屏幕处理相关API使用例子。来自MSVC20\SAMPLES\win32\console\ http://download.csdn.net/detail/zhao4zhong1/3461309

user: user-2
content: C++ Builder不规则图像透明贴图（位图的透明显示）三种方法及简单动画  http://blog.163.com/tab_98/blog/static/11924097201601510377824/  图形用户界面可以学习C++ Builder，入门比较容易。 仅供参考： 从C语言的菜单界面管理系统到C++ Builder的图形用户界面，一个简单的电话簿Demo例子 http://blog.163.com/tab_98/blog/static/1192409720158673337998/ 学C++还是C#、Java？ http://blog.163.com/tab_98/blog/static/11924097201511274543737/

user: user-3
content: 你会写Java的话就不是很困难了。 把Windows.h引入，然后用这个函数SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), cd);这个函数你只需要管括号里cd这个参数，其他的不用管。cd是COORD类型的（好像是结构体类型），有两个成员变量x和y，也就是你控制台窗口的横坐标和纵坐标。按照你的思路不断改变这几个值就能在控制台下出现动态效果。
user-0 提问: 大神看看哪里出错了

回复:
user: user-1
content: 关于自己是否适合编程的很简单的测试： 在报纸或杂志上随便找一段约1000字的文章，在Word中输入一遍。输完后再参考下面答案：  A里面有10处以上文字或标点错误 B里面没有文字或标点错误并敢为此跟人打赌 C里面没有文字或标点错误并且字体和排版完全与原稿一致 D打印在半透明的纸上和原稿重叠在一起检查一模一样，且自我感觉很有成就感  A不适合编程（理由：打字准确度偏低、粗心大意） B初级程序员（理由：打字准确度很高、认真细致、自信、理解全角半角概念） C高级程序员（理由：在B的基础上理解字体和排版也是电脑打印的重要因素、但相比D还不够偏执、精益求精、结果可验证） D软件项目经理（理由：能针对项目给出令人信服的细致到极点的需求说明和典型测试用例。用户几乎挑不出毛病。专业！）  如果想从A变成B的话，到我的资源http://download.csdn.net/detail/zhao4zhong1/4084259里面下载“适合程序员的键盘练习”

user: user-2
content: printf("%d\n, b");   改成  printf("%d\n", b);

user: user-3
content: #include <stdio.h> #include <math.h> int main() {     int a,b,t; 	b=1; 	a=2; 	printf("请输入要求阶乘数的数:"); 	scanf("%d",&t); 	while(a<=t) 	{ 	     b=b*a; 		 a=a+1; 	} 	printf("阶乘结果为:%d\n",b); 	return 0; }

user: user-4
content: 我这里使用递归调用，楼主可以看看这样的写法：  #include<stdio.h> #include<stdlib.h> int main() { 	int num; 	printf("请输入数字:\n"); 	scanf_s("%d", &num); 	printf("%d\n", fun(num)); 	system("pause"); 	return 0; }  int fun(int num) { 	if (num != 1) 	{ 		return num*fun(num - 1); 	} 	else if (num == 1) { 		return 1; 	} }   这里是一般的循环写法,这种写法和楼主的比较相似，可以拿去自己感受感受：  #include<stdio.h> #include<stdlib.h> int main() { 	int num; 	int result = 1; 	printf("请输入数字:\n"); 	scanf_s("%d", &num); 	while (num >= 1) { 		result = result * num; 		num--; 	} 	printf("%d\n", result); 	system("pause"); 	return 0; }

user: user-5
content: printf("%d\n", b);
user-0 提问: c如何作软件界面

回复:
user: user-1
content: CreateWindowEx、CreateDialog、DialogBox

user: user-2
content: 貌似纯C语言跨平台的GUI库只有gtk

user: user-3
content: 做界面还是 c++ 好一些， win32 api 都是c 接口的，C 语言可以直接用 SDK 来写界面的，mfc 那些只是对 api 的包装 tc的图形库是 DOS 时代的东西了，写的是 16 位程序 CPU 在 64 位模式下已经不再兼容 16 位程序了，就快被淘汰了

user: user-4
content: Quake3不是C做得界面？

user: user-5
content: c语言本身只是一种编程规则，本身不提供界面或者web之类的功能，不似java本身提供了界面的库。如果使用C编写界面就使用其它的库。如window 的sdk，linux的gtk等。

user: user-6
content: 图形用户界面可以学习C++ Builder，入门比较容易。 仅供参考： 从C语言的菜单界面管理系统到C++ Builder的图形用户界面，一个简单的电话簿Demo例子 http://blog.163.com/tab_98/blog/static/1192409720158673337998/

user: user-7
content: 可心使用WINDOWS SDK
user-0 提问: 请问如何用c语言制作数据库

回复:
user: user-1
content: http://download.csdn.net/detail/flyable_fish/5318397

user: user-2
content: APUE第3版第20章

user: user-3
content: 这么多开源的数据库，为什么要自己制作一个，其中有很多问题需要考虑，数据量大会造成很多瓶颈

user: user-4
content: 参考sqlite
user-0 提问: 如何运用单片机控制流水灯?

回复:
user: user-1
content: 买块51开发版，现在一般都附带教程，照着做做，做多了就有感觉了。

user: user-2
content: 有单片机培训的学习班。

user: user-3
content: 买本书看，照着敲几个例子就有感觉了。
user-0 提问: 想建立一个函数，但是出现了Error，小白求解决

回复:
user: user-1
content: 学习了，想得好累。。。。。。。。。

user: user-0
content: 修改好了，还修改了些小问题，可以了，谢谢各路大神

user: user-0
content: 引用 3 楼 paschen的回复:另外  printf("该方程在区间（-10，10）之间的根为:%d",y);break;  改成  printf("该方程在区间（-10，10）之间的根为:%f",y);break; 谢谢，确实是这些问题，程序还有其它问题，我重新修改下

user: user-0
content: 引用 1 楼 BuBu高打火机的回复:问题挺多的，我一个一个来哈。 1、下面那个函数的定义，float fc(float y){}应该写在main函数之外。写在main函数下面即可 2、while条件语句中，调用fc时未给变量x值。（变量x只声明了，但是没有具体的值） 3、print函数中，%d应该改为%f（因为是浮点变量）。那个y根据你的意思应该是x吧。看看是不是写错了。 4、if语句之后应该带{}括号，因为你不光只有一句printf，还有一句break。两句以上就得用{}括起来。同理，下面的if也有同样的问题。  最后。。。你这个代码写的好乱。。。我觉得在这个基础上根本没法改。。。 谢谢大神，我当时以为自定函数要放在主函里。程序还有其它问题，输出不了根

user: user-2
content: 另外  printf("该方程在区间（-10，10）之间的根为:%d",y);break;  改成  printf("该方程在区间（-10，10）之间的根为:%f",y);break;

user: user-2
content: fc函数要放在主函数外面，而不是里面   #include<stdio.h> #include<stdlib.h> float x,y,z,a,b,n,k,i,j,a1,b1; float fc(float y); int main() { 	printf("方程2*x^3-4*x^2+3x-6=0在区间（-10，10）之间的根为：\n"); 	a=-10,b=10,a1=fc(a),b1=fc(b); 	while(fc(x)!=0) 	{ 		n=(a+b)/2; 		z=fc(n); 		x=n; 		if(z==0) printf("该方程在区间（-10，10）之间的根为:%d",y);break; 		if(z*a1<0) b=n,b1=z; 		else z=n,a1=z; 	} 	return 0; }  float fc(float y) { 	y=2*y*y*y-4*y*y+3*y-6; 	return y; }

user: user-3
content: 问题挺多的，我一个一个来哈。 1、下面那个函数的定义，float fc(float y){}应该写在main函数之外。写在main函数下面即可 2、while条件语句中，调用fc时未给变量x值。（变量x只声明了，但是没有具体的值） 3、print函数中，%d应该改为%f（因为是浮点变量）。那个y根据你的意思应该是x吧。看看是不是写错了。 4、if语句之后应该带{}括号，因为你不光只有一句printf，还有一句break。两句以上就得用{}括起来。同理，下面的if也有同样的问题。  最后。。。你这个代码写的好乱。。。我觉得在这个基础上根本没法改。。。
user-0 提问: dev c ++源文件未编译

回复:
user: user-1
content: 刚刚我也是这个问题 找到正解了 按F11不行，F12就可以啦

user: user-2
content: 刚刚我也是这个问题 找到正解了 把工具-编译选项-设定编译配置那里把TDM-GCC 4.9.2 64-bit Debug改成TDM-GCC 4.9.2 64-bit release就好了

user: user-3
content: http://blog.csdn.net/moodytong/article/details/7167834

user: user-4
content: 关于自己是否适合编程的很简单的测试： 在报纸或杂志上随便找一段约1000字的文章，在Word中输入一遍。输完后再参考下面答案：  A里面有10处以上文字或标点错误 B里面没有文字或标点错误并敢为此跟人打赌 C里面没有文字或标点错误并且字体和排版完全与原稿一致 D打印在半透明的纸上和原稿重叠在一起检查一模一样，且自我感觉很有成就感  A不适合编程（理由：打字准确度偏低、粗心大意） B初级程序员（理由：打字准确度很高、认真细致、自信、理解全角半角概念） C高级程序员（理由：在B的基础上理解字体和排版也是电脑打印的重要因素、但相比D还不够偏执、精益求精、结果可验证） D软件项目经理（理由：能针对项目给出令人信服的细致到极点的需求说明和典型测试用例。用户几乎挑不出毛病。专业！）  如果想从A变成B的话，到我的资源http://download.csdn.net/detail/zhao4zhong1/4084259里面下载“适合程序员的键盘练习”

user: user-5
content: print  改成 printf  之所以一直提示是因为你一直就没编译成功

user: user-6
content: print("\n总的输入字符数;%d",n); 这一行你的“printf”打错了。  根据你的情况，可能情况你并没有编译成功，无法运行

user: user-7
content: 所谓的源文件未编译就是你程序中用到的某些函数无法在头文件中找到，在主程序中也没进行定义。

user: user-7
content: print("\n总的输入字符数;%d",n); 这一行你的“printf”打错了。
user-0 提问: pthread_create创建多线程，报错问题，求教，急

回复:
user: user-1
content: 参数个数太少了？

user: user-2
content: 将你的int FmSend(int fd, char *send_buf,int data_len);改成（或封装）类似这种原型：void *FmSend(void *sndParam)，在调用pthead_ceate()。

user: user-3
content: 偶遇到类似问题都是用 “每次用/*...*/注释掉不同部分再重新编译，直到定位到具体语法出错的位置。” 的方法解决的。  编译时添加命令行参数 -lpthred
user-0 提问: 菜鸟编码请教

回复:
user: user-1
content: 在这个源文件属性里面加_CRT_SECURE_NO_WARNINGS

user: user-1
content: 引用 10 楼 qq_32722449的回复:scanf加个取地址符合 不好意思，看错了。。。。

user: user-1
content: scanf加个取地址符合

user: user-2
content: #pragma warning(disable:4996) //...

user: user-3
content: 楼上正解，就是告诉你，这个函数不安全，新版本已经不用了，建议你使用较为安全的函数代替

user: user-4
content: 引用 6 楼 qq_36356098 的回复:[quote=引用 5 楼 qq423399099 的回复:] 或者你贴一下你的错误。 莫非是让你用scanf_s? 严重性	代码	说明	项目	文件	行	禁止显示状态 错误	C4996	'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.	牌面计算	d:\我的资料库\documents\visual studio 2015\projects\牌面计算\牌面计算\源.c	11	 [/quote]  因为scanf这个函数是不安全，可能造成缓冲区溢出，所以现在建议用scanf_s来代替 如果仍想用可以选择以下任何一种方法： 1、新建项目时不要勾选安全开发生命周期检查 2、在项目属性C/C++命令行中加上 /D _CRT_SECURE_NO_WARNINGS

user: user-0
content: 引用 5 楼 qq423399099 的回复:或者你贴一下你的错误。 莫非是让你用scanf_s? 严重性	代码	说明	项目	文件	行	禁止显示状态 错误	C4996	'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.	牌面计算	d:\我的资料库\documents\visual studio 2015\projects\牌面计算\牌面计算\源.c	11

user: user-5
content: 或者你贴一下你的错误。 莫非是让你用scanf_s?

user: user-0
content: 引用 3 楼 qq907482638 的回复:正常编译，而且初步输入输出都是对的 嗯 好的 谢谢指教 没错我就放心了 可能是使用软件不当 导致不对吧 因为之前用VS2015练习的时候都没问题 今天怎么试都出不来 还以为是我弄错了步骤

user: user-6
content: 正常编译，而且初步输入输出都是对的

user: user-0
content: 是这样的 我是一名初学者 我使用的是visula studio 2015这个软件 调试的时候弹框说发生生成错误 不明白怎么解决

user: user-4
content: 可以正常编译，你指的错误是什么
user-0 提问: 谁帮帮我！！c的二维数组问题！！谢谢！

回复:
user: user-1
content: printf("%d", p); 打印的是指针的值  改成   printf("%d", p[i]);  //这样才是输出指向元素的值

user: user-2
content: 你打印的都是地址，如果打印值，得多加个*

user: user-0
content: 书上也是这样讲的。。。二维数组的参数问题实在有点蒙啊！！

user: user-3
content: A[B] *(A+B) *(B+A) B[A] //以上四行等价  "abc"[1] *("abc"+1) *(1+"abc") 1["abc"] //以上四行等价  A[0] *(A) 0[A] //以上三行等价
user-0 提问: 如何读取txt数据保存到2个一维数组当中

回复:
user: user-1
content: http://bbs.csdn.net/topics/360055953

user: user-2
content: 引用 2 楼 user-3 的回复:http://blog.csdn.net/u013457167/article/details/47006737 可以参考这个，美中不足的是，行数需要用宏定义。

user: user-3
content: http://blog.csdn.net/u013457167/article/details/47006737

user: user-0
content: 要用C来写。。。
user-0 提问: 汇编循环如何提前跳出

回复:
user: user-1
content: 引用 3 楼 chimenghuanzhe的回复:[quote=引用 2 楼 user-3 的回复:] {             .....             jmp lastpos // 跳出             ..... lastpos: }问题是，对于lastpos这块，用什么来结尾。我也是试着 { ....... jmp bdian5 .......  bdian5:  end  }  但是没用，编译的时候报错，error C2400: “操作码”中的内联汇编语法错误；找到“end” 即，电脑无法识别end[/quote] 你标签可以写到大括号外面，要加语句可以就写个分号（空语句）

user: user-2
content: 搜“堆栈平衡”

user: user-1
content: 引用 5 楼 chimenghuanzhe 的回复:[quote=引用 4 楼 paschen 的回复:] [quote=引用 3 楼 chimenghuanzhe的回复:][quote=引用 2 楼 user-3 的回复:] {             .....             jmp lastpos // 跳出             ..... lastpos: }问题是，对于lastpos这块，用什么来结尾。我也是试着 { ....... jmp bdian5 .......  bdian5:  end  }  但是没用，编译的时候报错，error C2400: “操作码”中的内联汇编语法错误；找到“end” 即，电脑无法识别end[/quote] 你标签可以写到大括号外面，要加语句可以就写个分号（空语句）[/quote]perfect.解决了。  顺带问一下，一开始我是把整个子函数都反汇编了。然后生成整个代码。然后我是把包括最开始的  int jiafa(unsigned char a[],unsigned char b[],unsigned char c[],long int m)//尾数的数值部分相加 { __asm {  push di push sp  ........... pop sp pop di } }  .这样一来也能运行处正确结果。但是每次编译的时候总是警告我，改变了sp，改变了di之类的。我看了一下，如果在这个基础上反汇编，结果是在asm{}之外的部分，即子函数的头部还会产生push di，push sp这类入栈操作。同样后面还会产生第二次的出栈操作。问，虽然他有警告，但是根据先进后出的原则，最后出栈的才是最终的地址。也就是后出栈的把前面的覆盖了。所以我认为不会产生安全隐患对吧？[/quote]  那就不会

user: user-0
content: 引用 4 楼 paschen 的回复:[quote=引用 3 楼 chimenghuanzhe的回复:][quote=引用 2 楼 user-3 的回复:] {             .....             jmp lastpos // 跳出             ..... lastpos: }问题是，对于lastpos这块，用什么来结尾。我也是试着 { ....... jmp bdian5 .......  bdian5:  end  }  但是没用，编译的时候报错，error C2400: “操作码”中的内联汇编语法错误；找到“end” 即，电脑无法识别end[/quote] 你标签可以写到大括号外面，要加语句可以就写个分号（空语句）[/quote]perfect.解决了。  顺带问一下，一开始我是把整个子函数都反汇编了。然后生成整个代码。然后我是把包括最开始的  int jiafa(unsigned char a[],unsigned char b[],unsigned char c[],long int m)//尾数的数值部分相加 { __asm {  push di push sp  ........... pop sp pop di } }  .这样一来也能运行处正确结果。但是每次编译的时候总是警告我，改变了sp，改变了di之类的。我看了一下，如果在这个基础上反汇编，结果是在asm{}之外的部分，即子函数的头部还会产生push di，push sp这类入栈操作。同样后面还会产生第二次的出栈操作。问，虽然他有警告，但是根据先进后出的原则，最后出栈的才是最终的地址。也就是后出栈的把前面的覆盖了。所以我认为不会产生安全隐患对吧？

user: user-0
content: 引用 2 楼 user-3 的回复:{             .....             jmp lastpos // 跳出             ..... lastpos: }问题是，对于lastpos这块，用什么来结尾。我也是试着 { ....... jmp bdian5 .......  bdian5:  end  }  但是没用，编译的时候报错，error C2400: “操作码”中的内联汇编语法错误；找到“end” 即，电脑无法识别end

user: user-3
content: {             .....             jmp lastpos // 跳出             ..... lastpos: }

user: user-0
content: 这个汇编程序是我从编号的c语言程序中反汇编出来的。对应的c语言程序是 for (i=m-1;i>=1;i--)        //计算每一位的值     {                 d[i]+=(a[i]+b[i]);     //涉及到进位所以，要用+=，而非直接=                 if (d[i]>9)                 { 					                     d[i]-=10;            //大于10的取个位                     d[i-1]++;            //高位加1                 } 				c[i]=d[i];     } 然后bdian5 是跳入下面的，不过下面的部分我直接用c语言写了。因为如果下面的也用他反汇编出来的东西，会导致必须把更下面的东西也带上。  所以，我准备在bdian5这个位置直接跳出。即，如果i<1;则跳出循环。可是我在汇编的指令中没找到跳出程序这个指令。都是跳到什么位置。
user-0 提问: 第三方开源源代码做成的库文件，动态库，修改了对应的c文件，相应的库文件没有任何更新怎么回事？

回复:
user: user-0
content: 恩恩 昨天试了发现 我的格式化工具调用的居然是系统自带的库函数，不是我自己编译的库函数。  已经弄好啦 谢谢老师

user: user-1
content: .o还得链接生成对应的.so

user: user-1
content: 使用ldd命令查看可执行文件依赖的.so

user: user-0
content: 直接调用的自带的makefile 了 直接make  .之后我看了看不仅.o更新了，而且对应的.so的修改时间访问时间也更新了
user-0 提问: 如何返回一个二维数组，并调用。

回复:
user: user-1
content: 你数组是动态分配的，直接传递指针就行了

user: user-2
content: 仅供参考：#include <stdio.h> #include <stdlib.h> #include <malloc.h> int **newarr2d(int rows,int cols) {     int **p,i;      p=(int **)malloc(rows*sizeof(int *));     if (NULL==p) exit(1);     for (i=0;i<rows;i++) {         p[i]=(int *)malloc(cols*sizeof(int));         if (NULL==p[i]) exit(1);     }     return p; } void deletearr2d(int **p,int rows) {     int i;      for (i=0;i<rows;i++) {         free(p[i]);     }     free(p); } int main() {     int **arr2d,i,j,r,c;      r=4;     c=5;     //在堆中开辟一个4×5的二维int数组     arr2d=newarr2d(r,c);     for (i=0;i<r;i++) {         for (j=0;j<c;j++) {             arr2d[i][j]=i*c+j;         }     }     for (i=0;i<r;i++) {         for (j=0;j<c;j++) {             printf(" %2d",arr2d[i][j]);         }         printf("\n");     }     deletearr2d(arr2d,r);      r=6;     c=3;     //在堆中开辟一个6×3的二维int数组     arr2d=newarr2d(r,c);     for (i=0;i<r;i++) {         for (j=0;j<c;j++) {             arr2d[i][j]=i*c+j;         }     }     for (i=0;i<r;i++) {         for (j=0;j<c;j++) {             printf(" %2d",arr2d[i][j]);         }         printf("\n");     }     deletearr2d(arr2d,r);      return 0; } //  0  1  2  3  4 //  5  6  7  8  9 // 10 11 12 13 14 // 15 16 17 18 19 //  0  1  2 //  3  4  5 //  6  7  8 //  9 10 11 // 12 13 14 // 15 16 17 //

user: user-3
content: http://www.cnblogs.com/applebunny/archive/2012/09/09/2677307.html
user-0 提问: C语言问题,总是报错

回复:
user: user-1
content: 引用 4 楼 nn970510 的回复:.global add2  add2:   stmfd sp!, {v1-v6, lr}   add a1, a1, a2   ldmfd sp!, {v1-v6, pc}   .end 难道这个不是对add2的定义么，求问应该怎么改正  没有这种用法

user: user-2
content: 后面的汇编是什么cpu的？ 你又用的产生什么cpu代码的编译器？

user: user-0
content: .global add2  add2:   stmfd sp!, {v1-v6, lr}   add a1, a1, a2   ldmfd sp!, {v1-v6, pc}   .end 难道这个不是对add2的定义么，求问应该怎么改正

user: user-1
content: add2函数没有实现

user: user-3
content: 你的代码里用了extern  那说明add2（）其他源文件里有定义，而实际上你并没有定义这个函数

user: user-4
content: add2函数没有定义
user-0 提问: 单链表里有三种类型元素，将它们按类型分为三个循环链表 这个算法哪里出错？

回复:
user: user-0
content: 引用 1 楼 user-1 的回复:if( s->data >= 'a' && s->data <= 'z')  这句改成；  else if( s->data >= 'a' && s->data <= 'z') 真的很谢谢。。我没注意到这里

user: user-1
content: if( s->data >= 'a' && s->data <= 'z')  这句改成；  else if( s->data >= 'a' && s->data <= 'z')
user-0 提问: 学C的第一个卡壳

回复:
user: user-1
content: Enter,Ctrl+Z,Enter

user: user-2
content: 输入完毕回车，在新的行按Ctrl+Z，回车看结果。

user: user-3
content: 第一章就学这个了啊？有点难啊。

user: user-4
content: Windows系统中一般采用阻塞式检查   Ctrl+Z、Unix/Linux系统下一般采用非阻塞式的检查   Ctrl+D。楼主是在Windows系统下，因此使用阻塞式的   Ctrl+Z   来标识流的结束。  http://blog.csdn.net/windlfb/article/details/6937212

user: user-5
content: (c= getchar ())!=EOF   EOF 是End Of File的缩写，是一个特殊字符。也可以改成*号或#号之类的字符作为结束。

user: user-6
content: ctrl + z 回车 才能退出循环，因为你循环条件是 (c= getchar ())!=EOF

user: user-7
content: Ctrl + Z，再回车
user-0 提问: c语言，如何实现向上翻页

回复:
user: user-1
content: 仅供参考：#include <stdio.h> FILE *f; int c; long offset; char ln[100]; void main() {     f=fopen("a.txt","rb");//必须用b方式打开，否则文件当前读位置会受\x0d \x0a \x1a等字符的干扰     fseek(f,-1,SEEK_END);//倒数最后一个字节之前     while (1) {         c=fgetc(f);         if ('\n'==c) {             offset=ftell(f);//记住当前位置，即刚读字符后面             fgets(ln,100,f);             printf("%s",ln);             fseek(f,offset-2,SEEK_SET);//回到刚才读位置之前一个位置，即c所在位置之前一个位置         } else             if (fseek(f,-2,SEEK_CUR)) {//回到刚才读位置之前一个位置，即c所在位置之前一个位置失败，说明已读到文件开头                 fseek(f,0,SEEK_SET);                 fgets(ln,100,f);//读文件第一行内容                 printf("%s",ln);                 break;             }     }     fclose(f); }

user: user-2
content: 翻页，行数是固定的，用fgets读行。

user: user-3
content: fseek是移动文件指针，和翻页没什么关系  http://en.cppreference.com/w/c/io/fseek

user: user-4
content: 翻页是显示的事，跟读取文件内容关系不大。当然要显示的东西不在缓冲区中时，需要再次读文件
user-0 提问: Ｃ语言小蜜蜂问题，自己在编译器可行，但是提交超时，求问大虾ＱＡＱ

回复:
user: user-1
content: 这个好像可以直接计算出结果    用数学公式算

user: user-0
content: 加上之后变成错误答案了= =

user: user-0
content: @user-2 加上数组后还是不行诶= =

user: user-0
content: = =还真是，，，请问那该怎么修改可行呢？

user: user-2
content: 简单加一句查表速度提升明显  int buf[50] = {0};  int num(int count) {     if (buf[count]) return buf[count];      if (count>2)         return buf[count] = (num(count - 1) + num(count - 2));     else         return buf[count] = count; }

user: user-2
content: 1. 题目指出对于每个输入，都输出，共N个, 没有指出N多大 2. 我就试了一组   1, 49, debug下 等了10+秒还没出结果
user-0 提问: C语言中一维多项式求值

回复:
user: user-1
content: #include "1plyv.c"尽量不要include源文件 double plycv (a[],n,x)声明函数时需要带上类型。

user: user-2
content: 这是上个世纪80年代的程序吧，K&R标准，不是ANSI的 看看新书吧

user: user-3
content: main函数的第二个参数应该是char**吧，其它语法错误向上面说的。。。

user: user-4
content: double plycv (a[],n,x) 后面少了大括号 {

user: user-5
content: 你这哪是运行出错, 编译出错了.. 不看错误提示么, 你这是c语言么
user-0 提问: Ubuntu 重定向 

回复:
user: user-0
content: 已搞定 。 谢了

user: user-0
content: 引用 4 楼 qq907482638 的回复:问题描述的有点少啊！！！ 1.如果echo_eof不是你的shell自带的命令，而是你自己写的程序。     请在程序的目录下 cd /home/xxx/program/   用. / 来启动程序，而不是直接使用程序名 例如./echo_eof   2.你是要把word.txt 里的内容输入到echo_eof里面？？如果不是echo_eof >word.txt注意箭头方向 3.你要把文件名写全，linux不是windows认为输出字符的一定是文本文件txt。请写word.txt。其实我用什么后缀都可以，word.psp,word.php, word.asfjslfjla 都是可以的。后缀不影响。。 引用 4 楼 qq907482638 的回复:问题描述的有点少啊！！！ 1.如果echo_eof不是你的shell自带的命令，而是你自己写的程序。     请在程序的目录下 cd /home/xxx/program/   用. / 来启动程序，而不是直接使用程序名 例如./echo_eof   2.你是要把word.txt 里的内容输入到echo_eof里面？？如果不是echo_eof >word.txt注意箭头方向 3.你要把文件名写全，linux不是windows认为输出字符的一定是文本文件txt。请写word.txt。其实我用什么后缀都可以，word.psp,word.php, word.asfjslfjla 都是可以的。后缀不影响。。  echo_eof 是我的写的程序 ，，我是照着C primer plus 写进去的， 然而 当前文件夹 没有执行exe文件 ，，书上就 echo_eof < words    我编译程序也改 成echo_eof.c  ，也创建了 words.txt文件 ， 用的GCC编译

user: user-1
content: 问题描述的有点少啊！！！ 1.如果echo_eof不是你的shell自带的命令，而是你自己写的程序。     请在程序的目录下 cd /home/xxx/program/   用. / 来启动程序，而不是直接使用程序名 例如./echo_eof   2.你是要把word.txt 里的内容输入到echo_eof里面？？如果不是echo_eof >word.txt注意箭头方向 3.你要把文件名写全，linux不是windows认为输出字符的一定是文本文件txt。请写word.txt。其实我用什么后缀都可以，word.psp,word.php, word.asfjslfjla 都是可以的。后缀不影响。。

user: user-0
content: 引用 1 楼 user-2 的回复:./echo_eof   bash: ./echo_eof1: No such file or directory

user: user-0
content: bash: ./echo_eof1: No such file or directory

user: user-2
content: ./echo_eof
user-0 提问: 大家讨论一下一个面试题，已知两点坐标，半径求圆心坐标。

回复:
user: user-1
content: 计算几何大牛:http://www.codeproject.com/KB/recipes/Wykobi.aspx

user: user-2
content: 数学问题 写出两个指定圆心半径的圆的方程式，求解。

user: user-3
content: 这只是数学问题，建立方程后推出解来程序中只是带公式

user: user-3
content: 引用 1 楼 zzdmfk 的回复:起点(x1,y1),止点(x2,y2).半径r,求圆心坐标x0和y0. 函数输入参数x1,y1,x2,y2,r.输出x0,y0.  求以(x1,y1)与(x2,y2)为圆心，r为半径的两个圆的交点即为所求

user: user-0
content: 顺时针，逆时针可分两个函数实现。很难吧？

user: user-0
content: 起点(x1,y1),止点(x2,y2).半径r,求圆心坐标x0和y0. 函数输入参数x1,y1,x2,y2,r.输出x0,y0.
user-0 提问: 这个高精度计算pi值的程序用的是什么思想？急！！！

回复:
user: user-0
content: 6楼能解释一下你的算法吗，本人小白

user: user-1
content: 仅供参考：#include <stdio.h> long a=10000; long b; long c=2800; long d; long e; long f[2801]; long g; int main() {     for(;b-c;) f[b++]=a/5; //  while (1) { //      if (0==b-c) break; //      f[b]=a/5; //      b++; //  }      //f[0 - 2800] = 10000/5     for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a)           for(b=c;d+=f[b]*a,f[b]=d%--g,d/=g--,--b;d*=b); //  while (1) { //      d=0; //      g=c*2; //      if (0==g) break; //      b=c; //      while (1) { //          d+=f[b]*a; //          f[b]=d%--g; //          d/=g--; //          --b; //          if (0==b) break; //          d*=b; //      } //      c-=14; //      printf("%.4d",e+d/a); //      e=d%a; //  }  	return 0; }

user: user-2
content: http://blog.csdn.net/himulakensin/article/details/8478224

user: user-3
content: 赞同2楼说法，不过代码不能靠别人看出来，还是要自己写个流程出来，或者单步执行，查看监视变量的值你就知道是做什么的了。

user: user-4
content: 能写跑这么慢的代码也是不容易啊. 用链表做大数运算也是人才啊..

user: user-5
content: 唔看错了。这是newton/euler变换：pi/2=1+1/3*(1+2/5*(1+3/7*(1+...)))

user: user-5
content: arctan的展开式。pi/4=arctan(1)=1-1/3+1/5-1/7+...
user-0 提问: 求问定长顺序串如何从子函数传递到主函数？

回复:
user: user-1
content: 楼上说的不正确  C中数组不能作为返回值，你可以返回指针，但指针不应指向局部变量

user: user-2
content: 同意1楼，既然typedef了String，则可直接使用String作为新类型，如String arrToStr(char* pcArr)，当然，使用指针还是传值就看具体代码需求了

user: user-3
content: 子函数的参数用定长串的指针，然后再对这个参数赋值

user: user-4
content: 直接用Ｓtring类型就可以了
user-0 提问: 新人求帮助关于自学C++

回复:
user: user-1
content: Visual C++ 2010 Express简体中文版http://pan.baidu.com/s/1bnwRVLt

user: user-2
content: 就用VS2013或者VS2015吧，照着书上的例子慢慢敲就行，边敲边理解

user: user-3
content: 当时学校用的是Dev c++，然后就一直用了。

user: user-4
content: 用VS好了，用比较主流的IDE比较好，碰到问题了网上容易找到答案。 熟练了以后可以换别的IDE http://blog.csdn.net/cometnet/article/details/19551125 https://msdn.microsoft.com/en-us/library/w40768et.aspx

user: user-5
content: 如果你买的是最新版的C++ Primer Plus，包含C++11内容，不用gcc，就用VS2013或者VS2015吧。

user: user-6
content: 那就用windows系统吧，IDE可以选VS2015， MSDN我告诉你 上可以下载到

user: user-1
content: 试试将http://www.cplusplus.com上面的例子代码挨个编译链接调试一番。

user: user-1
content: Visual Studio 6/2005/2008/2010/2012/2013 各版本编译器 下载 http://bbs.csdn.net/topics/390812579

user: user-7
content: c++ primer plus是本好书，适合刚入门的去看，建议你再去买本c++ primer（第五版），这是c++方面的最好的书，编程工具就用vs2013就可以了，网上有破解版下载
user-0 提问: If 多层嵌套后，无法配对了。

回复:
user: user-1
content: astyle自动整理c,c++,java源代码格式命令行工具源代码。 用astyle --help查看使用帮助。 http://download.csdn.net/detail/zhao4zhong1/5605415

user: user-2
content: 细节决定成败，谨小慎微才行。

user: user-3
content: 对应不到的那个else上面的if要用大括号围住，否则只是if的后一条语句属于if

user: user-0
content: 引用 5 楼 zhao4zhong1 的回复:astyle自动整理c,c++,java源代码格式命令行工具源代码。 用astyle --help查看使用帮助。 http://download.csdn.net/detail/zhao4zhong1/5605415 谢谢

user: user-1
content: VS IDE中，选中要自动整理格式的代码片断，按Alt+F8键。

user: user-4
content: 所以花扩号很重要, 不要随便省, 到时候烦的就是自己.  老赵说的那个工具非常好用, 自动格式化.  只要整个部分都用这个插件, 保证全部代码风格一致.

user: user-0
content: 我已经找到答案了，标红的else上面的if后面应该对应语录块，我没加花括号，哈哈，不细心果然不行啊。谢谢大家了，

user: user-0
content: 电脑不能上网，凑活一下吧，谢谢大家了。
user-0 提问: VC6.0可以通过，gcc编译过不了，删除节点不知道怎么改。求助大神。

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

user: user-0
content: 终于成功了， 但不知为什么。 struct stud_node *deletelist(struct stud_node *head, int min_score)  {  struct stud_node *p1, *p2;   p1 = head;  while( p1!= NULL)   //改  {  if (min_score<=p1->score)  {p2=p1;  p1=p1->next; continue ;}  else   {  if(p1 == head)  {head = p1->next;  p1 = p1->next; continue;}  else  {p2->next = p1->next;  p1 = p2->next; continue ;}  }  //删除  return (head);  }

user: user-0
content: 引用 4 楼 zhao4zhong1 的回复:偶遇到类似问题都是用 “每次用/*...*/注释掉不同部分再重新编译，直到定位到具体语法出错的位置。” 的方法解决的。 删除节点那里出错了， 但是我改不成功，能给个范例吗 struct stud_node *deletelist(struct stud_node *head, int min_score) { 	struct stud_node *p1, *p2; 	 p1 = head; 	while( p1->next != NULL) 	{ 		if (min_score<=p1->score) 			{p2=p1;  p1=p1->next; continue ;} 		else  		{ 			if(p1 == head) 			{head = p1->next;  p1 = p1->next; continue;} 			else 			{p2->next = p1->next;  p1 = p2->next; continue ;} 		} 		if(min_score>p1->score) 		p1 = p1->next; 	} 	 		 	return (head); }

user: user-0
content: 用PTA做的一个作业， 以下是他的编译提示错误 a.c:32:8: error: redefinition of 'struct stud_node' a.c:4:8: note: originally defined here a.c:39:19: error: conflicting types for 'createlist' a.c:11:19: note: previous declaration of 'createlist' was here a.c:40:19: error: conflicting types for 'deletelist' a.c:12:19: note: previous declaration of 'deletelist' was here a.c:42:5: error: redefinition of 'main' a.c:14:5: note: previous definition of 'main' was here a.c:55:19: error: conflicting types for 'createlist' a.c:11:19: note: previous declaration of 'createlist' was here a.c:81:19: error: conflicting types for 'deletelist' a.c:12:19: note: previous declaration of 'deletelist' was here

user: user-2
content: char   name[20];  数组名就是数组首地址。

user: user-3
content: GCC提示什么  另外，  scanf("%s %d", &p1->name, &p1->score);  改成  scanf("%s %d", p1->name, &p1->score);
user-0 提问: 学C语言用什么工具比较好呢？

回复:
user: user-1
content: 引用 8 楼 zsdsywr123 的回复:[quote=引用 7 楼 zhao4zhong1 的回复:] Visual C++ 2010 Express简体中文版http://pan.baidu.com/s/1bnwRVLt  对对，就是这个，感谢分享！[/quote] 应改为 对对，就是这个大神，感谢分享！

user: user-2
content: 虚拟机+ubuntu+vim+gcc 学习C最好的组合，但是要折腾一阵子。

user: user-3
content: 我觉得，还是用gcc直接在cmd(命令提示符)编译比较方便和快捷。         用其他的乱七八杂的IDE会生成一大堆没用的文件。，我是直接写好c 然后在cmd里命令生成可执行文件的。https://pan.baidu.com/s/1mittXUS

user: user-4
content: http://blog.csdn.net/cometnet/article/details/19551125

user: user-0
content: 感谢各位的回复，不一一回了。

user: user-0
content: 引用 7 楼 zhao4zhong1 的回复:Visual C++ 2010 Express简体中文版http://pan.baidu.com/s/1bnwRVLt  对对，就是这个，感谢分享！

user: user-1
content: Visual C++ 2010 Express简体中文版http://pan.baidu.com/s/1bnwRVLt

user: user-5
content: vs2015!!!!!!!!!!!!!!!!!!

user: user-6
content: VC6.0 ，虽然有很多BUG，但是用来谢谢小程序还是可以的，要是大型的集成开发环境，初学者怕接受不了。

user: user-7
content: 初学可以用：C与C++程序设计学习与实验系统 2013.3 很方便，不用建立项目，简单的验证代码甚至不用保存为文件，直接（编译）运行

user: user-8
content: 直接cmd敲指令，或者用的vc（太老了，那都有它的教程）

user: user-9
content: 学习C语言用个下个最简单的编译器就行了，如turbo C，还有VC++，当年在学校时学习C语言时就用的这些个。

user: user-10
content: Windows上就用VS2010吧
user-0 提问: 逆波兰计算器的编写

回复:
user: user-0
content: #include<stdio.h> #include<stdlib.h> #include<ctype.h>   #define STACK_INIT_SIZE 20 #define STACKINCREMENT 10 #define MAXBUFFER 10   typedef double ElemType; typedef struct  { 	ElemType *base; 	ElemType *top; 	int stacksize; }SqStack;  void InitStack(SqStack *s) { 	s->base=(ElemType *)malloc(STACK_INIT_SIZE*sizeof(ElemType)); 	if(!s->base) 		exit(0); 	s->top=s->base; 	s->stacksize=STACK_INIT_SIZE; }//组建 void Push(SqStack *s,ElemType e) { 	if(s->top-s->base>=s->stacksize) 	{ 		s->base=(ElemType *)realloc(s->base,(s->stacksize+STACKINCREMENT)*sizeof(ElemType)); 		if(!s->base) 			exit(0); 		s->top=s->base+s->stacksize; 		s->stacksize=s->stacksize+STACKINCREMENT; 	} 	*(s->top)=e; 	s->top++; }//入栈操作 void Pop(SqStack *s,ElemType *e) { 	if(s->top==s->base) 	{ 		return ; 	} 	*e=*--(s->top); } int Stacklen(SqStack s) { 	return (s.top-s.base); } int main() { 	SqStack s; 	char c; 	double d,e; 	char str[MAXBUFFER]; 	int i=0; 	InitStack(&s);//初始化 	printf("请按照逆波兰表达式输入待计算数据，数据与运算符之间空格隔开已#结束\n"); 	scanf("%c",&c); 	while(c!='#') 	{ 		while(isdigit(c)||c=='.')//用于过滤数字 		{ 			str[i++]=c; 			str[i]='\0'; 			if(i>=10) 			{ 				printf("输入的单个数据过大\n"); 				return -1; 			} 			scanf("%c",&c); 			if(c==' ') 			{ 				d=atof(str); 				Push(&s,d); 				i=0; 				break; 			} 		}////头文件ctype 		switch(c) 		{ 		case '+': 			Pop(&s,&e); 			Pop(&s,&d); 			Push(&s,d+e); 			break; 		case '-': 			Pop(&s,&e); 			Pop(&s,&d); 			Push(&s,d-e); 			break; 		case '*': 			Pop(&s,&e); 			Pop(&s,&d); 			Push(&s,d*e); 			break; 		case '/': 			Pop(&s,&e); 			Pop(&s,&d); 			if(e!=0) 			{ 				Push(&s,d/e); 			} 			else 			{ 				printf("\n出错除数为0"); 				return -1; 			}   		} 		scanf("%c",&c); 	} 	Pop(&s,&d); 	printf("最终的计算结果为%d",d); 	return 0; }  修改完整的。

user: user-0
content: 引用 3 楼 zhao4zhong1 的回复:关于自己是否适合编程的很简单的测试： 在报纸或杂志上随便找一段约1000字的文章，在Word中输入一遍。输完后再参考下面答案：  A里面有10处以上文字或标点错误 B里面没有文字或标点错误并敢为此跟人打赌 C里面没有文字或标点错误并且字体和排版完全与原稿一致 D打印在半透明的纸上和原稿重叠在一起检查一模一样，且自我感觉很有成就感  A不适合编程（理由：打字准确度偏低、粗心大意） B初级程序员（理由：打字准确度很高、认真细致、自信、理解全角半角概念） C高级程序员（理由：在B的基础上理解字体和排版也是电脑打印的重要因素、但相比D还不够偏执、精益求精、结果可验证） D软件项目经理（理由：能针对项目给出令人信服的细致到极点的需求说明和典型测试用例。用户几乎挑不出毛病。专业！）  如果想从A变成B的话，到我的资源http://download.csdn.net/detail/zhao4zhong1/4084259里面下载“适合程序员的键盘练习”  可以帮我解决我上面的那个问题吗？

user: user-1
content: 关于自己是否适合编程的很简单的测试： 在报纸或杂志上随便找一段约1000字的文章，在Word中输入一遍。输完后再参考下面答案：  A里面有10处以上文字或标点错误 B里面没有文字或标点错误并敢为此跟人打赌 C里面没有文字或标点错误并且字体和排版完全与原稿一致 D打印在半透明的纸上和原稿重叠在一起检查一模一样，且自我感觉很有成就感  A不适合编程（理由：打字准确度偏低、粗心大意） B初级程序员（理由：打字准确度很高、认真细致、自信、理解全角半角概念） C高级程序员（理由：在B的基础上理解字体和排版也是电脑打印的重要因素、但相比D还不够偏执、精益求精、结果可验证） D软件项目经理（理由：能针对项目给出令人信服的细致到极点的需求说明和典型测试用例。用户几乎挑不出毛病。专业！）  如果想从A变成B的话，到我的资源http://download.csdn.net/detail/zhao4zhong1/4084259里面下载“适合程序员的键盘练习”

user: user-0
content: 引用 1 楼 user-2的回复:你Push函数第二个参数的类型是ElemType，但Push(&s,d);这句中的d是double类型  Pop(&s,&d); 第二个参数类型也不对  push(&s,d-e); 第一个p是大写的 需要把参数类型改了嘛？

user: user-2
content: 你Push函数第二个参数的类型是ElemType，但Push(&s,d);这句中的d是double类型  Pop(&s,&d); 第二个参数类型也不对  push(&s,d-e); 第一个p是大写的
user-0 提问: 新人求助  C语言 将输入的字符串放到指定地址的错误 

回复:
user: user-1
content: 0xC0000005: 读取位置 0xcccccccc 表示你对一个在栈上开辟的未初始化的空间进行了操作  使用指针数组的话，需要为每一个成员（指针）都分配空间才行

user: user-2
content: 数组名等于数组首地址。

user: user-2
content: char *ch1[81]; 应该为char ch1[81]; 其它相关的再修改。

user: user-3
content: 引用 2 楼 rainborn99 的回复:谢谢，谢谢你呀，这个问题我试了，已经pass了，然后在运行到子程序的时候，出现了另一个错误。在temp=*strings[a];这句。会报错：S3_1.exe 中的 0x00863a72 处有未经处理的异常: 0xC0000005: 读取位置 0xcccccccc 时发生访问冲突。 我在学习另一个程序的时候，也报了这个错误，也还没有找到怎么解决，能再请教您下吗，谢谢你啦。 就是因为strings中你没有分配内存空间，存的是NULL，对NULL解引用肯定会异常。试着把ch1声明成一个二维数组。。。

user: user-0
content: 谢谢，谢谢你呀，这个问题我试了，已经pass了，然后在运行到子程序的时候，出现了另一个错误。在temp=*strings[a];这句。会报错：S3_1.exe 中的 0x00863a72 处有未经处理的异常: 0xC0000005: 读取位置 0xcccccccc 时发生访问冲突。 我在学习另一个程序的时候，也报了这个错误，也还没有找到怎么解决，能再请教您下吗，谢谢你啦。

user: user-4
content: 你的ch1是一个指针数组，数组中的指针没有初始化就使用了  *chi这个指针还没有初始化就使用了
user-0 提问: C语言中用node*&p报错误，而在c++中却不报错误，很奇怪-。-

回复:
user: user-1
content: 严蔚敏的问题。

user: user-2
content: 不奇怪，c不支持引用

user: user-3
content: c没有引用。

user: user-4
content: C 和 C++ 是两种不同的语言

user: user-5
content: int main() { f(); return 0; }; int f(void) { return 0; }  C语言中不报错误，而在c++中却报错误，很奇怪-。-  int main() { delete new int; return 0; };   C语言中报错误，而在c++中却不报错误，很奇怪-。-

user: user-6
content: 引用 5 楼 wang0635 的回复:严蔚敏的问题。 我也被坑过，当时连引用与取地址都分不清， 照着书上代码一个字母一个字母地打，结果报错， 老师说这样伪代码， 可是书名却叫《数据结构（C语言版）》。 还有配套的光盘，居然只有编译好的exe，没有源码，exe确实可以运行，会输出运行结果，不过我发现每个exe的大小是一样的。

user: user-7
content: 你怎么不直接在 C 里面写 class 呢
user-0 提问: hid 键盘 stm32发出去的和 bus Hound 抓的数据不同

回复:
user: user-0
content: 应该不是吧？？？打印三星6410的usb的数据包发现跟抓包软件抓的是一样的。。。

user: user-1
content: 信号不同步。我猜。
user-0 提问: 谁帮我看看这段加密解密的代码哪里错了，解密的时候发现数据丢失！

回复:
user: user-0
content: 从调试秘钥时 发现 原来正真原因 是循环多了-1  去掉之后就可以了

user: user-0
content: 引用 7 楼 user-1 的回复:[quote=引用 6 楼 libinden71 的回复:] 我看了好多遍了 没发现哪里逻辑有错误啊！ 不要光看，要多输出中间变量，一开始测试的文件可以小一点，比如只包含5个字符，密钥的长度为2，加密后用二进制查看器看一下对不对，如果对了就排除了加密的代码，再调试解密的[/quote]  知道了  秘钥长度问题

user: user-0
content: 谁快帮我看看啊！

user: user-1
content: 引用 6 楼 libinden71 的回复:我看了好多遍了 没发现哪里逻辑有错误啊！ 不要光看，要多输出中间变量，一开始测试的文件可以小一点，比如只包含5个字符，密钥的长度为2，加密后用二进制查看器看一下对不对，如果对了就排除了加密的代码，再调试解密的

user: user-0
content: 我看了好多遍了 没发现哪里逻辑有错误啊！

user: user-0
content: 引用 4 楼 libinden71 的回复:[quote=引用 3 楼 user-1 的回复:] 你在主楼发的代码，只有解密时有吧，加密时没有   不好意思   复制少了 还是一样  还是丢失 [/quote] 我重新发下吧！  #define  _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <Windows.h> #include <string.h>  int prin_size1() { 	FILE  *p = fopen("F:\\cs.txt", "rb"); 	int size = 0; 	int ch; 	if (p != NULL) 	{ 		while ((ch = getc(p)) != EOF) 		{ 			size++; 		} 	} 	fclose(p); 	return size; }  void mainasd()//分段加密 { 	FILE  *pf = fopen("F:\\cs.txt", "rb"); 	FILE *pfw = fopen("F:\\cs(加密).txt", "wb");  	char str[100] = { 0 };  	if (pf == NULL || pfw == NULL) 	{ 		printf("文件打开失败\n"); 	} 	else 	{ 		int size = 0; 		int length = 0; 		printf("请输入加密的密码："); 		scanf("%s", str); 		length = strlen(str); 		size = prin_size1(); 		printf("size=%d\n", size);  		if (size%length == 0) 		{ 			for (int i = 0; i < size / length; i++) 			{ 				for (int j = 0; j < length; j++) 				{ 					fputc(fgetc(pf) ^ str[j], pfw); 				} 			} 		} 		else 		{ 			for (int i = 0; i < size / length - 1; i++) 			{ 				for (int j = 0; j < length; j++) 				{ 					fputc(fgetc(pf) ^ str[j], pfw); 				} 			}  			for (int i = 0; i < size%length; i++) 			{ 				fputc(fgetc(pf) ^ str[i], pfw); 			} 		}  	}   	fclose(pf); 	fclose(pfw); 	system("pause"); }  void main()//分段解密 {  	FILE  *pf = fopen("F:\\cs(加密).txt", "rb"); 	FILE *pfw = fopen("F:\\cs(解密).txt", "wb"); 	char str[100] = { 0 };  	if (pf == NULL || pfw == NULL) 	{ 		printf("文件打开失败\n"); 	} 	else 	{ 		int size = 0; 		int length = 0; 		printf("请输入解密的密码："); 		scanf("%s", str); 		length = strlen(str); 		size = prin_size1();  		if (size%length == 0) 		{ 			for (int i = 0; i < size / length; i++) 			{ 				for (int j = 0; j < length; j++) 				{ 					fputc(fgetc(pf) ^ str[j], pfw); 				} 			} 		} 		else 		{ 			for (int i = 0; i < size / length - 1; i++) 			{ 				for (int j = 0; j < length; j++) 				{ 					fputc(fgetc(pf) ^ str[j], pfw); 				} 			}  			for (int i = 0; i < size%length; i++) 			{ 				fputc(fgetc(pf) ^ str[i], pfw); 			} 		} 	}   	fclose(pf); 	fclose(pfw); 	system("pause"); }

user: user-0
content: 引用 3 楼 user-1 的回复:你在主楼发的代码，只有解密时有吧，加密时没有   不好意思   复制少了 还是一样  还是丢失

user: user-1
content: 你在主楼发的代码，只有解密时有吧，加密时没有

user: user-0
content: 引用 1 楼 user-1 的回复:加密时如果不刚好整除，没有然后了吗  			for (int i = 0; i < size / length - 1; i++) 			{ 				for (int j = 0; j < length; j++) 				{ 					fputc(fgetc(pf) ^ str[j], pfw); 				} 			}  			for (int i = 0; i < size%length; i++) 			{ 				fputc(fgetc(pf) ^ str[i], pfw); 			} 后面这段 就是处理 else 的啊

user: user-1
content: 加密时如果不刚好整除，没有然后了吗
user-0 提问: 小白求助

回复:
user: user-1
content: http://blog.csdn.net/shizhixin/article/details/7538748

user: user-2
content: #include <stdio.h> // scanf     #include <ctype.h> // indigit     int reverse()     {     	char ch;     	scanf("%c", &ch);     	if (ch == '\n')     	{     		return 1;     	}     	else if (!isdigit(ch))     	{     		printf("error input");     		return 0;     	}     	else {     		if (reverse())     		{     			putchar(ch);     			return 1;     		}     		return 0;     	}     }     int main()     {     	reverse();putchar('\n');     	reverse();putchar('\n');     	return 0;     }     /* stdin:     123     12a      */     /* stdout     321     error input     */ // http://ideone.com/uR2jxn

user: user-3
content: #include <stdio.h> #include <windows.h> int main() {     unsigned __int64 v;     int i,L;     char s[80];      while (1) {         if (1==scanf("%I64u",&v)) break;         rewind(stdin);     }     L=sprintf(s,"%I64u",v);     for (i=L-1;i>=0;i--) {         printf("%c",s[i]);fflush(stdout);         Sleep(300);     }      return 0; } //12345678901234567890 //09876543210987654321

user: user-3
content: #include <stdio.h> #include <windows.h> int main() {     unsigned __int64 v;     int i,L;     char s[80];      while (1) {         if (1==scanf("%I64u",&v)) break;         rewind(stdin);     }     L=sprintf(s,"%I64u",v);     for (i=0;i<L;i++) {         printf("%c",s[i]);fflush(stdout);         Sleep(300);     }      return 0; } //12345678901234567890 //12345678901234567890

user: user-4
content: 引用 1 楼 user-4 的回复:用递归 求模   int Mod(int sum) { 	if (sum == 0) 	{ 		return ; 	} 	else 	{  		 Mod(sum / 10); 		 printf("temp=%d\n", sum % 10); 	} } 这条称写错了别在意	printf("sum=%d\n", sum % 10);

user: user-4
content: 用递归 求模   int Mod(int sum) { 	if (sum == 0) 	{ 		return ; 	} 	else 	{  		 Mod(sum / 10); 		 printf("temp=%d\n", sum % 10); 	} }
user-0 提问: 迷宫问题，不知道哪里错了，老是运行错误，求大佬指教

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

user: user-2

user: user-3
content: 仅供参考：/**  * @Title  老鼠走迷宫的拓展探究  * @Author 孙琨  * @Date   2013-11-16  * @At     XUST  * @All Copyright by 孙琨  *  */  #include <iostream> using namespace std;  int maze[9][9] = { // 初始化迷宫，英文maze为“迷宫”     {2,2,2,2,2,2,2,2,2},     {2,0,0,0,0,0,0,0,2},     {2,0,2,2,0,2,2,0,2},     {2,0,2,0,0,2,0,0,2},     {2,0,2,0,2,0,2,0,2},     {2,0,0,0,0,0,2,0,2},     {2,2,0,2,2,0,2,2,2},     {2,0,0,0,0,0,0,0,2},     {2,2,2,2,2,2,2,2,2} };  int startI = 1,startJ = 1; // 入口行列坐标 int endI = 7,endJ = 7;     // 出口行列坐标  void visit(int i,int j)  // 自动搜寻路径 {     int m,n;      maze[i][j] = 1;      if((i == endI) && (j == endJ))     {         cout << endl << "显示路径:" << endl;         for(m=0; m<9; m++)         {             for(n=0; n<9; n++)             {                 if(maze[m][n] == 2)                     cout << "■";                 else if(maze[m][n] == 1)                     cout << "♀";                 else                     cout << "  ";             }             cout << endl;         }     }      if(maze[i][j+1] == 0)         visit(i,j+1);     if(maze[i+1][j] == 0)         visit(i+1,j);     if(maze[i][j-1] == 0)         visit(i,j-1);     if(maze[i-1][j] == 0)         visit(i-1,j);      maze[i][j] = 0;  }  int main(void) {     int i,j;      cout << "显示迷宫: " << endl;     for(i=0; i<9; i++)     {         for(j=0; j<9; j++)         {             if(maze[i][j] == 2)                 cout << "■" ;             else                 cout << "  " ;         }         cout << endl;     }      visit(startI,startJ);      return 0; }

user: user-4
content: 出错时点中断，通过调用堆栈定位到相关代码，观察分析原因

user: user-0
content: 找到bug了，谢谢各位

user: user-0

user: user-0

user: user-5
content: 之前才看到迷宫游戏，现在又来一个，真多

user: user-6
content: 报什么错？最好贴出来
user-0 提问: 大神求救

回复:
user: user-1
content: 引用 2 楼 qq_36326777 的回复:(map_t*)这是强制转换吗  是的，类型转换

user: user-1
content: 将MAP的地址作强制转换转换，转换成指向map_t结构体的指针类型，然后赋值给pq

user: user-0
content: (map_t*)这是强制转换吗

user: user-2
content: 让变量pq的值等于变量MAP的地址