Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: VS2017 中难道不需要用extern就可以调用另一个c文件的函数了？

回复:
user: user-0
content: 引用 13 楼 liups 的回复:[quote=引用 12 楼 wow334 的回复:] [quote=引用 11 楼 KenYuan2016 的回复:] 编译可以通过，运行就有问题了吧  main.c文件： #include <stdio.h>   int main() {  	haha(); 	return 0;  }   a.c  文件： #include <stdio.h>  void haha(){ 	printf("%s","哈哈"); }  竟然不用在main.c中声明haha()方法,也能正常运行。太奇怪了。[/quote] 测试了一下，VC6和VC2013中都是同样的效果[/quote]  百度了一下，可能是GCC 编译器导致的不需要声明。

user: user-1
content: 引用 12 楼 wow334 的回复:[quote=引用 11 楼 KenYuan2016 的回复:] 编译可以通过，运行就有问题了吧  main.c文件： #include <stdio.h>   int main() {  	haha(); 	return 0;  }   a.c  文件： #include <stdio.h>  void haha(){ 	printf("%s","哈哈"); }  竟然不用在main.c中声明haha()方法,也能正常运行。太奇怪了。[/quote] 测试了一下，VC6和VC2013中都是同样的效果

user: user-0
content: 引用 11 楼 KenYuan2016 的回复:编译可以通过，运行就有问题了吧  main.c文件： #include <stdio.h>   int main() {  	haha(); 	return 0;  }   a.c  文件： #include <stdio.h>  void haha(){ 	printf("%s","哈哈"); }  竟然不用在main.c中声明haha()方法,也能正常运行。太奇怪了。

user: user-2
content: 编译可以通过，运行就有问题了吧

user: user-1
content: 引用 9 楼 wow334 的回复:[quote=引用 8 楼 liups 的回复:] 我感觉不要深究这个的好。 非常规的做法能调用与否不是重点，重点是防止错误的调用  嗯。  只是我初学c语言，如果是vs2017的特别功能，不利于我学c的语法规则啊。[/quote] 按标准的写法来，总是没有错的

user: user-0
content: 引用 8 楼 liups 的回复:我感觉不要深究这个的好。 非常规的做法能调用与否不是重点，重点是防止错误的调用  嗯。  只是我初学c语言，如果是vs2017的特别功能，不利于我学c的语法规则啊。

user: user-1
content: 我感觉不要深究这个的好。 非常规的做法能调用与否不是重点，重点是防止错误的调用

user: user-0
content: 引用 5 楼 至尊宝、 的回复:[quote=引用 楼主 wow334 的回复:] 如题，谢谢！ 如题，谢谢！ 如题，谢谢！函数默认是extern的，变量的话就需要手动extern了[/quote]  问题是我都没有include 另一个文件 ，也没有在要用的地方extern 声明另一个文件的函数啊。

user: user-1
content: 没用过2017

user: user-3
content: 引用 楼主 wow334 的回复:如题，谢谢！ 如题，谢谢！ 如题，谢谢！函数默认是extern的，变量的话就需要手动extern了

user: user-0
content: 引用 3 楼 liups 的回复:[quote=引用 2 楼 wow334 的回复:] [quote=引用 1 楼 liups 的回复:] include也可以吧 是的。  但是我什么也没做就可以在main函数中引用另一个文件中的函数。[/quote] 也许是因为文件加入了工程或项目的原因[/quote] 哦哦，谢谢！   可不可以让VS2017恢复正常的c语言规则？

user: user-1
content: 引用 2 楼 wow334 的回复:[quote=引用 1 楼 liups 的回复:] include也可以吧 是的。  但是我什么也没做就可以在main函数中引用另一个文件中的函数。[/quote] 也许是因为文件加入了工程或项目的原因

user: user-0
content: 引用 1 楼 liups 的回复:include也可以吧 是的。  但是我什么也没做就可以在main函数中引用另一个文件中的函数。

user: user-1
content: include也可以吧
user-0 提问: C语言程序转换为单片机汇编程序，急求，非常感谢！

回复:
user: user-1
content: 不明白为什么要汇编？当年我们没有C51这些工具时很苦的！ 如果是C51好象直接可以转换成汇编的，看这里： https://zhidao.baidu.com/question/433033708.html
user-0 提问: 求一个点阵图相似度算法，如电子表数字识别。

回复:
user: user-0
content: 怎么没有人给点建议啊，必要ai学习，普通算法啊，提供点建议吧

user: user-0
content: 端午节祝福大家。继续顶上去。望人来给点建议，就是简单普通算法，不要硬塞去学习。

user: user-0
content: 我都一直看啊，我不是要人家全教你，说点相关的一个链接也行啊。如果自己没有看点书，学点，怎么知道从两点斜率下手啊。这论坛不会是总是发点，诶你吃饭没有吧。有时候给一个关键字都很起到作用。不像你说的。

user: user-1
content: 这种就是要看书从头学起的嘛看视频也行，别人在这里也没办法把全部教给你呀

user: user-0
content: 求好心人给点料，普通算法，不要动不动就学习啊。如果两点斜率，再统计不同地方等。

user: user-0
content: 像这个跟数字点阵图识别应该有相似啊。普通算法有没有啊？一维信号可以相关系数，但是这个是二维，有什么好算法像相关系数啊？因为棋盘上的点变化无常，但是点数又不多，像这个应该无效用到学习吧？希望大家指点下。

user: user-2
content: 翠花，上卷积神经网络

user: user-3
content: 如果是通用的一般是找3个最明显的特征点来定位旋转的角度 单独就这个问题可以简单的用重心方式来确定

user: user-4
content: 桂花，上OpenCV！
user-0 提问: 在堆内存中找到数据是否只有这两种方式？

回复:
user: user-1
content: 堆上的内存，要看你申请的对上空间是连续的还是不连续的，比如你在堆上一次申请一块内存， 那么可以像使用数组那样访问堆上的这块内存，如果你是编写链表（内存可能不连续），那么 就需要通过next/prev节点去访问和查找堆上的内存位置。

user: user-2
content: 存储数据结构本来就和堆内存没有任何关系 内存就像是盒子，在盒子里放什么和盒子本身有关么？并没有

user: user-3
content: MSDN98中的例子walker又名pwalk。 完整列出指定进程的内存使用情况，显示进程地址空间内容，装载哪些DLL，代码、数据、堆栈段分配在何处，可以用来检测内存泄漏，监测内存使用。http://download.csdn.net/detail/zhao4zhong1/3667896

user: user-4
content: 假中堆内存地址编号是0-0xff 0 a 1 b 2 c 3 d 4 5 5 6 . . . ff 内存表现只能是地址0的数据，地址1的数据，至于链表，你得先确定他是个链表，地址4存的是5，可以代表是数据5，也可以认为是一个针向5地址的指针，应该说堆中找数据，只有地址，数据，也就是你说的单独的指针，所有的数据只能通过指针去找。
user-0 提问: 卡布列克 运行出错可以帮忙改改不

回复:
user: user-1
content: https://blog.csdn.net/qq_38375538/article/details/74080135 看看别人写的吧

user: user-2
content: 首先先学会描述问题，运行出错是什么？与预期结果不符？程序异常退出？

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

user: user-0
content: 好的 我懂了 谢谢
user-0 提问: dbgView在 win10 32位和win7 64上无法显示驱动中DbgPrint输出的日志，已经按照网上的操作，添加注册表中的值了，依旧不能显示，在win7

回复:
user: user-0
content: 引用 4 楼 Eleven的回复:你驱动中输出log这样写，DbgViewer就可以看到了。 DbgPrintEx(DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL, ...);   enum DBG_LEVEL { INF = 0x0, WRN, ERR };    #define	DUMP(level, lpszFormat, ...)						DbgPrintEx(DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL, "[DRV] : " ## lpszFormat ## "\n", __VA_ARGS__)   谢谢，好像不是这个原因，我做的是驱动开发，我是在系统睡眠唤醒时捕捉日志的，就是捕捉不到，唤醒后就能捕捉到，应该是唤醒时先唤醒kernal，然后才唤醒dbgView，因此捕捉不到

user: user-0
content: 引用 1 楼 user-3的回复:以前搜到的信息，参考一下  DbgView 4.81 Win10修正版 DbgView在Windows10里面有一个小bug：关闭DbgView，第二次启动时无法Capture Kernel。  这是因为DbgView在释放dbgv.sys时写入失败。  Win10新增了一个限制，驱动加载到内核后是不允许修改文件的。 而在以前的Windows版本中驱动加载后文件是可以删除或修改的。  因此对DbgView.exe稍微修改了一下，写入dbgv.sys失败时提示且不退出正常逻辑。  具体修改内容是 .text:004051AC                 jnz     short loc_4051F8 改成了 .text:004051AC                 jmp    short loc_4051F8  filepos: 45ac                      75(jnz) -> EB(jmp)                                                                  mengxp                                                                 2016-12-3 ------------ 原版DebugView在Win10下经常报错，需要到"C:\Windows\System32\drivers"中找到"dbgv.sys"，删除它，再使用"管理员身份"运行该软件。 我的应该不是这个版本，在win7 32位上能正常显示驱动内核日志，但在win7 64和win10上无法显示内核日志，是不是64位系统上要使用64位的dbgView？

user: user-1
content: 你驱动中输出log这样写，DbgViewer就可以看到了。 DbgPrintEx(DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL, ...);   enum DBG_LEVEL { INF = 0x0, WRN, ERR };    #define	DUMP(level, lpszFormat, ...)						DbgPrintEx(DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL, "[DRV] : " ## lpszFormat ## "\n", __VA_ARGS__)

user: user-2
content: 把这个打钩就行了

user: user-3
content: 以前搜到的信息，参考一下  DbgView 4.81 Win10修正版 DbgView在Windows10里面有一个小bug：关闭DbgView，第二次启动时无法Capture Kernel。  这是因为DbgView在释放dbgv.sys时写入失败。  Win10新增了一个限制，驱动加载到内核后是不允许修改文件的。 而在以前的Windows版本中驱动加载后文件是可以删除或修改的。  因此对DbgView.exe稍微修改了一下，写入dbgv.sys失败时提示且不退出正常逻辑。  具体修改内容是 .text:004051AC                 jnz     short loc_4051F8 改成了 .text:004051AC                 jmp    short loc_4051F8  filepos: 45ac                      75(jnz) -> EB(jmp)                                                                  mengxp                                                                 2016-12-3 ------------ 原版DebugView在Win10下经常报错，需要到"C:\Windows\System32\drivers"中找到"dbgv.sys"，删除它，再使用"管理员身份"运行该软件。
user-0 提问: 求改错那里有错误

回复:
user: user-1
content: scanf("%f",st[i].score[j]); 这一句应该加一个&

user: user-2
content: scanf你都没有使用&符号取地址咧

user: user-3
content: #include <stdio.h>  struct stud {     char name[30];     float score[4];     float total;     float average; };  int main(void) {     struct stud  st[5];     int  i,j;      for(i=0;i<5;i++)     {         scanf("%s",st[i].name);         for(j=0;j<4;j++)             //scanf("%f",st[i].score[j]);             scanf("%f", &st[i].score[j]);      }      for(i=0;i<5;i++)     {         st[i].total=0;         for(j=0;j<4;j++)             st[i].total += st[i].score[j];         st[i].average = st[i].total/4;         printf("%.1f\n", st[i].average);     }     return 0; }  供参考～
user-0 提问: 急急急，求大佬！！

回复:
user: user-1
content: 两种方法，一种就是几个printf语句就可以了。另一种就是for循环就可以了。这是C的基础知识哦！

user: user-2
content: 先找出行号和空格数的关系，找到这个关系后就很容易写代码了，当然C语言基础得需要熟悉了。

user: user-0
content: 引用 6 楼 636f6c696e的回复:你是麻瓜么。。。自己根据需要加几个空格不就好了 [quote=引用 5 楼 西北✔ 的回复:] [quote=引用 2 楼 user-6的回复:]printf("*****"); printf(" *****"); printf("  *****"); printf("   *****"); printf("    *****"); *****    *****        *****            *****               ***** 最后是这样嘛，大哥[/quote][/quote] 刚学，啥都不会。。。。

user: user-3
content: for (int i = 0; i != 5; ++i) 	{ 		printf("%*s*****\n",i*2,""); 	}

user: user-4
content: 你是麻瓜么。。。自己根据需要加几个空格不就好了 引用 5 楼 西北✔ 的回复:[quote=引用 2 楼 user-6的回复:]printf("*****"); printf(" *****"); printf("  *****"); printf("   *****"); printf("    *****"); *****    *****        *****            *****               ***** 最后是这样嘛，大哥[/quote]

user: user-0
content: 引用 2 楼 user-6的回复:printf("*****"); printf(" *****"); printf("  *****"); printf("   *****"); printf("    *****"); *****    *****        *****            *****               ***** 最后是这样嘛，大哥

user: user-5
content: 两层for循环不就行了

user: user-6
content: printf("*****"); printf(" *****"); printf("  *****"); printf("   *****"); printf("    *****");

user: user-0
content: 这样子的 *****    *****        *****            *****               *****
user-0 提问: DFT简洁计算问题

回复:
user: user-0
content: 一种结合DFT和FFT的实用傅里叶变换算法  可以百度一下，和这个反向的算法，已经稍有眉目了，还在研究， FFTW3库我查下再说

user: user-1
content: 直接用fftw3库来算啊 何必自己造轮子呢,还没别人造得好 可以支持任意点数的fft运算

user: user-2
content: FFT只限于2^n数量的数据才能用的， 不知道你是在哪看的方法呢

user: user-3
content: https://www.baidu.com/s?wd=C+DFT&ie=UTF-8
user-0 提问: 删除一个字符数组当中的其中一个元素然后输出，被删除的元素用键盘输入，（1）主函数完成被删除元素的输入，数组元素输入以及删除后数组元素的输出。（2）删除功能用子函

回复:
user: user-1
content: 起码自己写写，要现成的是需要付出费用的，别想着天上总会掉馅饼

user: user-2
content: 哦
user-0 提问: c语言多线程

回复:
user: user-1
content: 可以不用多线程，设计好函数时间分配就可以了两个函数不要用死循环，循环入到两个函数外层，只用一个就行了

user: user-2
content: 我要是没记错的话pthread.h不是windows平台下的头文件，windows下要用windows.h还是什么的

user: user-0
content: 引用 2 楼 gouyanfen的回复:那个是封装的一个线程库，VC6自己设计多线程，并不一定要用pthread，CreateThread就可以了，线程库拥有更多的线程管理和互斥、同步方面的东西,也是封装了原系统支持的东西。 其实多线程我实在是不太懂，请问大神让两个函数同时进行的问题可以不用多线程吗？（用的是easyx 想做一个小人接随机掉落的小球的游戏 怎么让控制小人的同时掉落小球？）

user: user-1
content: 那个是封装的一个线程库，VC6自己设计多线程，并不一定要用pthread，CreateThread就可以了，线程库拥有更多的线程管理和互斥、同步方面的东西,也是封装了原系统支持的东西。

user: user-1
content: CreateThread为什么要包含<pthread.h>?
user-0 提问: C#

回复:
user: user-1
content: 文件已经上传，地址https://download.csdn.net/download/caihouhui/11217138    如有问题可与我联系，邮箱caihh_xy@foxmail.com

user: user-0
content: 引用 3 楼 user-1的回复:我找一下文件 ，晚点进我的空间下载吧 好的，是发到你的博客里吗

user: user-1
content: 我找一下文件 ，晚点进我的空间下载吧

user: user-0
content: 能不能发我一下11111

user: user-1
content: 这个系统我有源码
user-0 提问: 关于文件，求助，我连题都没有读懂

回复:
user: user-1
content: 个人理解是将数组内的数据进行分组，然后将分组结果放在.txt中，只不过这个文件是需要通过代码去创建的

user: user-1
content: 乍一看，这道题目平平无奇，让人厌烦，仔细一揣摩，这道题有大恐怖啊！它居然用的是中英混写这种失传已久的写法！不对！！竟然还用了阿拉伯数字，天啊，百年难得一见，我胡汉三没白来！什么？？？居然还加了左右括号，恐怖，大恐怖啊，恐怖如斯！吓得我倒吸一口凉气！当场选择去世
user-0 提问: 指针与数组`函数

回复:
user: user-1
content: 这题咋写哇

user: user-2
content: 乍一看，这道题目平平无奇，让人厌烦，仔细一揣摩，这道题有大恐怖啊！它居然用的是中英混写这种失传已久的写法！不对！！竟然还用了阿拉伯数字，天啊，百年难得一见，我胡汉三没白来！什么？？？居然还加了左右括号，恐怖，大恐怖啊，恐怖如斯！吓得我倒吸一口凉气！当场选择去世
user-0 提问: 拜托各位大神帮忙写一下！

回复:
user: user-1
content: #include<stdio.h> int main() { 	int r; 	int PI=3.1415926; 	double v; 	printf("请输入圆球的半径：\n");     scanf("%d", &r);     v=( (4.0 / 3) * PI*r*r*r   );      printf("当R=%d时球体体积为：\n%.4lf\n", r, v); }

user: user-2
content: void sphere_volume() {     float volume = 0;     int r = 0;     scanf("%d", &r);      volume = (4.0 / 3) * 3.14 * (r * r * r);     printf("volume: %f\n", volume); }

user: user-3
content: 去百度一下都比发帖快。 当然了，不排除有闲得慌的喜欢帮人写作业的人——虽然大概率也是百度出来的。

user: user-4
content: 仅供参考，不喜勿喷！ 球体积： #define PI 3.1415926  double func(int r);  int main() { 	printf("请输入圆球的半径：\n"); 	int r; 	scanf_s("%d", &r); 	printf("当R=%d时球体体积为：\n%.4lf\n", r, func(r)); 	return 0; }  double func(int r) { 	return (4.0 / 3) * PI*r*r*r; } 阶乘： int func(int n);  int main() { 	int m, n; 	printf("请输入m,n的值：\n"); 	scanf("%d%d", &m, &n); 	printf("m!+n!的值为：\n%d", func(m) + func(n)); 	while (1); 	return 0; }  int func(int n) { 	if (n == 0 || n == 1) 	{ 		return 1; 	} 	return n * func(n - 1); } 素数因子： int isprime(int n);  int main() { 	printf("请输入一个整数m(m>1)：\n"); 	int m; 	scanf_s("%d", &m); 	if (m < 2) 	{ 		printf("输入无效！\n"); 		return 0; 	} 	if (isprime(m)) 	{ 		printf("%d是素数！\n", m); 	} 	else 	{ 		for (int i = 2; i < m; i++) 		{ 			if (m%i == 0) 			{ 				printf("%d、", i); 			} 		} 	} 	 	while (1); 	return 0; }  int isprime(int n) { 	if (n < 2) 	{ 		return 0; 	} 	for (int i = 2; i < n; i++) 	{ 		if (n%i == 0) 		{ 			return 0; 		} 	} 	return 1; } 素数和：  int isprime(int n); int sum1(int m, int n);  int main() { 	printf("请输入任意一个整数n(n>1):\n"); 	int n, sum = 0; 	scanf_s("%d", &n); 	if (n < 2) 	{ 		printf("输入无效！\n"); 		return 0; 	} 	for (int i = 2; i <= n; i++) 	{ 		if (isprime(i)) 		{ 			sum = sum1(sum, i); 		} 	} 	printf("1~%d之间的素数之和为：\n%d\n", n, sum); 	return 0; }  int isprime(int n) { 	if (n < 2) 	{ 		return 0; 	} 	for (int i = 2; i < n; i++) 	{ 		if (n%i == 0) 		{ 			return 0; 		} 	} 	return 1; }  int sum1(int m,int n) { 	return m + n; }
user-0 提问: 可以调适但运行出问题

回复:
user: user-1
content: 引用 15 楼 星空夜色 的回复:已经结贴了，您可以看看结了没 Bingo！！！ 顺祝周末愉快！ ～

user: user-0
content: 引用 13 楼 星空夜色的回复:[quote=引用 12 楼 拥抱Linux的回复:][quote=引用 10 楼 星空夜色 的回复:] 手机的话要怎么操作。。。 （1）手机的csdn的app不能结帖。别不相信，这就是牛比闪闪的csdn的手机app的功能缺失。 （2）一定要在手机上操作的话，和电脑上的操作是一回事，就是用手机浏览器打开csdn网址，把页面显示模式改成 电脑端 模式，然后浏览器里显示的网页就是普通网页而不是手机端的wap网页了，然后就登录、点开自己的帖子、结帖、给分。 ～[/quote] 好的，请等我回去就弄[/quote] 已经结贴了，您可以看看结了没

user: user-0
content: 引用 11 楼 袁君元的回复:第一个for语句后多余了一个分号呀 谢谢，这个已经解决了

user: user-0
content: 引用 12 楼 拥抱Linux的回复:[quote=引用 10 楼 星空夜色 的回复:] 手机的话要怎么操作。。。 （1）手机的csdn的app不能结帖。别不相信，这就是牛比闪闪的csdn的手机app的功能缺失。 （2）一定要在手机上操作的话，和电脑上的操作是一回事，就是用手机浏览器打开csdn网址，把页面显示模式改成 电脑端 模式，然后浏览器里显示的网页就是普通网页而不是手机端的wap网页了，然后就登录、点开自己的帖子、结帖、给分。 ～[/quote] 好的，请等我回去就弄

user: user-1
content: 引用 10 楼 星空夜色 的回复:手机的话要怎么操作。。。 （1）手机的csdn的app不能结帖。别不相信，这就是牛比闪闪的csdn的手机app的功能缺失。 （2）一定要在手机上操作的话，和电脑上的操作是一回事，就是用手机浏览器打开csdn网址，把页面显示模式改成 电脑端 模式，然后浏览器里显示的网页就是普通网页而不是手机端的wap网页了，然后就登录、点开自己的帖子、结帖、给分。 ～

user: user-2
content: 第一个for语句后多余了一个分号呀

user: user-0
content: 引用 9 楼 拥抱Linux的回复:[quote=引用 8 楼 星空夜色 的回复:] 确实有用，谢谢，但是该怎么结贴  电脑上浏览器里点开自己的帖子，标题旁边就有  「结帖」、「给分」之类的按钮，点击或者输入分数，最后 提交 就可以了。 ～[/quote] 手机的话要怎么操作。。。

user: user-1
content: 引用 8 楼 星空夜色 的回复:确实有用，谢谢，但是该怎么结贴  电脑上浏览器里点开自己的帖子，标题旁边就有  「结帖」、「给分」之类的按钮，点击或者输入分数，最后 提交 就可以了。 ～

user: user-0
content: 引用 7 楼 拥抱Linux的回复:！ 第一个for循环的圆括号后面，多了一个分号。 ～ 另外，建议在使用for、while、if、switch-case这些结构的时候，务必把后面的代码块用花括号括起来，即使只有一行代码也括起来，提高可读性，减少书写错误。 ～ 如有帮助，烦请及时结帖、给分！：-） ～ 确实有用，谢谢，但是该怎么结贴

user: user-1
content: ！ 第一个for循环的圆括号后面，多了一个分号。 ～ 另外，建议在使用for、while、if、switch-case这些结构的时候，务必把后面的代码块用花括号括起来，即使只有一行代码也括起来，提高可读性，减少书写错误。 ～ 如有帮助，烦请及时结帖、给分！：-） ～

user: user-0
content: 引用 5 楼 赵4老师的回复:崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。 Alt+7没出现页面，弹出对话框没有按钮，可以调适成功

user: user-3
content: 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。

user: user-0
content: 引用 1 楼 user-4的回复:array数组越界了，比如数组长度是2，你却访问了arr[2] #include <stdio.h> #define N 10 void main() { 	int array[N], MAX, i; 	for (i = 0; i < N; i++); 	scanf("%d", array + i); 	MAX = array[0]; 	for (i = 1; i < N; i++) 		if (MAX < array[i]) 			MAX = array[i]; 	printf("MAX=%d\n", MAX); }

user: user-0
content: 引用 1 楼 user-4的回复:array数组越界了，比如数组长度是2，你却访问了arr[2] 我输入的5  9  8  7  10  67  3  980  9  12

user: user-0
content: 引用 1 楼 user-4的回复:array数组越界了，比如数组长度是2，你却访问了arr[2] 什么意思，菜鸟没看懂

user: user-4
content: array数组越界了，比如数组长度是2，你却访问了arr[2]
user-0 提问: InterlockedAnd64及InterlockedPushListSList(Ex)的疑问

回复:
user: user-0
content: 第一个小问题已经搞明白了 原来是自旋锁的用法  InterlockedPushListSList(Ex)函数怎么使用，主要是不明白第二及第三个参数的如何使用 希望给个实例

user: user-1
content: 仅执行一次和使用do while循环执行，语义怎么可能一样呢？ 《Windows核心编程》
user-0 提问: 数组排序从大到小

回复:
user: user-1
content: 你输出的结果是数的地址，因为你的printf里面有&，把&去掉就可以了

user: user-0
content: 统一回复一下:哦了谢谢各位

user: user-2
content: 输出的时候，printf里去掉&

user: user-3
content: 我靠，还冒泡呢。。

user: user-4
content: 把printf里的&去掉，不然输出的是地址
user-0 提问: 小白求助：求推荐win10环境下可以安装的c语言编译软件

回复:
user: user-1
content: vs2015吧,那个Tubor v2.0太古老了，不行下个绿色版的

user: user-2
content: 可以百度搜一下win10系统如何安装

user: user-2
content: win10子系统

user: user-3
content: 我在Win10下用的是VS2010、VS2013和VS2015

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

user: user-5
content: CodeBlock MinGW 都很好，免费

user: user-6
content: Visual Studio 2017应该是VS里最新最稳定的版本了(2019刚出 可能还有一些bug)

user: user-7
content: vscode

user: user-8
content: 嗯，还有个2019.

user: user-8
content: 必须是Visual Studio 2012/2015/2017

user: user-9
content: Turbo C v2.0 ?如果一定要用这个，可以去下有人整合的工具，但是64位系统下面可能不行，这个问题与win10或win7无关

user: user-10
content: codeblock
user-0 提问: 小白求助

回复:
user: user-1
content: 你的素数判断里面，按照你的思路2会判断为非素数，应该把m为2的情况单独列举出来

user: user-2
content: 引用 2 楼 gouyanfen 的回复: int prime(int m) {   if(m>1) {   for(int i=2;i<m/2;i++)//上个习惯性输成0了    if(m%i==0)      return 0;      return 1;  } return 0; }  上个习惯性输成0了

user: user-2
content: int prime(int m) {   if(m>1) {   for(int i=0;i<m/2;i++)    if(m%i==0)      return 0;      return 1;  } return 0; }

user: user-3
content: 你的prime函数会判断1也是素数，而题目要求1不是素数。你在主函数循环的时候把1也算进去了，所以你的最后结果都多了1。
user-0 提问: C语言while语句编程

回复:
user: user-0
content: 谢谢各位大神 🍭🍭🍭🍭

user: user-1
content: 引用 3 楼 威斯旺卡 的回复:[quote=引用 2 楼 至尊宝、 的回复:] 代码仅供参考，不喜勿喷！！#include<stdio.h> #include<math.h>  int func(int n);		//求阶乘  int main() { 	double x; 	int n = 0; 	double z = 0; 	printf("请输入x的值："); 	scanf("%lf", &x); 	while ((pow(x, n) / func(n)) >= pow(10, -6)) 	{ 		z += pow(x, n) / func(n); 		n++; 	} 	printf("f(x)的值为：%.6lf\n" , z); 	return 0; }  int func(int n) { 	int temp; 	if (n == 1 || n == 0) 	{ 		temp = 1; 	} 	else  	{ 		temp = n * func(n - 1); 	} 	return temp; } 把while后边改为while(分子/分母>1e-6) pow尽量少用，最好把分子和分母分别用函数计算出来，再返回给一个值[/quote]我本来是和你想的一样，分子分母分别写了个函数计算，后来又把分子那个删了，感觉还是pow更方便一些。

user: user-2
content: 引用 2 楼 至尊宝、 的回复:代码仅供参考，不喜勿喷！！#include<stdio.h> #include<math.h>  int func(int n);		//求阶乘  int main() { 	double x; 	int n = 0; 	double z = 0; 	printf("请输入x的值："); 	scanf("%lf", &x); 	while ((pow(x, n) / func(n)) >= pow(10, -6)) 	{ 		z += pow(x, n) / func(n); 		n++; 	} 	printf("f(x)的值为：%.6lf\n" , z); 	return 0; }  int func(int n) { 	int temp; 	if (n == 1 || n == 0) 	{ 		temp = 1; 	} 	else  	{ 		temp = n * func(n - 1); 	} 	return temp; } 把while后边改为while(分子/分母>1e-6) pow尽量少用，最好把分子和分母分别用函数计算出来，再返回给一个值

user: user-1
content: 代码仅供参考，不喜勿喷！！#include<stdio.h> #include<math.h>  int func(int n);		//求阶乘  int main() { 	double x; 	int n = 0; 	double z = 0; 	printf("请输入x的值："); 	scanf("%lf", &x); 	while ((pow(x, n) / func(n)) >= pow(10, -6)) 	{ 		z += pow(x, n) / func(n); 		n++; 	} 	printf("f(x)的值为：%.6lf\n" , z); 	return 0; }  int func(int n) { 	int temp; 	if (n == 1 || n == 0) 	{ 		temp = 1; 	} 	else  	{ 		temp = n * func(n - 1); 	} 	return temp; }

user: user-0
content: 就是第三题，提示在标题后面
user-0 提问: 小白求助，为啥sum不对？

回复:
user: user-1
content: 你的判断素数的函数中应该把2单独讨论，按照你的for循环，2也被判断为非素数了

user: user-2
content: 引用 2 楼 qq_45074415 的回复:还是搞不定啊，难道判断素数的函数不是这样的？ 当然不是。 ～

user: user-0
content: 引用 1 楼 拥抱Linux的回复:！ 判断素数的函数不对，导致在main函数中变量count和变量sum统计的是数字6、8、9、10的个数与和。 再想想素数应该如何判断，修改代码，再多调试一下吧！ ～ 还是搞不定啊，难道判断素数的函数不是这样的？

user: user-2
content: ！ 判断素数的函数不对，导致在main函数中变量count和变量sum统计的是数字6、8、9、10的个数与和。 再想想素数应该如何判断，修改代码，再多调试一下吧！ ～
user-0 提问: C链表参数问题

回复:
user: user-0
content: 引用 3 楼 user-2的回复:如果你需要改变list（LNode*）的值，即改变头节点的地址，那么你传参的时候是需要用Linklist*（LNode**），但显然你插入以及删除是不需要修改头节点的地址，所以这两个函数没必要用linklist*。 我之前刚好写过一篇文章，你看对你有没有帮助 https://blog.csdn.net/qq_40946921/article/details/90047918 说得非常好！当时我没考虑这个功能。

user: user-1
content: 函数设计要考虑他的独立性，插入链表，需要先决条件 1.给谁插入节点 2.节点的内容 3.插入节点的位置(头，尾，指定位置)  那么就需要三个参数最少 NODE * head(链表头) NODE 节点 ,int 插入位置  你的函数的e,q->data=e,为什么不直接读到q->data  同样的道理，删除节点，最起码要知道删除谁的节点，要删除节点的内容,如果有需要还应该设计个参数:节点匹配方式  以上是我的理解，希望对你有所帮助

user: user-2
content: 如果你需要改变list（LNode*）的值，即改变头节点的地址，那么你传参的时候是需要用Linklist*（LNode**），但显然你插入以及删除是不需要修改头节点的地址，所以这两个函数没必要用linklist*。 我之前刚好写过一篇文章，你看对你有没有帮助 https://blog.csdn.net/qq_40946921/article/details/90047918

user: user-2
content: 如果你需要改变list（LNode*）的值，即改变头节点的地址，那么你传参的时候是需要用Linklist*（LNode**），但显然你插入以及删除是不需要修改头节点的地址，所以这两个函数没必要用linklist*。 我之前刚好写过一篇文章，你看对你有没有帮助 https://blog.csdn.net/qq_40946921/article/details/90047918

user: user-2
content: 如果你需要改变list（LNode*）的值，即改变头节点的地址，那么你传参的时候是需要用Linklist*（LNode**），但显然你插入以及删除是不需要修改头节点的地址，所以这两个函数没必要用linklist*。 我之前刚好写过一篇文章，你看对你有没有帮助 https://blog.csdn.net/qq_40946921/article/details/90047918
user-0 提问: 热爱学习的我又来请教问题了。

回复:
user: user-0
content: 转发点击抽奖

user: user-1
content: 其实你想要测试这个问题的结果，你可以选择把p->age先初始化为特定的字符，重新定义一个 char * c_age=p->age[SIZE],然后strcpy之后打印出内存中的数字对比一下你就明白了 struct student { int num; char age[SIZE]; char comp_age[20];  } struct student *p=new student;   char * c_age=p->age[SIZE], strcpy(c_age,"hello world"); for (i=0;i<(SIZE+20);i+=4) printf("%08X\n",*(DWORD*)((DWORD)p-age+i)); 这样输出内存中的数字出来看下就明白了

user: user-0
content: 引用 6 楼 gouyanfen 的回复:p->age[SIZE]这个是指向age这个这符数组的头地址+(sizeof(char)*SIZE),假定可以使用=赋值,那么越界的同时会把hello放到p->age结尾之后的地方: 假如:p-age分配的地址为0x10000;那么p->age[SIZE]其实指向的地方是0x10050谢谢  明白了

user: user-1
content: 内存是个连续空间,age[SIZE]是什么取决于你的程序内存中的结构，溢出攻击就是采用这种方法，重新构造代码

user: user-0
content: 引用 7 楼 weixin_45066336 的回复:age这个数组你只能取到SIZE-1，那么第SIZE个是什么？哈哈 忽略了  不过不影响重点。

user: user-2
content: age这个数组你只能取到SIZE-1，那么第SIZE个是什么？

user: user-1
content: p->age[SIZE]这个是指向age这个这符数组的头地址+(sizeof(char)*SIZE),假定可以使用=赋值,那么越界的同时会把hello放到p->age结尾之后的地方: 假如:p-age分配的地址为0x10000;那么p->age[SIZE]其实指向的地方是0x10050

user: user-3
content: strcpy(p->age,"hello");

user: user-0
content: 引用 3 楼 自信男孩 的回复：[quote=引用 2 楼 小提琴家爱因斯坦 的回复:] [quote=引用 1 楼 user-5 的回复：]p->age[SIZE]="hello";  这种字符数组的整体赋值只能在字符数组初始化时使用，不能用于字符数组的赋值，字符数组的赋值只能对其元素一一赋值，赋值方法是错误的我知道是错的。但我不明白为什么是一堆乱码[/quote] 因为你把一个地址赋值给age[SIZE];而不是把字符串赋值给age中的元素。  另外，SIZE是age的长度，那么这样赋值也已经导致age越界了。  [/quote]不好意思 有点不明白。“hello”赋值相当于一个地址吗。size是80也不够吗

user: user-4
content: 引用 2 楼 小提琴家爱因斯坦 的回复:[quote=引用 1 楼 user-5 的回复：]p->age[SIZE]="hello";  这种字符数组的整体赋值只能在字符数组初始化时使用，不能用于字符数组的赋值，字符数组的赋值只能对其元素一一赋值，赋值方法是错误的我知道是错的。但我不明白为什么是一堆乱码[/quote] 因为你把一个地址赋值给age[SIZE];而不是把字符串赋值给age中的元素。  另外，SIZE是age的长度，那么这样赋值也已经导致age越界了。

user: user-0
content: 引用 1 楼 user-5 的回复：p->age[SIZE]="hello";  这种字符数组的整体赋值只能在字符数组初始化时使用，不能用于字符数组的赋值，字符数组的赋值只能对其元素一一赋值，赋值方法是错误的我知道是错的。但我不明白为什么是一堆乱码

user: user-5
content: p->age[SIZE]="hello";  这种字符数组的整体赋值只能在字符数组初始化时使用，不能用于字符数组的赋值，字符数组的赋值只能对其元素一一赋值，赋值方法是错误的
user-0 提问: socket编程时，使用memcpy发生了一个很奇怪的段错误

回复:
user: user-1
content: 越界是肯定的, 但是越界后是否出错要看实际情况 越界 是指访问 "this is server!"  这个 如果这个数据刚好放到一个内存区的末端, 越界到另外一段内存就可能会报错 实际情况可以直接调试看异常位置, 也可以用工具去查看exe, 看数据的位置

user: user-2
content: 那你只能贴gdb的bt full信息了。

user: user-0
content: 引用 6 楼 jiamianshiye_16_com 的回复：返回值和ip地址一样，头文件也是有的

user: user-2
content: inet_ntop()  你关注下这个函数的返回值，与ip， 的地址是否相符合，如果不符合，很 有可能是64位系统的问题。   #include <arpa/inet.h> 如果是64位系统，加上这个头文件。

user: user-0
content: 1，把memcpy换成strcpy是没有问题的 2，把sizeof（buf）换成552没有问题，换成553就段错误 看来不仅仅是长度超了的问题，毕竟把ntohs和inet_ntop两行注释掉也没有问题 这里面看来还是很复杂的～

user: user-3
content: 引用 3 楼 jiamianshiye_16_com 的回复:我觉得问题不在于越界。memcpy只是个复制内存函数，没有超出buf的范围，这个并没有问题，只是用法很奇怪，字符串赋值不是应该用strcpy么。  但是这个段错误，应该用gdb来调试，然后你把  bt  full 的信息都贴出来，这样比较好定位问题。 拷贝长度是1024，第二个参数其实是一个地址，那么拷贝的个数就是从这个地址开始的1024个字节，那么不就越界了吗？

user: user-2
content: 我觉得问题不在于越界。memcpy只是个复制内存函数，没有超出buf的范围，这个并没有问题，只是用法很奇怪，字符串赋值不是应该用strcpy么。  但是这个段错误，应该用gdb来调试，然后你把  bt  full 的信息都贴出来，这样比较好定位问题。

user: user-3
content: 越界了 ，这个字符串的长度也只有不到20个字符，但是你要拷贝1024个字符到buf里，因此很明显越界了。 建议改成： memcpy(buf, "xxx", strlen("xxx") + 1);

user: user-4
content: memcpy(buf, "this is server!", sizeof(buf)); //这句操作内存越界了啊， "this is server!"这个字符串没有1024这么长， //直接写成 char buf[1024] = "this is server!";就行了
user-0 提问: 求助！

回复:
user: user-1
content: 引用 1 楼 至尊宝、 的回复:答案是B。后自增的返回值为a原值的一个拷贝临时变量，而实际的a进行自增。你可以这样理解，后置的++为先运算在自增，因此第一次循环时，a=0，满足a<=2，参与完比较运算之后a自增变为了1，所以进入循环后第一个打印的为1，后边循环也一样。其实在参与比较的时候a就已经是1了，不过a++的返回值是a原值的一个临时变量为0。 ～ while的后面紧跟了一个分号哦～ ～

user: user-2
content: 答案是B。后自增的返回值为a原值的一个拷贝临时变量，而实际的a进行自增。你可以这样理解，后置的++为先运算在自增，因此第一次循环时，a=0，满足a<=2，参与完比较运算之后a自增变为了1，所以进入循环后第一个打印的为1，后边循环也一样。其实在参与比较的时候a就已经是1了，不过a++的返回值是a原值的一个临时变量为0。

user: user-0
content: 引用 7 楼 liups的回复:[quote=引用 5 楼 qq_45039499 的回复:] [quote=引用 1 楼 至尊宝、的回复:]答案是B。后自增的返回值为a原值的一个拷贝临时变量，而实际的a进行自增。你可以这样理解，后置的++为先运算在自增，因此第一次循环时，a=0，满足a<=2，参与完比较运算之后a自增变为了1，所以进入循环后第一个打印的为1，后边循环也一样。其实在参与比较的时候a就已经是1了，不过a++的返回值是a原值的一个临时变量为0。 我也选的B但是答案写的D[/quote] 首先你得注意2楼说的分号！这就排除了AB[/quote] 我明白了，谢谢您。

user: user-0
content: 引用 7 楼 liups的回复:[quote=引用 5 楼 qq_45039499 的回复:] [quote=引用 1 楼 至尊宝、的回复:]答案是B。后自增的返回值为a原值的一个拷贝临时变量，而实际的a进行自增。你可以这样理解，后置的++为先运算在自增，因此第一次循环时，a=0，满足a<=2，参与完比较运算之后a自增变为了1，所以进入循环后第一个打印的为1，后边循环也一样。其实在参与比较的时候a就已经是1了，不过a++的返回值是a原值的一个临时变量为0。 我也选的B但是答案写的D[/quote] 首先你得注意2楼说的分号！这就排除了AB[/quote] 我明白了，谢谢您。

user: user-2
content: 引用 5 楼 qq_45039499 的回复:[quote=引用 1 楼 至尊宝、的回复:]答案是B。后自增的返回值为a原值的一个拷贝临时变量，而实际的a进行自增。你可以这样理解，后置的++为先运算在自增，因此第一次循环时，a=0，满足a<=2，参与完比较运算之后a自增变为了1，所以进入循环后第一个打印的为1，后边循环也一样。其实在参与比较的时候a就已经是1了，不过a++的返回值是a原值的一个临时变量为0。 我也选的B但是答案写的D[/quote]不好意思  我疏忽了  没看到那个分号  答案应该是D  while后面跟了一个分号说明循环体里面没有任何内容，printf语句是在循环体外面的  所以只会输出一个值

user: user-3
content: 引用 5 楼 qq_45039499 的回复:[quote=引用 1 楼 至尊宝、的回复:]答案是B。后自增的返回值为a原值的一个拷贝临时变量，而实际的a进行自增。你可以这样理解，后置的++为先运算在自增，因此第一次循环时，a=0，满足a<=2，参与完比较运算之后a自增变为了1，所以进入循环后第一个打印的为1，后边循环也一样。其实在参与比较的时候a就已经是1了，不过a++的返回值是a原值的一个临时变量为0。 我也选的B但是答案写的D[/quote] 首先你得注意2楼说的分号！这就排除了AB

user: user-0
content: 引用 3 楼 自信男孩的回复:学则D，因为a++<=2，所以a++需要是3，最后a是4。后增，先把表达式的值与2比较，最后再算自增 每一次循环不都应该输出一个值吗？

user: user-0
content: 引用 1 楼 至尊宝、的回复:答案是B。后自增的返回值为a原值的一个拷贝临时变量，而实际的a进行自增。你可以这样理解，后置的++为先运算在自增，因此第一次循环时，a=0，满足a<=2，参与完比较运算之后a自增变为了1，所以进入循环后第一个打印的为1，后边循环也一样。其实在参与比较的时候a就已经是1了，不过a++的返回值是a原值的一个临时变量为0。 我也选的B但是答案写的D

user: user-2
content: 引用 2 楼 拥抱Linux 的回复:[quote=引用 1 楼 至尊宝、 的回复:] 答案是B。后自增的返回值为a原值的一个拷贝临时变量，而实际的a进行自增。你可以这样理解，后置的++为先运算在自增，因此第一次循环时，a=0，满足a<=2，参与完比较运算之后a自增变为了1，所以进入循环后第一个打印的为1，后边循环也一样。其实在参与比较的时候a就已经是1了，不过a++的返回值是a原值的一个临时变量为0。 ～ while的后面紧跟了一个分号哦～ ～[/quote]尴尬了  没注意

user: user-4
content: 学则D，因为a++<=2，所以a++需要是3，最后a是4。后增，先把表达式的值与2比较，最后再算自增
user-0 提问: 笔试题求解

回复:
user: user-1
content: char arr = "string";很明显是错误的，不能将字符串常量对字符型变量进行赋值。

user: user-1
content: 这里有个概念错误，a=1不是赋值语句，而是赋值表达式。 ！是对a=1这个表达式的值进行取反，即先将1对变量a进行赋值，a=1表达式的值为1，取反后为0，所以while循环控制条件始终不成立。

user: user-2
content: 1.赋值后对a取反 2.最后一个不是错的么

user: user-3
content: !(a=1) 是对 a=1 这个赋值语句取反, 赋值语句是恒成立的,感觉没啥意义

user: user-4
content: 1.a=1为赋值表达式，它的返回值为a的引用，所以a=1的返回值为1，！(a=1)即为假，因此循环不执行。  如果你把！(a=1)改为！(a=0)你就会发现变成了死循环，因为a=0返回值为0，！0即为真。 2.char str="string";很明显不对，如果是char* str="string";就对了

user: user-5
content: (a=1)若为真，!(a=1)就为假，这个取反是真假的反，而不是按位取反。

user: user-5
content: char arr = "string";这个还正确呢？是不是缺少一个*呢，char *arr = "string";没问题
user-0 提问: 求助

回复:
user: user-1
content: 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。

user: user-2
content: 最好把整个代码粘贴出来

user: user-3
content: 这种情况一般就是访问了非法内存  指针使用不当导致的
user-0 提问: 51单片机初学，中断消抖问题

回复:
user: user-1
content: 去抖不是这么去的……再说了在中断里调用delay(2000)，是不是疯了。

user: user-2
content: 引用 1 楼 a763629657的回复:我想知道:1.迅速按下按键，为什么延时两秒之后数码管还会加一？ 2.为什么条件设置为p3.2==1还会让数码管加一？ 3.为什么迅速按下多次还会慢慢加一？ 按键按下，可以这样理解，按下再松开，电平由低变高，你要记录的是这个过程，延时消抖在这个过程里实现。

user: user-0
content: 我想知道:1.迅速按下按键，为什么延时两秒之后数码管还会加一？ 2.为什么条件设置为p3.2==1还会让数码管加一？ 3.为什么迅速按下多次还会慢慢加一？
user-0 提问: 线性表顺序结构(C语言)

回复:
user: user-1
content: 建议直接贴代码并且提供更多的代码，比如main函数里调用该函数的代码。

user: user-2
content: 引用 1 楼 user-2 的回复:Student *stu 是个指针，没有分配空间，输入内容给stu[i]出错 没看到具体调用过程 P定义之前new 出空间让stu指向就可以了 SqlList * P=new SqlList; P->stu=new char [100];//分配100 char 的内存让stu 指向它 p->length=100; InitList_sq(P); delete P->stu; delete P; delete P->stu;

user: user-2
content: Student *stu 是个指针，没有分配空间，输入内容给stu[i]出错 没看到具体调用过程 P定义之前new 出空间让stu指向就可以了 SqlList * P=new SqlList; P->stu=new char [100];//分配100 char 的内存让stu 指向它 p->length=100; InitList_sq(P); delete stu; delete P;
user-0 提问: 类似天书了

回复:
user: user-1
content: 也没那么天书了，分解下就能看明白  #include<stdio.h> int  main() {     printf("%d\n", 'c');     printf("%d\n", 'c'*-1);     printf("%d\n", ~('c'*-1));     printf("%c\n", ~('c'*-1)); }

user: user-2
content: 这还算天书？步步高点读机的小女孩都轻松解决~~~ 给你看个接近天书的，双色球33个红球选6的APL代码如下（啥是APL请自行搜索）： x[⍋x←6?33]

user: user-3
content: 'c'是一个整数，也是'c'的ASCII码 'c'*-1就是乘以负一 ~就是对这个乘积进行按位取反 如果要彻底搞明白 你首先要把整型变量的结构从比特位级别理解清楚 包括负数的结构（这里你需要了解补码） 然后要了解~的作用 然后就OK了

user: user-4
content: 补码和位运算等搞清楚就好了
user-0 提问: 小白求教链队

回复:
user: user-1
content: 不知道对不对，反正没有语法错误了 // ConsoleApplication4.cpp : 定义控制台应用程序的入口点。 //  #include "stdafx.h" #define OK 1 #define ERROR 0 typedef char QElemType; typedef int Status; typedef struct Duilie { 	QElemType data; 	struct Duilie *next; }Duilie, *Dl; typedef struct { 	Dl front; 	Dl rear; }DL;  Status InitQueue(DL &G) {//初始化 	G.front = G.rear = new Duilie; 	G.front->next = NULL; 	return OK; } Status EnQueue(DL &G, QElemType e) {//入队 	Dl Q = new Duilie(); 	Q->data = e; 	Q->next = NULL; 	G.rear->next = Q; 	G.rear = Q; 	return OK; } Status DeQueue(DL &G, QElemType &e) {//出队 	if (G.front == G.rear) 		return ERROR; 	Dl Q; 	Q = G.front->next; 	e = Q->data; 	G.front->next = Q->next; 	if (G.rear == Q) 		G.rear = G.front; 	delete Q; 	return OK; } QElemType GetHead(DL G) {//取队头元素 	if (G.rear == G.front) 		return ERROR; 	return G.front->next->data; } Status QueueEmpty(DL G) { 	if (G.rear != G.front) 		return OK; 	else 		return ERROR; } int main() { 	return 0; }

user: user-2
content: 怀疑不是找不到，而是不找或者找不到吧

user: user-2
content: 建议提供更多代码和更多有关问题的说明。 代码写成这样，难道不自己编译一下，起码把错误去掉吧 if(G.rearG.front)         return OK;

user: user-3
content: 你现在的问题是什么，都没说清楚，编译通不过，还是调用不能达到效果
user-0 提问: 关于找不到标识符

回复:
user: user-0
content: 引用 1 楼 user-6的回复:你PE函数的定义呢？ 对，没有定义了，所以导致出错了

user: user-1
content: 既然问题解决了，那就把帖子给结了嘛！  不想给分的话，就点 不满意 不就行了？ 悬在 未解决 的版块里有什么意思呢？ 都发了这么多帖子了，还 0% 的结帖率，还是想想是不是应该厚道一点！

user: user-0
content: 嗯嗯，问题已经解决！！！

user: user-2
content: 最好把完整的代码粘贴出来，你直接制图一半，我们只能猜测你的PE是你的自定义函数

user: user-0
content: 引用 2 楼 自信男孩的回复:这种问题很难定位，因为问题都需要大家去猜的。 懂了，谢谢谢

user: user-0
content: 引用 3 楼 赵4老师的回复:VS IDE中，在不明白的符号PE上点鼠标右键，选转到定义。 懂了，谢谢谢(*°∀°)=3

user: user-0
content: 引用 5 楼 六道佩恩的回复:看样子这里的PE应该是个函数或宏函数，但这个函数没有定义或声明 懂了，谢谢谢谢！！！

user: user-3
content: 看样子这里的PE应该是个函数或宏函数，但这个函数没有定义或声明

user: user-4
content: 或转到所有引用。

user: user-4
content: VS IDE中，在不明白的符号PE上点鼠标右键，选转到定义。

user: user-5
content: 这种问题很难定位，因为问题都需要大家去猜的。

user: user-6
content: 你PE函数的定义呢？
user-0 提问: 编写一个函数

回复:
user: user-1
content: 所谓的回文串就是左右对称，根据这个思路就可以写出来了

user: user-2
content: 引用 1 楼 轻箬笠 的回复:int main() { 	char buf[] = "ABCBA"; 	size_t size = sizeof(buf); 	size_t i; 	for (i = 0; i < size / 2; i ++) { 		if (buf[i] != buf[size - 1 - i]) 			break; 	} 	if (i == size / 2) 		printf("no\n"); 	else 		printf("yes\n"); 	system("pause"); 	return 0; }  size_t size = sizeof(buf); 这行代码换成这样或许更好： size_t size = strlen(buf); 如下代码，供参考： #include <stdio.h> #include <string.h>  int main() {     char buf[] = "ABCBA";     size_t size = strlen(buf);     size_t i;     for (i = 0; i < size / 2; i ++) {         if (buf[i] != buf[size - i])             break;     }     if (i == size / 2)         printf("no\n");     else         printf("yes\n");     system("pause");     return 0; }

user: user-3
content: int main() { 	char buf[] = "ABCBA"; 	size_t size = sizeof(buf); 	size_t i; 	for (i = 0; i < size / 2; i ++) { 		if (buf[i] != buf[size - 1 - i]) 			break; 	} 	if (i == size / 2) 		printf("no\n"); 	else 		printf("yes\n"); 	system("pause"); 	return 0; }
user-0 提问: c语言错误运行不了

回复:
user: user-1
content: 引用 2 楼 男爵 的回复：[quote=引用 1 楼 jsx_SEVEN的回复:]可能是编译器的问题，把 i 的声明放在前面试试 解决了，果然是把 i放for前面先定义，难道不能在for循环里定义吗 [/quote]这个就涉及到变量的作用域了，如果是在括号内定义的，它的作用域就只是在括号里，括号外面就不支持了，所以改在外面定义就可以了

user: user-2
content: 引用 2 楼 男爵 的回复:[quote=引用 1 楼 jsx_SEVEN的回复:]可能是编译器的问题，把 i 的声明放在前面试试 解决了，果然是把 i放for前面先定义，难道不能在for循环里定义吗 [/quote] C语言不支持这样在for里定义i，C++是支持这样的操作的。

user: user-0
content: 引用 1 楼 jsx_SEVEN的回复:可能是编译器的问题，把 i 的声明放在前面试试 解决了，果然是把 i放for前面先定义，难道不能在for循环里定义吗

user: user-3
content: 可能是编译器的问题，把 i 的声明放在前面试试
user-0 提问: 为什么最后输出的成绩不是我第一个输入的成绩

回复:
user: user-1
content: 数组的下标从0开始的

user: user-2
content: #include <stdio.h> #include<string.h>  #define N 5  struct student {     int id;     float score[3];     float sum,ave;     char name[10]; } stu[N];  int main() {     int i,j;     float a=0;     for(i=0;i<N;i++)     {         printf("请输入第%d名学生的学号和姓名：\n",i+1);         //scanf("%d,%s",&stu[i].id,&stu[i].name);         scanf("%d,%s",&stu[i].id, stu[i].name);         for(j=0;j<3;j++)         {             printf("请输入%s的第%d门成绩：\n",stu[i].name,j+1);             scanf("%f", &stu[i].score[j]);             a = a+stu[i].score[j];             //stu[i].sum = a;         }         stu[i].sum = a;         stu[i].ave = stu[i].sum/3;         printf("%s的平均分为%3.2f\n",stu[i].name,stu[i].ave);         a=0;     }       //printf("第一个人的第一门成绩为%3.2f",stu[1].score[1]);     printf("第一个人的第一门成绩为%3.2f",stu[0].score[0]); } 供参考，第一个人的下表应该从0开始。其他问题详见代码。
user-0 提问: strcat_s返回值问题

回复:
user: user-1
content: 那是你的误用，不安全的代码，没报错不等于代码就是正确的，数组已经越界，不一定会报运行时错误，但肯定覆盖了别的地址上的byte，不同编译器结果也不见得一样。  第二个参数字节数理论上就是第一个参数的缓冲区长度才是安全的。  errno_t strcat_s(char *_Dst, rsize_t _SizeInBytes, const char * _Src);  还有种模板函数实现很显然 template<size_t __Size> errno_t strcat_s(char (&_Dst)[__Size], const char * _Src);

user: user-0
content: 这是MSDN上的解释

user: user-0
content: 引用 1 楼 user-3 的回复:num处应该用strlen(str1)替代吧？ 谢谢 但还是有个疑问。能看下我的回帖吗

user: user-0
content: 引用 2 楼 636f6c696e 的回复:你理解错了哦，传入一个char *，strcat_s根本不可能知道他的实际长度，只能通过第二个入参来感知。 你的例子里第二个参数传入的是num，那么strcat_s计算后发现能够满足。 num如果改成strlen(str1)就会报错 谢谢。但我有个疑问。既然strcat_s增加一个参数num来确定dest的总容量，我理解可能在strcat_s内部是这样处理的: 首先得到dest的实际长度len1 和 source的实际长度len2，根据 num 和 （len + len2）来判断是否越界，从而返回ERANGE。 但是上面的程序，我将num改成 num = sizeof(str1)，就直接报错，而不是返回ERANGE，那这个strcat_s有啥意义呢。

user: user-2
content: 你理解错了哦，传入一个char *，strcat_s根本不可能知道他的实际长度，只能通过第二个入参来感知。 你的例子里第二个参数传入的是num，那么strcat_s计算后发现能够满足。 num如果改成strlen(str1)就会报错

user: user-3
content: num处应该用strlen(str1)替代吧？
user-0 提问: 用最新版的xcode写c语言为什么提示“stdih.h” file not found？

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

user: user-2
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-3
content: 好好练练打字吧，一会是stdib一会是stdih 百度搜索stdib自动弹出stdlib的结果

user: user-4
content: ！ 头文件名应该是 <stdlib.h>，分别对应的大写字母是STDLIB.H，你少写了一个字母L的小写l。 欢迎结帖、给分！ ！

user: user-5
content: 引用 11 楼 weixin_42228722 的回复:[quote=引用 10 楼 六道佩恩 的回复：][quote=引用 6 楼 weixin_42228722 的回复:] 这个没问题了，底下又出现‘windows.h’和‘conio.h’ file not found了 你这是在windows平台吗？[/quote]macos[/quote] 额，既然不是windows平台，哪来的windows.h？怎么能用windows的API？

user: user-6
content: 引用 3 楼 赵4老师 的回复:关于自己是否适合编程的很简单的测试： 在报纸或杂志上随便找一段约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: 引用 10 楼 六道佩恩 的回复：[quote=引用 6 楼 weixin_42228722 的回复:] 这个没问题了，底下又出现‘windows.h’和‘conio.h’ file not found了 你这是在windows平台吗？[/quote]macos

user: user-5
content: 引用 6 楼 weixin_42228722 的回复:这个没问题了，底下又出现‘windows.h’和‘conio.h’ file not found了 你这是在windows平台吗？

user: user-7
content: 引用 1 楼 拥抱Linux 的回复:！ 头文件名应该是 <stdlib.h>，分别对应的大写字母是STDLIB.H，你少写了一个字母L的小写l。 欢迎结帖、给分！ ！ 虽然你的本意应该不是头文件可以大写的意思  不过这样写可能会略带误导  最好能强调一下 stdlib.h 要小写

user: user-0
content: 引用 7 楼 拥抱Linux 的回复：[quote=引用 6 楼 weixin_42228722 的回复:] 这个没问题了，底下又出现‘windows.h’和‘conio.h’ file not found了 ～ 不是打击你，只是还没搞清楚这两个头文件<windows.h>、<conio.h>适用于哪个操作系统平台，也忘记了xcode到底在哪个操作系统平台，就贸然抄程序，真的合适么？ ～ 提问的问题都回答了，麻烦先把帖子结了，把分给了吧！ ～[/quote]第一次发帖，手机端找了半天没找到在哪儿结贴……回去用电脑结

user: user-4
content: 引用 6 楼 weixin_42228722 的回复:这个没问题了，底下又出现‘windows.h’和‘conio.h’ file not found了 ～ 不是打击你，只是还没搞清楚这两个头文件<windows.h>、<conio.h>适用于哪个操作系统平台，也忘记了xcode到底在哪个操作系统平台，就贸然抄程序，真的合适么？ ～ 提问的问题都回答了，麻烦先把帖子结了，把分给了吧！ ～

user: user-0
content: 这个没问题了，底下又出现‘windows.h’和‘conio.h’ file not found了

user: user-8
content: 注意拼写，应该是stdlib.h，你少了一个l（大写是L）

user: user-0
content: 引用 1 楼 拥抱Linux 的回复：！ 头文件名应该是 <stdlib.h>，分别对应的大写字母是STDLIB.H，你少写了一个字母L的小写l。 欢迎结帖、给分！ ！傻逼了卧槽
user-0 提问: C语言

回复:
user: user-1
content: 我是在linux下是可以的，有可能是环境不同，你可以从环境入手看看，尤其像结束符判断这些。

user: user-2
content: void upstr(char *pstr) {     if (islower(*pstr))         *pstr -= 32;     pstr++;     while (*pstr) {         if (islower(*pstr) && *(pstr-1) == ' ')             *pstr -= 32;         pstr++;     } } 供参考！
user-0 提问: VS2019是把\0字符串结尾显示成？的吗？

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

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

user: user-0
content: 啊  太谢谢了  果然是我的问题  谢谢谢谢 我找了半天问题在哪 没想到在这个问题上面

user: user-2
content: 不，是你的\0位置有问题  #include<stdio.h>  void main(void) { 	char a[10];//字符数组 	printf("请输入你的昵称"); 	char b; 	int c = 0;  	b = getchar(); 	while (b != '\n') 	{ 		if (c != 9) 		{ 			a[c] = b; 			b = getchar(); 			c++; 		} 		else 		{ 			printf("昵称太长了\n");  		} 	} 	a[c] = '\0';		//此处c不用加1，因为经过上面的c++，c已经是最后字符的下一个位置 	printf("%s", a); }
user-0 提问: C语言萌新学习中遇到的第一个问题

回复:
user: user-1
content: 引用 9 楼 拥抱Linux 的回复:[quote=引用 8 楼 ooolinux 的回复:] 思路不错，不过如果要打印10行的三角呢？ 10行其实也还是小case，写10个case嘛！  嘿嘿，不瞒您说，上面的代码虽说是凑热闹加半开玩笑，不过初学C的时候，有一个统计平年、闰年中的日期是一年的第几天的小题目，用没有break的switch-case代码块，有12个case，写起来根本停不下来，而且读起来还又直观又简洁。上面凑热闹的思路就是因为想起了这个小题目。 嘛，条条大路通罗马，想了解一下就了解一下，不想了解的话就当个乐吧！：） ～[/quote]  ok~

user: user-2
content: 引用 8 楼 ooolinux 的回复:思路不错，不过如果要打印10行的三角呢？ 10行其实也还是小case，写10个case嘛！  嘿嘿，不瞒您说，上面的代码虽说是凑热闹加半开玩笑，不过初学C的时候，有一个统计平年、闰年中的日期是一年的第几天的小题目，用没有break的switch-case代码块，有12个case，写起来根本停不下来，而且读起来还又直观又简洁。上面凑热闹的思路就是因为想起了这个小题目。 嘛，条条大路通罗马，想了解一下就了解一下，不想了解的话就当个乐吧！：） ～

user: user-1
content: 引用 7 楼 拥抱Linux 的回复:～ 凑个热闹。  #include <stdio.h>  void prt123(void) { 	printf("123, "); }  int main(int argc, char const *argv[]) { 	for (int i = 3; i > 0; i--) { 		switch (i) { 		case 3: 			prt123(); 		case 2: 			prt123(); 		case 1: 			prt123(); 		default: 			printf("\n"); 			break; 		} 	} 	return 0; }   ：-）  思路不错，不过如果要打印10行的三角呢？

user: user-3
content: 先学会怎么提问吧，请仔细描述到底哪里遇到问题了 不会换行？不会输出？还是其他什么？

user: user-4
content: 需要换行的时候加换行符就可以啦

user: user-5
content: void func(void) {     printf("123, "); }   供参考～

user: user-2
content: ～ 凑个热闹。  #include <stdio.h>  void prt123(void) { 	printf("123, "); }  int main(int argc, char const *argv[]) { 	for (int i = 3; i > 0; i--) { 		switch (i) { 		case 3: 			prt123(); 		case 2: 			prt123(); 		case 1: 			prt123(); 		default: 			printf("\n"); 			break; 		} 	} 	return 0; }   ：-）

user: user-1
content: 双重循环。字数字数。

user: user-6
content: #include "stdio.h" void Print123( void ) { 	printf("123, "); } int main( void ) { 	Print123(); 	Print123(); 	Print123(); 	printf("\n"); 	Print123(); 	Print123(); 	printf("\n"); 	Print123(); 	return 0; }

user: user-0
content: 有错别字 需要打成语言了  第一次发帖手抖
user-0 提问: 搜了许久，实在不知道 ！什么意思

回复:
user: user-0
content: 理解了谢谢你们的帮助

user: user-1
content: 先不管【1】【2】填什么，程序走到循环里，e+new的时候，不知道e是多少，推断【1】应该是给e初始化，【2】肯定是循环条件 试试能用不  #include <stdio.h>  int main() { 	int i; 	double e, new; 	e = 1.0; 	new = 1.0; 	for (i = 1; new >= 1e-6; i++) 	{ 		new /= (double)i; 		e += new; 	} 	printf("%f\n", e); }

user: user-2
content: 数学阶乘 1！=1 2！=2*1 3！=3*2*1 4！=4*3*2*1 n！=n*（n-1）*（n-2）*...*2*1
user-0 提问: Arduino 编程（C语言）字符串（char[]和String）的问题

回复:
user: user-1
content: 看接收的HEX数据，看看是否包含0D 0A这类的回车换行符， 是否都在20～7F之间？ 换一个串口软件接收看看，可能是串口软件按接收到的数据分包了
user-0 提问: 看不懂了

回复:
user: user-1
content: 切记！其实没有所谓的“多重指针”，永远只有一维指针，无论多少个*(星号)都好，它都只是一个指向xx的指针，跳出多重指针的局限，回归只有一维指针的基本思想。另外楼上全部正解。

user: user-2
content: j指向h，*j=h，h指向hello，即为hello的地址

user: user-3
content: 怎么看不懂了，不就是指正的含义吗

user: user-4
content: 这里的j是二级指针，它保存的是一级指针的地址，而h是一级指针，保存的是数据hello的地址；*是取一个指针指向单元的内容，j保存的是h的地址，*j就是取j所指向地址单元的值，也就是取h的值，h的值就是hello的地址咯！
user-0 提问: 多个等号，对结论有什么影响

回复:
user: user-1
content: for语句后直接是分号，代表该语句是空语句，不执行任何操作。紧接着执行后面的输出语句，由于i在for循环中进行了4次加1，所以最终i的值为4

user: user-2
content: for(i=0;i<=3;i++);  //运行的流程是i=0,1,2,3   当为3时，i与for中的3做比较，符合“i<=3”的条件，所以接着往下走。下一步走“i++”，此时i为4，不符合“i<=3”，所以跳出循环。此时i为4

user: user-2
content: 这是一个完整的for循环： for(i=0;i<=3;i++)  //该循环下面只有一条语句，可以不加{}     printf("hello");  for(i=0;i<=3;i++)  //该循环有两条语句，必须加{}，表示两条语句都在循环里面 {     printf("hello");     printf("world"); }  for(i=0;i<=3;i++)  //该循环只有一条语句，下面那个world不在循环体里面     printf("hello"); printf("world");

user: user-3
content: 不管是判断还是循环，你可以理解为执行的代码只有一行，即使用for、while，循环体都只有一行，你之所以能让循环体有多行代码，是因为你用大括号把它括起来了，使它组成了一条复合语句，所以还是一条语句。 for(i=0;i<=3;i++); 等价于 for(i=0;i<=3;i++)      ; 即它的循环体是一条空语句 所以循环结束后才输出i 所以结果是4
user-0 提问: fscanf_s文件读取提示fp可能为零怎么避免

回复:
user: user-1
content: 原来是这么判空 学习了

user: user-2
content: 都在改编译告警了，连判空都不会么。。。

user: user-3
content: if(fp){  fscanf_s(...); }

user: user-0
content: 引用 1 楼 user-4的回复:if (fp)    .... fscanf_s(if(fp),)？？？？？？

user: user-0
content: 引用 3 楼 轻箬笠的回复:if(fp){  fscanf_s(...); } 谢谢大佬，谢谢大佬！！！

user: user-4
content: if (fp)    ....
user-0 提问: 这个哪里有问题吗。。

回复:
user: user-1
content: int cmp_score(void *a,void *b) {     DAT *m = (DAT *)a;     DAT *n = (DAT *)b;      if (m->average > n->average && fabs(m->average - n->average)>1e-6)         return 1;     else if (m->average < n->average && fabs(m->average - n->average) > 1e-6)         return -1;     else         return 0;      //return ((DAT*)b)->average-((DAT*)a)->average; } 问题出在这个函数，供参考！

user: user-2
content: int cmp_score(void *a,void *b)  {      return ((DAT*)b)->average-((DAT*)a)->average;  }  这个会损失精度， 改为  int cmp_score(const void *a,const void *b)  { 	 if (((DAT*)a)->average > ((DAT*)b)->average) { 		return -1; 	} 	else if (((DAT*)a)->average < ((DAT*)b)->average) { 		return 1; 	} 	else { 		return 0; 	}  }
user-0 提问: C语言小白

回复:
user: user-1
content: 内层循环退出之后才开始下一次外层循环，除非break跳出

user: user-0
content: 引用 1 楼 user-2的回复:1. 外层  i =  1   2   3   4   5 内层  i = 1 6-i=5  j<=5 j = 1、2、3、4、5          i = 2 6-i=4  j<=4 j = 1、2、3、4          i = 3 6-i=3  j<=3 j = 1、2、3          i = 4 6-i=2  j<=2 j = 1、2          i = 5 6-i=1  j<=1   j = 1  2. 外层  i =  1   2   3   4   5 内层  i = 1 6-i=5  j>=5 j = 5          i = 2 6-i=4  j>=4 j = 5、4          i = 3 6-i=3  j>=3 j = 5、4、3          i = 4 6-i=2  j>=2 j = 5、4、3、2          i = 5 6-i=1  j>=1  j = 5、4、3、2、1 谢谢啦，似乎懂了他这个出来的个数就代表每行的*号个数吧

user: user-0
content: 谢谢啦，似乎懂了他这个出来的个数就代表每行的*号个数吧

user: user-2
content: 1. 外层  i =  1   2   3   4   5 内层  i = 1 6-i=5  j<=5 j = 1、2、3、4、5          i = 2 6-i=4  j<=4 j = 1、2、3、4          i = 3 6-i=3  j<=3 j = 1、2、3          i = 4 6-i=2  j<=2 j = 1、2          i = 5 6-i=1  j<=1   j = 1  2. 外层  i =  1   2   3   4   5 内层  i = 1 6-i=5  j>=5 j = 5          i = 2 6-i=4  j>=4 j = 5、4          i = 3 6-i=3  j>=3 j = 5、4、3          i = 4 6-i=2  j>=2 j = 5、4、3、2          i = 5 6-i=1  j>=1  j = 5、4、3、2、1
user-0 提问: 萌新求助！萌新求助！萌新求助！

回复:
user: user-1
content: 可以先读入一个字符数组 遍历判断，当判断到一个<nl>的时候，记录下位置，然后判断到</nl>的时候再次记录下位置，然后你读取时只要判断再在这两个位置之间就行了。 要方便点的话，可以用正则表达式相关的函数，比如regcomp、regexec、regfree、regerror 我说的是把上面这段文字用C语言读取的办法，不知道是不是你要的

user: user-0
content: 请问，具体可以怎么做呢！

user: user-2
content: 使用TinyXML库解析
user-0 提问: 数据结构与算法基础问题

回复:
user: user-1
content: 堆调用者来说 对传入指针不进行修改就不需要& 需要修改就需要&

user: user-2
content: 你得弄清楚加&的作用是什么，加了&说明是引用传递，你函数里修改形参会“间接“修改实参，而不加，你形参无论如何改变，实参都没有影响
user-0 提问: 在线等！大佬，求大佬帮忙改一下系统。救救孩子吧，多次出现函数定义非法

回复:
user: user-1
content: 你这个代码真的看的我脑壳疼，自己写的？还是抄的？如果是抄的，能不能抄个没错误的，改半天改好排版，错误一大堆
user-0 提问: 关于errno=97的问题

回复:
user: user-0
content: ret = sendto(sock, msg, sizeof(msg), 0, (struct sockaddr*)&client_addr, len);  传的就是值。

user: user-1
content: 检查下传入参数是否匹配类型吧，比如最后一个参数应传入int类型，非int *类型
user-0 提问: 求一段C代码

回复:
user: user-0
content: 引用 1 楼 JhonDao的回复:可以变通一下，通过c语言代码来调用批处理命令。  #include <stdio.h> #include <windows.h>  int main() {     system("type 1.txt | clip");  //这是批处理命令      return 0; } 好吧，是电脑问题，我在虚拟机上试了一下可以有

user: user-0
content: 引用 1 楼 JhonDao的回复:可以变通一下，通过c语言代码来调用批处理命令。  #include <stdio.h> #include <windows.h>  int main() {     system("type 1.txt | clip");  //这是批处理命令      return 0; } 我添加了windows.h的头文件，但是他还是说clip不是命令。 问题已经解决了 谢谢

user: user-0
content: 引用 2 楼 zgl7903的回复:https://blog.csdn.net/ycc892009/article/details/6521565 https://docs.microsoft.com/zh-cn/windows/desktop/dataxchg/clipboard-operations 对啊，就是这些我看的云里雾里的 不过现在能用了，虽然不太懂 谢谢

user: user-1
content: #include "stdio.h" #include "windows.h" void FileToClip( const char* FileName )  { 	char str[500]; 	sprintf( str, "type %450s | clip", FileName ); 	system( str ); } int main( void ) { 	FileToClip("1.txt");	//你要粘贴进剪贴板的文件  	return 0; }

user: user-2
content: https://blog.csdn.net/ycc892009/article/details/6521565 https://docs.microsoft.com/zh-cn/windows/desktop/dataxchg/clipboard-operations

user: user-3
content: 可以变通一下，通过c语言代码来调用批处理命令。  #include <stdio.h> #include <windows.h>  int main() {     system("type 1.txt | clip");  //这是批处理命令      return 0; }

user: user-4
content: FILE *fp; 	fopen_s(&fp, "D:\\1.txt", "rb+"); 	fseek(fp, 0L, SEEK_END); 	long len = ftell(fp); 	HGLOBAL clipData = GlobalAlloc(GMEM_FIXED, len + 1); 	fseek(fp, 0L, SEEK_SET); 	fread(clipData, 1, len, fp); 	fclose(fp); 	((char*)clipData)[len] = 0; 	OpenClipboard(NULL); 	EmptyClipboard(); 	SetClipboardData(CF_TEXT, clipData); 	CloseClipboard();
user-0 提问: 输入字符串，把小写换成大写字母，去掉*，我哪里有问题啊，不懂

回复:
user: user-0
content: 引用 4 楼 Italink的回复: 谢谢你了嗷，我已经懂了

user: user-0
content: 引用 4 楼 Italink的回复: 明白了，是我上一个程序程序一直在运行

user: user-0
content: 是我编译器的问题吗，为什么全是数字啊

user: user-1

user: user-0
content: 引用 1 楼 Italink的回复:没懂你的代码什么意思，按你的要求改了一下，你看这样对吗？  #include<stdio.h> char* del(char* s); int  main() { 	char a[80]; 	gets(a);// 输入待处理的字符串;   	del(a); 	puts(a); //输出处理后的字符串; 	return 0; } char* del(char* s) { 	int i; 	int j; 	for (i = 0, j = 0; *(s + i) != '\0'; i++) 	{ 		if ('a' <= *(s + i) && 'z' >= *(s + i)) {	//小写->大写 ：-32 			*(s + j) = *(s + i) - 32; 			j++; 		} 		if (*(s + i) == '*')	//去除* 			continue; 	} 	*(s + j) = '\0'; 	return s; }  额，我试了一下，输出的全是数字

user: user-2
content: #include<stdio.h> char*  del (char *s); int  main()  {    char a[80];   gets(a);// 输入待处理的字符串;      del(a);   puts(a); //输出处理后的字符串;    return 0;   } char*  del (char *s) { int i; int j; for(i=0,j=0;*(s+i)!='\0';i++) { if('a'<=*(s+i)&&'z'>=*(s+i)) { *(s+j)=*(s+i)+'A' - 'a'; j++; continue; } if(*(s+i)=='*') continue; else { *(s+j)=*(s+i); j++; } //if(*(s+j)) //*(s+i)=*(s+j); } *(s+j)='\0'; }

user: user-1
content: 没懂你的代码什么意思，按你的要求改了一下，你看这样对吗？  #include<stdio.h> char* del(char* s); int  main() { 	char a[80]; 	gets(a);// 输入待处理的字符串;   	del(a); 	puts(a); //输出处理后的字符串; 	return 0; } char* del(char* s) { 	int i; 	int j; 	for (i = 0, j = 0; *(s + i) != '\0'; i++) 	{ 		if ('a' <= *(s + i) && 'z' >= *(s + i)) {	//小写->大写 ：-32 			*(s + j) = *(s + i) - 32; 			j++; 		} 		if (*(s + i) == '*')	//去除* 			continue; 	} 	*(s + j) = '\0'; 	return s; }
user-0 提问: c++新人求助！关于结构体类型的set容器的删除元素操作

回复:
user: user-1
content: 上面写错了，你的第一个元素应该是{num=1,a1="j"}，另外在循环中最后不要调用earse

user: user-1
content: set.erase()提供了4种重载，分别可以通过key，或者迭代器，或者迭代器范围来删除元素。 按你所说，是想通过key来删除元素，而你的key为结构体zhb1，所以删除的时候参数需要给一个结构体。 比如你set的第一个元素为{num=0,a1="j"}，删除它就调用s.earse({1,"j"});这里参数其实是创建了一个临时结构体 另外，删除的时候利用了重载的符号<,而你的<只比较了num，故调用s.earse({1}),也能删除第一个元素。

user: user-1
content: 引用 3 楼 ＇ 你的胰脏好吃吗？ 的回复:如果我同时也想要通过后面的字符串（也就是a1）来删除set内的元素 该怎么办了 修改重载运算符<,只比较a1，但这样就会打乱你set容器的排序方式，如果不想打乱，你可以在原有的earse函数上再加上一层，遍历set，找到值为a1结构体的迭代器。通过迭代器来删除

user: user-0
content: 如果我同时也想要通过后面的字符串（也就是a1）来删除set内的元素 该怎么办了
user-0 提问: gw大神，能不能抽空替我看下这个求圆周率的c程序。为啥能编译跑不起来

回复:
user: user-1
content: 我跑了一下你的代码，基本上没有问题呀，不过要输入0.0000005才能得到正确答案，这个题目好像有一丢丢问题

user: user-0
content: 输入了啊 ，哪位大牛能带入下看看啊

user: user-2
content: 对了，sum 最后还应该乘以一个2。 那个公式算的是  x/2 的值。

user: user-2
content: 没看出啥问题。 输入  0.00005 了吗？

user: user-0
user-0 提问: C语言小白   想请教一下这个代码为什么插入节点后没有输出！谢谢了

回复:
user: user-1
content: 可能return false了。另外，建议贴出代码，而不是贴图片

user: user-2
content: 数据结构对单链表进行数据排序 http://bbs.csdn.net/topics/392201633