Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: C++ VS2019上的一些问题，请大神帮帮忙！！

回复:
user: user-1
content: if((fp=fopen(file,"rb"))==NULL) 打开模式改成“rt”  fread(&stu[i],sizeof(struct student),1,fp); 改成 fscanf(fp, "%d%s%d", &stu[i].nub, stu[i].name, &stu[i].math);
user-0 提问: 复习时，有点搞不懂，请教

回复:
user: user-1
content: 引用 6 楼 鲁宇科 的回复:[quote=引用 3 楼 寻开心的回复:]int a[k];  k是变量的模式在dev，Xcode里面可以。 vs里面不行。和编译器相关的 谢谢，，，，，，，，，，  [/quote] 准确地说是C的新标准才可以

user: user-0
content: 引用 3 楼 寻开心的回复:int a[k];  k是变量的模式在dev，Xcode里面可以。 vs里面不行。和编译器相关的 谢谢，，，，，，，，，，

user: user-0
content: 引用 2 楼 柒贰伍玖的回复:C不支持这样定义 你可以用宏来实现你的目的 #define ARR_LEN 5  int k = ARR_LEN ; int a[ARR_LEN ]; 谢谢，，，，，，，，，，，

user: user-0
content: 引用 1 楼 liups的回复:只有新版本的C才能这样定义！ 谢谢，，，，，，，，，，

user: user-2
content: int a[k];  k是变量的模式在dev，Xcode里面可以。 vs里面不行。和编译器相关的

user: user-3
content: C不支持这样定义 你可以用宏来实现你的目的 #define ARR_LEN 5  int k = ARR_LEN ; int a[ARR_LEN ];

user: user-1
content: 只有新版本的C才能这样定义！
user-0 提问: 如何判断“x--”是否已减一呢（请大家赐教）

回复:
user: user-0
content: 引用 7 楼 柒贰伍玖的回复:[quote=引用 5 楼 ziziwye 的回复:] 谢谢，那请问后面就算没有if，直接输出x，值是4吗  没有if 直接输出x 也是4，因为在执行完 x-- 这行x就已经变成 4 了[/quote] 好的，知道了，谢谢你

user: user-1
content: 引用 8 楼 apkipa1 的回复:[quote=引用 4 楼 柒贰伍玖 的回复:] i--这个跟编译器有关，在C语言中属于未定义行为，有的编译器先依次执行，有的是在表达式是最后执行，没必要纠结这个 你对于 i-- 与未定义行为的理解有误，我这里引用 C 语言标准的一段对 UB 的规定: A side effect on a scalar object is unsequenced relative to either a different side effect on the same scalar object or a value computation using the value of the same scalar object (6.5). 也就是说，只有 i * i++ 或者 i = i++ 这类表达式才会导致未定义行为。[/quote] 谢谢

user: user-2
content: 引用 4 楼 柒贰伍玖 的回复:i--这个跟编译器有关，在C语言中属于未定义行为，有的编译器先依次执行，有的是在表达式是最后执行，没必要纠结这个 你对于 i-- 与未定义行为的理解有误，我这里引用 C 语言标准的一段对 UB 的规定: A side effect on a scalar object is unsequenced relative to either a different side effect on the same scalar object or a value computation using the value of the same scalar object (6.5). 也就是说，只有 i * i++ 或者 i = i++ 这类表达式才会导致未定义行为。

user: user-1
content: 引用 5 楼 ziziwye 的回复:谢谢，那请问后面就算没有if，直接输出x，值是4吗  没有if 直接输出x 也是4，因为在执行完 x-- 这行x就已经变成 4 了

user: user-0
content: 我会好好理解的，谢谢你哦

user: user-0
content: 谢谢，那请问后面就算没有if，直接输出x，值是4吗

user: user-1
content: i--这个跟编译器有关，在C语言中属于未定义行为，有的编译器先依次执行，有的是在表达式是最后执行，没必要纠结这个

user: user-3
content: int i = 5; 	int s = 0; 	s += i--; 此时，i的值是4，s的值是5. 	int i = 5; 	int s = 0; 	i--; 	s += i; 此时，i和s的值都是4.

user: user-4
content: x--;是一个表达式，只不过计算这个表达式的时候，x--的值为x变化前的值，所以后面的s+=x肯定x是4啊 如果表达式是s+=(x--)，这样的话就是一个表达式，这其中（x--）的值为5，因此输出为5，这个是按表达式来计算的

user: user-1
content: 结果是：4 定义的时候初始化：x = 5，s = 0； 第二行 x--，执行完这句 x = 4； 第三局判断 x 是大于0的，进入条件语句 s = s+x 即 s = 0 +4，s = 4； 最后打印s  结果为：4
user-0 提问: 运行程序时地址写入发生冲突，为什么

回复:
user: user-1
content: 引用 4 楼 dajkhsdawe 的回复:[quote=引用 2 楼 自信男孩 的回复:] #include<stdio.h> //#include<stdlib.h> #include<conio.h> //#include<windows.h> #include<math.h> void geng(int a, int b, int c,int *p,int *q) { double m; m = sqrt(double(b*b-4*a*c)); if (m>=0) { *p = (-b + m) / 2 * a; *q = (-b - m) / 2 * a; } } int main(void) { int x1; int x2; int  a, b, c; printf("请输入一个值到a中："); scanf_s("%d", &a); printf("请输入一个值到b中："); scanf_s("%d", &b); printf("请输入一个值到c中："); scanf_s("%d", &c); geng(a, b, c, &x1, &x2); printf("方程的根为：%d,%d", x1, x2); _getch(); }  供参考～  建议把x1, x2定义为double类型  嗯嗯  这个我知道该  就是不知道变量改成指针变量为什么会错[/quote] 你定义的指针x1, x2指向NULL，这个地址是不能读写的，所以会出现段错误，用malloc申请的空间是在堆上，堆上的空间是可以读写的～

user: user-0
content: 引用 8 楼 真相重于对错 的回复:[quote=引用 7 楼 dajkhsdawe 的回复:] [quote=引用 6 楼 真相重于对错 的回复:] int *x1=（int*）malloc(sizeof(int)); 一定要用malloc分配空间吗    不太理解这之间的区别  [/quote] 两种方式，一种是malloc 一种是把这个指针指向一个现有的变量的地址，就好比上边说的参数用&取址，否则这个指针指向的是空。对他进行访问，必然出错。[/quote] 原来如此  感谢感谢

user: user-2
content: 引用 7 楼 dajkhsdawe 的回复:[quote=引用 6 楼 真相重于对错 的回复:] int *x1=（int*）malloc(sizeof(int)); 一定要用malloc分配空间吗    不太理解这之间的区别  [/quote] 两种方式，一种是malloc 一种是把这个指针指向一个现有的变量的地址，就好比上边说的参数用&取址，否则这个指针指向的是空。对他进行访问，必然出错。

user: user-0
content: 引用 6 楼 真相重于对错 的回复:int *x1=（int*）malloc(sizeof(int)); 一定要用malloc分配空间吗    不太理解这之间的区别

user: user-2
content: int *x1=（int*）malloc(sizeof(int));

user: user-2
content: int main(void) { int *x1=（int*）malloc(szieof(int)); int *x2=(int*)malloc(sizeof(int)); int  a, b, c; printf("请输入一个值到a中："); scanf_s("%d", &a); printf("请输入一个值到b中："); scanf_s("%d", &b); printf("请输入一个值到c中："); scanf_s("%d", &c); geng(a, b, c, x1, x2); printf("方程的根为：%d,%d", *x1, *x2); _getch(); free(x1); free(x2); } 非要用指针的话

user: user-0
content: 引用 2 楼 自信男孩 的回复:#include<stdio.h> //#include<stdlib.h> #include<conio.h> //#include<windows.h> #include<math.h> void geng(int a, int b, int c,int *p,int *q) { double m; m = sqrt(double(b*b-4*a*c)); if (m>=0) { *p = (-b + m) / 2 * a; *q = (-b - m) / 2 * a; } } int main(void) { int x1; int x2; int  a, b, c; printf("请输入一个值到a中："); scanf_s("%d", &a); printf("请输入一个值到b中："); scanf_s("%d", &b); printf("请输入一个值到c中："); scanf_s("%d", &c); geng(a, b, c, &x1, &x2); printf("方程的根为：%d,%d", x1, x2); _getch(); }  供参考～  建议把x1, x2定义为double类型  嗯嗯  这个我知道该  就是不知道变量改成指针变量为什么会错

user: user-0
content: 引用 1 楼 真相重于对错 的回复:指针没有初始化  x1，x2没初始化吗  不太懂  能说详细一点吗

user: user-1
content: #include<stdio.h> //#include<stdlib.h> #include<conio.h> //#include<windows.h> #include<math.h> void geng(int a, int b, int c,int *p,int *q) { double m; m = sqrt(double(b*b-4*a*c)); if (m>=0) { *p = (-b + m) / 2 * a; *q = (-b - m) / 2 * a; } } int main(void) { int x1; int x2; int  a, b, c; printf("请输入一个值到a中："); scanf_s("%d", &a); printf("请输入一个值到b中："); scanf_s("%d", &b); printf("请输入一个值到c中："); scanf_s("%d", &c); geng(a, b, c, &x1, &x2); printf("方程的根为：%d,%d", x1, x2); _getch(); }  供参考～  建议把x1, x2定义为double类型

user: user-2
content: 指针没有初始化
user-0 提问: 头文件重复包含

回复:
user: user-0
content: 引用 1 楼 gouyanfen 的回复:#pragma once[/quote]  没有用啊

user: user-1
content: #pragma once  引用 楼主 wow334 的回复:b.h中需要用到a.h中的结构体，于是#include "a.h"   现在d.c中 就不能同时  #include "a.h"  #include "b.h"  这样就重复包含了a.h，这种重复包含要怎么解决？我只用#include "b.h"来解决了，  有没有别的办法可以同时包含上面两个头文件，让系统自动排除重复部分而正常通过编译？

user: user-2
content: a.h 头文件里面， 作如下的定义  #ifndef __A_H__ #define __A_H__ 你的函数，结构什么的定义在这里 #endif  b.h里面 #ifdef __B_H__ #define __A_H__ 你的函数定义等 #endif  这样就可以了， 相互#inlcude就不会影响了  按照道理#pragma once  是等效的，都是表示只能被包含一次

user: user-3
content: 在 .h 文件中增加宏  #ifndefine   xxxxxxxxx #define xxxxxxxxx …… 你的头文件代码 …… #endif

user: user-4
content: 难道你的C++编译器不支持这个语法？ 你可以用VC集成环境，新建两个类，会自动生成防止重复包含的代码。  引用 2 楼 wow334 的回复:引用 1 楼 gouyanfen 的回复:#pragma once  没有用啊[/quote]
user-0 提问: 能帮我解决一下吗？怎么做啊

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 。。。这个不就是赋值输出么。。。

user: user-3
content: K那里要加个赋值符号=

user: user-4
content: 就直接赋值输出就好了啊，这个好像没有隐含的点，只是让你看一下现象
user-0 提问: c语言考试

回复:
user: user-1
content: #include<stdio.h> int main(void) { 	char a; 	scanf("%c",&a); 	if((a >= 'a'&&a <= 'z')||(a >= 'A'&&a <= 'Z')) 	{ 		printf("是字母"); 	} 	else 	{ 		printf("不是字母"); 	} 	return 0; }

user: user-2
content: 自己写，  出错了贴代码上来提问
user-0 提问: 大佬们帮忙解答个小问题吧

回复:
user: user-1
content: 这个是选择题  不能真的去一步一步的算x和y的值  二楼的排除法才是正解

user: user-2
content: y = ((...) , x++) 即 y 伪= (x++) , 即此时 y=x后，x=x+1; for(; y++ <8;) 即 先比后加，即break后，y = y+1; 所以 x ==y; 所以选B

user: user-3
content: 选b， #include<stdio.h> int main(void) { 	int x = 1,y = 1; 	for(;y++<8;) 	y = ((x+=y,x++),x++); 	printf("x = %d,y = %d",x,y); 	return 0;  }
user-0 提问: 我的天哪，我的选择排序法哪里出现问题了啊。大佬求救

回复:
user: user-0
content: 感谢昂，立马明白了，结帖了

user: user-1
content: 不是内存溢出的问题 是你的有效数字范围的问题 你输入的n比如是10， 有效数字就是0到9，这样10个 可你的 j的范围，会让你访问 a【10】，这里不是有效数据了。 这就不是你前面的a【50】定义所能保护的了

user: user-0
content: 引用 1 楼 寻开心的回复:你的j的范围怎么是到n呢， a【n】 溢出的   随便找 本书，看看 冒泡排序的两重循环各自的循环范围是怎么写的 我前面不是已经有一个限定要求输入的数有多少了个吗？并且将这个具体给到了n。所以不就可以这样了吗？我们老师给的版本是10个数，我是想弄多少个数都行的那种

user: user-1
content: 你的j的范围怎么是到n呢， a【n】 溢出的   随便找 本书，看看 冒泡排序的两重循环各自的循环范围是怎么写的
user-0 提问: 这是为什么呀

回复:
user: user-1
content: 可以兄弟

user: user-0
content: 引用 3 楼 寻开心的回复:[quote=引用 2 楼 sdfszrsvs 的回复:] [quote=引用 1 楼 @矛盾综合体的回复:]变成double 谢谢你啊，改好了，谢谢哦，要十个字才能发[/quote] 你要谢，就给为你提供了帮助的人技术分儿 总是带着结帖率为0%的标记提问，会越来越少的人愿意帮助你[/quote] 不好意思啊我才看到，我刚用这个软件的我这就看看

user: user-1
content: 我就没毛病。

user: user-2
content: 引用 2 楼 sdfszrsvs 的回复:[quote=引用 1 楼 @矛盾综合体的回复:]变成double 谢谢你啊，改好了，谢谢哦，要十个字才能发[/quote] 你要谢，就给为你提供了帮助的人技术分儿 总是带着结帖率为0%的标记提问，会越来越少的人愿意帮助你

user: user-0
content: 引用 1 楼 @矛盾综合体的回复:变成double 谢谢你啊，改好了，谢谢哦，要十个字才能发

user: user-3
content: 变成double
user-0 提问: C/C++图形库实现鼠标悬浮到按钮上面播放一次声音

回复:
user: user-1
content: 你用个变量 记录上一次鼠标的位置，然后和这次对比；如果上次在按钮外，这次在按钮里面，就播放，其他情况不播放

user: user-0
content: 感谢提供了思路，用了你们的方法这个问题我也解决了，非常感谢！

user: user-0
content: 引用 3 楼 gz_qmc 的回复:针对该按钮设一个全局变量BOOL  in_box=FALSE;  if(鼠标在框内) {       if( ! in_box)       {              in_box=TRUE;              StartShow();  //显示边框              PlanSond();   //播放声音       } } else {     in_box=FALSE; } 因为我的这个程序是在while(1)里面的，我想的是不断地接收鼠标消息，所以这个判断功能放在里面还是存在原来的问题  你看，我写的是像这样的，我太难了

user: user-2
content: 针对该按钮设一个全局变量BOOL  in_box=FALSE;  if(鼠标在框内) {       if( ! in_box)       {              in_box=TRUE;              StartShow();  //显示边框              PlanSond();   //播放声音       } } else {     in_box=FALSE; }

user: user-3
content: 给你出个馊主意： 做一个static 时间变量放这里， 进来这个函数后，获取一下时间，然后比较一下超时没有，没超过（比如1s），就直接返回，超过了就再响一次。 效果就是，鼠标放到这个区域，来回移动的时候，可以一秒钟一次的响个没完，

user: user-4
content: 因为你这样写的话，只要在这个按钮区域移动就会触发这个事件，你可以借助一个bool标记，初始化为false，当进入这个区域移动时，如果标记为false，则播放声音且置为true，当离开这个区域时，再将标记置为false
user-0 提问: 三个整数排序

回复:
user: user-1
content: #include<stdio.h> int main() { 	int a,b,c; 	printf("\n enter 3 number. \n"); 	scanf("%d%d%d",&a,&b,&c); 	if(a<b) 	{ 		a^=b; 		b^=a; 		a^=b; 	} 	if(a<c) 	{ 		a^=c; 		c^=a; 		a^=c; 	} 	if(b<c) 	{ 		b^=c; 		c^=b; 		b^=c; 	} 	printf("%d %d %d\n",a,b,c); 	return 0; }

user: user-2
content: #include<stdio.h> int main() { 	int a,b,c; 	int temp; 	scanf("%d %d %d",&a,&b,&c); 	if(a>b){  		temp=a; 		a=b; 		b=temp; 	} 	temp=0; 	if(b>c){ 		temp=b; 		b=c; 		c=temp; 	} 	temp=0; 	if(a>c){ 		temp=a; 		a=c; 		c=temp; 	} 	printf("%d %d %d\n",a,b,c); 	return 0;  }

user: user-3
content: 来个通俗易懂的 #include<stdio.h> #include<math.h> int main(void) { 	int a,b,c; 	scanf("%d%d%d",&a,&b,&c); 	if(a < b) 	{ 		a = b; 	} 	if(a < c) 	{ 		a = c; 	} 	printf("%d",a); 	return 0; }

user: user-4
content: 你的第三个if内语句加“”号，会导致if判断时将其看成一个字符串，如果前面都没有执行，那么就肯定会执行第三个if

user: user-5
content: int a, b, c; 	int max, min; 	scanf("%d %d %d", &a, &b, &c); 	max = a > b ? a : b; 	min = a + b - max; 	max = max > c ? max : c; 	min = min < c ? min : c; 	printf("%d,%d,%d", min, a + b + c - min - max, max); 	return 0;
user-0 提问: 请问C语言循环语句

回复:
user: user-1
content: 打错字，刚试验了下

user: user-1
content: 引用 2 楼 weixin_46138835 的回复:[quote=引用 1 楼 datoulaile123的回复:]k的值如果大于1000了，那就是死循环了，可如果一开始没大于1000，那循环一次就跳出了 啊我忘记写了 k的初值是1000[/quote] 刚实现了确实不是死循环，int是有符号的整形，有取值范围-2^32～2^32-1，大于了2^32-1就会变成负数了，然后跳出了这个循环

user: user-2
content: k无符号类型 到最大值再加1 会变成0  结束循环

user: user-0
content: 引用 1 楼 datoulaile123的回复:k的值如果大于1000了，那就是死循环了，可如果一开始没大于1000，那循环一次就跳出了 啊我忘记写了 k的初值是1000

user: user-1
content: k的值如果大于1000了，那就是死循环了，可如果一开始没大于1000，那循环一次就跳出了
user-0 提问: c语言 初学者请教，代码如图

回复:
user: user-0
content: 一楼那位朋友，我不会看汇编。三楼讲的挺好的，，我已经找到问题所在了，谢谢大家，因为printf会做缓存，才出现那个结果，将第一行换到最后一行，就会输出预期中的结果，

user: user-1
content: 对于变参函数，例如 printf，函数读取的数据类型与传入的数据类型不一致就是未定义行为。这里盲猜你编译的是 64 位程序，于是浮点数运算结果被存到寄存器里了，并且后面没有修改寄存器，所以 printf 每次输出寄存器的值都是 1.000000。

user: user-2
content: “/”运算符， 在运算之前会将表达式的数据类型向上统一，然后再做运算，char-int会全转int再运算，float-int会全部转换成float再运算，运算结果的类型跟大类型相同 所以 3/2会是整数运算，结果为1，在printf的时候格式是“%f”， printf将1 转换成浮点输出 其他情况同理  第一个输出应该是 1.000 0.000  第二个输出应该是 0.11111 1.00000 0.00000  你贴的这个结果又点诡异

user: user-3
content: 就我看来，这玩意儿准是bug。 codeblocks能看汇编吗，看看，有啥区别不？
user-0 提问: 求大佬解答

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: i+2 进行了一个 加 运算，最后没有赋给任何变量， i 还是原来的i 如果想让i 加 2的话 可以写成 i += 2，相当于 i = i + 2

user: user-3
content: 这里应该给正确的式子，你i+2没有左值成立不了，i++当中也是有左值的

user: user-4
content: 常规用法这里会是i++，相当于 i = i+1,是一个表达式

user: user-5
content: i+=2
user-0 提问: 数据结构广义表救救孩子，讲讲这个题吧

回复:
user: user-0
content: 引用 1 楼 不闻窗外事的回复:因为c的话 好像tail(A) =(())   不是();tail后面必须加一个()； a的话同理 b是对的，因为head(A)=tail(A)=() 那么a呢那摸a选项呢，为什么不对

user: user-1
content: 因为c的话 好像tail(A) =(())   不是();tail后面必须加一个()； a的话同理 b是对的，因为head(A)=tail(A)=()
user-0 提问: C语言关于指针传输地址问题

回复:
user: user-1
content: div = &L[0]; 返回局部变量的地址是未定义的，建议L前加一个static就可以了。

user: user-2
content: 2楼 3楼正解，变量有作用域，函数的局部变量在函数结束时就释放了，你再用指针去访问，访问的是无效的 你可以把它改成静态变量，或者像3楼那样用指针申请内存

user: user-3
content: 二楼正解  局部变量是实现在函数栈里面的， 函数返回后，这些变量自动销毁了 虽然你返回了这个变量的地址，但是这个变量对应的内存已经被系统挪作他用了， 里面的数值自然也不可能继续有效了  你要想返回地址，只有一个办法， malloc一个动态地址返回  L = （int*) malloc( 100*sizeof(int)); 然后函数内容继续保持 返回L就好了。  &L【0】 和 L没有一样的，没有什么区别

user: user-4
content: 局部变量使用后会消亡，你传指针应该改变指针地址的值，而不是去改变他的地址，你把地址改为局部变量以后，函数调用结束，变量消亡，里面的值自然就没了

user: user-5
content: 传给函数一个指针，你只能修改这个指针指向的内容，但不能修改这个指针的地址。
user-0 提问: 哪位高手能帮我解释一下c语言素数题啊。

回复:
user: user-1
content: if(t) t = 1.表示为真， t = 0，表示假。 if（真）运行if包含的代码，if（假）不运行

user: user-0
content: if（t）里面的t呢？

user: user-2
content: t=1 表示还没有发现哪个数能整除i、  所以在对j循环结束后还没有发现能整除i的数的话，i就是素数 t=0 表示发现了某个数能整除i，

user: user-0
content: 第一个t=1和第二个t=0，这里有点不明白？

user: user-2
content: #include<stdio.h> int main() { int i,j,t; for(i=2;i<=100;i++) {      t=1;     for(j=2;j<i;j++)          if(i%j==0)              t=0;   // 如果i能被比它小的某个数整除， i就不是素数  比如i是4，那么j=2的时候，就会到这里  if(t)  printf("%d\t",i);} return 0;  }
user-0 提问: C语言

回复:
user: user-1
content: unsigned a = 0356;   所以a的八进制是356,转为16进制就是EE， ~a|a<<2+1       ~a的16进制是FFFFFF11              a<<2+1加法优先级高，所以等于a<<3，EE<<3 = 0x770  FFFFFF11 | 770 = FFFFFF71
user-0 提问: C语言

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: g，strcpy把前四个字符改为ABCD，第五个位置为'\0'后面不变是fg，所以m【6】也就是第七个，是g
user-0 提问: 不知道为什么它老是把最后一个元素输出，没有完成交换

回复:
user: user-0
content: 引用 3 楼 weixin_45949073的回复:不用指针就想交换？？ 痴心妄想 #include<stdio.h> int swap(int *x,int *y); int main(void) { 	int a,b; 	scanf("%d%d",&a,&b); 	swap(&a,&b); 	return 0; } int swap(int *x,int *y) { 	int s; 	s = *y; 	*y = *x; 	*x = s; 	printf("%d %d",*x,*y); }  我初学的。。看来还是要多看看书

user: user-1
content: 不用指针就想交换？？ 痴心妄想 #include<stdio.h> int swap(int *x,int *y); int main(void) { 	int a,b; 	scanf("%d%d",&a,&b); 	swap(&a,&b); 	return 0; } int swap(int *x,int *y) { 	int s; 	s = *y; 	*y = *x; 	*x = s; 	printf("%d %d",*x,*y); }

user: user-2
content: int swap(int *x,int *y) {     int temp;     temp = *x;     *x = *y;     *y = temp; } 供参考～

user: user-3
content: int swap(int x,int y)这个子函数的问题，需要传递一个指针或者地址，这里传递一个实参是不会改变原有内容的。 过程分析：在你调用这个swap函数的时候，只是把a,b的值赋值给x和y，所以交换的时候是交换x，y的值，而不是a，b的值 应该是int swap(int *x,int *y)，调用时，传递a，b的地址，在函数中通过x,y（即a,b的地址找到a,b）从而改变其值
user-0 提问: Vc6.0:最后的零怎么处理

回复:
user: user-0
content: 引用 2 楼 寻开心的回复:问题出在：     r = s =  i*i  这个操作上     i*i 是int * int 的运算，结果还是int， 当i>65535的时候i*i都是溢出的， i=65536的时候i*i就是0了  解决办法两种： 1    把i定义成 64位的 long longleixing 2    i*i 变成   double类型运算 i * 1.0* i; 也就是：   r=s=i*1.0*i; 我按照第二种方法改了，感谢

user: user-1
content: 验证办法： for(j=0;j<=9;j++)             if(r==a[j]) printf("%d  %6.0f\n",i, s);  你就能看到 s输出是0的时候， i的值是65536  这也是找到输出0的原因的调试办法， 把输出0的时候的环境变量输出出来，然后分析就容易找到问题所在了

user: user-1
content: 问题出在：     r = s =  i*i  这个操作上     i*i 是int * int 的运算，结果还是int， 当i>65535的时候i*i都是溢出的， i=65536的时候i*i就是0了  解决办法两种： 1    把i定义成 64位的 long longleixing 2    i*i 变成   double类型运算 i * 1.0* i; 也就是：   r=s=i*1.0*i;

user: user-2
content: 给出完整代码吧
user-0 提问: 复习时遇到的一个小问题，求解

回复:
user: user-0
content: 引用 2 楼 寻开心的回复:二维数组a【】【m】 a[j] 就是a[j][0]的地址，他前面有的元素个数是j*m个啊  a【i】【j】 前面的元素个数才是i*m+j个 感谢――――――――

user: user-0
content: 引用 1 楼 林多的回复:数组a，有五列  1 2 3 4 5 6 7 8 9 10   a[0][2]，表示第一行，第三个元素。该元素前面的元素个数 0 * 5 + 2 = 2  若二维数组 a 有m列，索引从0开始。。则a[i][j]，前面的元素个数为   首先，求第0到i-1行，一共i行，包含的元素个数： i*m  然后，求第i行，第j个元素。在第i行里，改元素前面的元素个数： j  因此，求得 a[i][j]，前面的元素个数为 i*m+j 感谢――――――――

user: user-1
content: 二维数组a【】【m】 a[j] 就是a[j][0]的地址，他前面有的元素个数是j*m个啊  a【i】【j】 前面的元素个数才是i*m+j个

user: user-2
content: 数组a，有五列  1 2 3 4 5 6 7 8 9 10   a[0][2]，表示第一行，第三个元素。该元素前面的元素个数 0 * 5 + 2 = 2  若二维数组 a 有m列，索引从0开始。。则a[i][j]，前面的元素个数为   首先，求第0到i-1行，一共i行，包含的元素个数： i*m  然后，求第i行，第j个元素。在第i行里，改元素前面的元素个数： j  因此，求得 a[i][j]，前面的元素个数为 i*m+j
user-0 提问: c语言用文件排序？

回复:
user: user-1
content: 文件内容需要加载到内存里排序，因此先把文件信息加载到内存排序，排序之后重新写入文件

user: user-2
content: 和这个和我的代码有啥关系啊   帮助写这个代码，也是因为有了你自己写的基础，才帮助改改  自己一行不写代码，就要结果的 ，  我就当作没看见 ， 除非那个题目确实有点儿意思的

user: user-3
content: 寻开心   大哥写的 #include<stdio.h> #include<stdlib.h> #include<string.h>  struct cj { 	char xh[10]; 	char name[10]; 	int gs; 	int cx; 	struct cj *next; }; typedef struct cj jj,*listlink; void srcj(listlink head); void prin(listlink head); void append(listlink head); void display(listlink head); int main(void)  { 	int n; 	listlink head; 	head = (listlink)malloc(sizeof(jj)); 	head->next = NULL; 	while(1)  	{ 		printf("0:Quit 1: 从文件读 2：写入文件  3：添加："); 		scanf("%d",&n); 		switch (n)  		{ 			case 2: 				printf("把数据写入到fle.txt文件昂中\n"); 				srcj(head); 				break; 			case 1: 				printf("从fle.txt文件当中读取数据\n"); 				prin(head); 				break; 			case 3: 				append(head); 				break; 			case 0: 				return 0; 				break; 			case 4: 				display(head); 				break; 		} 	}; 	return 0; }  /* 把链表写入文件 */ void srcj(listlink head) { 	if ( head == NULL ) return; 	listlink p = head->next; 	FILE *fp; 	if( (fp=fopen("fle.txt","wt") )== NULL)  	{ 		printf("打开写入文件fle.txt失败\n"); 		return; 	} 	while(p)  	{ 		fprintf(fp,"%s %s %d %d\n",p->xh, p->name, p->gs, p->cx); 		p = p->next; 	} 	fclose(fp); }  /* 从文件读取内容 */ void prin(listlink head) { 	if ( NULL == head) return; 	FILE *fp; 	listlink p = head; 	if((fp=fopen("fle.txt","r")) == NULL) 	{ 		printf("打开fle.txt文件失败\n"); 		return ; 	} 	while(1) 	{ 		listlink q = (listlink)malloc(sizeof(jj)); 		int nRead = fscanf(fp,"%s%s%d%d",q->xh,q->name, &q->gs,&q->cx); 		if ( 4 == nRead )  		{ 			printf("%s\t%s\t%d\t%d\n",q->xh,q->name,q->gs,q->cx); 			p->next = q; 			p = q; 		} 		else  		{ 			free(q); 			break; 		} 	} 	p->next = NULL; 	fclose(fp); }  void append(listlink  head)  { 	if ( NULL == head) return; 	listlink q = head; 	while(q->next ) q=q->next;  	listlink p = (listlink) malloc(sizeof(jj)); 	printf("input data\n"); 	scanf("%s%s%d%d", p->xh, p->name, &p->gs, &p->cx); 	q->next = p; 	p->next = NULL; }  void display(listlink head) { 	if ( NULL == head ) return; 	listlink p = head->next; 	while (p)  	{ 		printf("%s\t%s\t%d\t%d\n", p->xh, p->name, p->gs, p->cx); 		p=p->next; 	} }
user-0 提问: 求大佬们帮帮新手，不知道咋做（纯C语言）

回复:
user: user-1
content: 为啥还扯到堆栈了，无脑递归硬干似乎也不太会栈溢出吧，这图够小了，先试试吧 1600格的A*没溢出，不过不是硬刚

user: user-2
content: dfs和bfs都可以，dfs可以找到一条路，bfs可以用来找最短的路 如果数据量大的话，可以做一个预先处理，真正的建立无向图的数据结构 图的节点只有起点，终点和所有的岔路，  连接用他们之间的单行线（岔路口之间，以及起点、终点之间的通道都是单行线） 上面的两个图都可以简化很多，每个岔路口不过10来个而已。 有了图结构再套用标准的dfs、bfs算法就好了。   问题这些都不是初学者可以玩儿的东西  谁觉得可以在这个论坛里面讲明白dfs，以及用到的堆栈， 邻接矩阵?

user: user-1
content: 感觉深度优先比较好写点  至于怎么判断没有路，最简单的就是判断从起点开始走的所有方向是否都已经尝试过，也就是最后一次回到起点，发现没路可走，就可以退出了

user: user-3
content: 哦 纠正 遇到入口表示从这个方向出发不能走通 需要换方向

user: user-3
content: 沿着墙壁走 遇到出口就是能走通 输出路径 遇到入口就是不能走通

user: user-2
content: 无向图的连通关系判断，DFS或者BFS都可以实现。  但是都需要有一定的算法和数据结构的基础才能解决。  这里面最好借助一些stl模板提供的堆栈或者队列的工具 否则全部自己写有难度

user: user-2
content: 看你的算法的实现方式 dfs用到堆栈，当然你写递归也一样，用的系统堆栈。  bfs是用到队列。  你要是把图变成文本了，可以分享一下，拿来练手还是个不错的题目
user-0 提问: 小白提问！如何交换链表中两个节点的位置？

回复:
user: user-1
content: 给你两个宏定义参考吧 /* struct must has element value and next compare func return int   0   equal   > 0 first large than second   < 0 first small than second */ #define _ADD_DATA_TO_LIST_DESC(_list_type, _node, _head, _compare_func) \     if (_compare_func(_head, _node) < 0)  {                             \     _node->next = _head;                                                \     _head = _node;                                                      \     } else {                                                            \     _list_type * _cur = _head;                                          \     while (_cur) {                                                      \     if (_compare_func(_node, _cur->next) > 0) {                         \     _node->next = _cur->next;                                           \     _cur->next = _node;                                                 \     break;                                                              \     }                                                                   \     _cur = _cur->next;                                                  \     } }  /* struct must has element value and next compare func return int   0   equal   > 0 first large than second   < 0 first small than second */ #define _ADD_DATA_TO_LIST_ASC(_list_type, _node, _head, _compare_func)  \     _list_type * _cur = _head;                                          \     if (!_cur || _compare_func(_cur, _node) > 0)  {                     \     _node->next = _head;                                                \     _head = _node;                                                      \     } else {                                                            \     while (_cur->next) {                                                \     if (_compare_func(_node, _cur->next) < 0) {                         \     _node->next = _cur->next;                                           \     _cur->next = _node;                                                 \     break;                                                              \     }                                                                   \     _cur = _cur->next;                                                  \     }                                                                   \     if(!_cur->next){ _cur->next = _node;}} _compare_func 是一个比较函数，例如定义一个结构体，根据value排序 struct ST_EXP {     int nValue;     ST_EXP * next; }; //_compare_func 需要写成 int compare(ST_EXP * first,ST_EXP* second) {     if (first && second)     return first->nValue - second->nValue;    if (first && !second)     return 1;    if (!first && second)     return - 1;    return 0; } //相应的list定义 struct ST_EXP_LIST {   ST_EXP * value;   ST_EXP_LIST * next; }
user-0 提问: C语言，求e的近似值

回复:
user: user-1
content: int a = 10000; 	double sum = 2, pred = 1;; 	for (int n = 2; n <= a; n++) 	{ 		double cur = pred * 1.0 / n; 		sum += cur; 		pred =cur  ; 	} //2.7182818284590455 double精度有限

user: user-2
content: n！很快就越界了， 用整数甚至长整数都做不了1000！ 用整数就必须用高精度计算 改成double类型试试吧
user-0 提问: 有人可以帮我解决吗

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 引用 2 楼 柒贰伍玖 的回复:输出宽度控制规则是：在实际宽度和指定宽度中，取大值输出。

user: user-3
content: 输出宽度控制规则是：在实际宽度和指定宽度中，取大值输出。

user: user-4
content: %3o表示输出宽度最小为3个字节的宽度，如果实际宽度超过3，则按实际输出
user-0 提问: stdin指向的内容是什么

回复:
user: user-1
content: stdin 是指 C 语言内置的输入流，注意这个流是抽象的，你不需要知道它代表了什么具体的输入(实现可以是控制台输入或者文件输入等)。此外，C 语言的流默认内置缓冲区(并且用户可以更改)，stdin 也不例外。以在 Windows 中双击打开的一个控制台程序为例，键盘输入先进入 conhost.exe 的缓冲区，然后控制台程序从 conhost 下载键盘输入并放入 stdin 的缓冲区，最后才通过 scanf 等手段到达用户代码。

user: user-2
content: 标准输入stdin，一般指向键盘等输入设备

user: user-0
content: 引用 1 楼 lin5161678 的回复：stdin是一个FILE* FILE里面有一个成员保存了指向缓冲区的指针所以stdin指向的是缓冲区？那么缓冲区本身的位置在哪里呢？

user: user-3
content: stdin是一个FILE* FILE里面有一个成员保存了指向缓冲区的指针

user: user-4
content: stdin确实是对应的系统的一段内存，记录你刚才所有的输入按键  在dos的年代，因为没有多线程的概念， 内存访问也没有什么限制， 这个键盘缓冲的地址是可以直接访问的，自己插入修改内容都可以 windows年代下， 系统依然有自己的缓冲区，但是已经不让用户直接去访问了，是键盘驱动程序来负责管理的，必须通过系统的函数来获得对他的访问授权 而且有不同的访问方式，一种是缓冲区这种读写已经有的按键，还有一种的查询当前键盘的状态， 比如，你是否一直按着shift键呢  回到c语言里面， stdin就是标准的输入，常规指的就是键盘输入， 不是键盘， 是通过键盘输入的那一串还没有处理的字符 因为这种数据存储方式也是一个数组，一个字符挨着一个字符， 和文件保存的内容一个字节一个字节一样，所以他们都是被统称为输入流
user-0 提问: #没有指针的格式错误#

回复:
user: user-0
content: 引用 2 楼 weixin_45949073的回复:这样写函数的吗？？ //要么  include<stdio.h> //函数1 //函数2  int main(void) { 	 } //函数1 { 	 } //函数2 { 	 }   //要么 include<stdio.h> 函数1 { 	 } 函数2 { 	 }  int main(void) { 	  }  那请问我得如何才能调用paixu这个函数，得怎么修改

user: user-1
content: 这样写函数的吗？？ //要么  include<stdio.h> //函数1 //函数2  int main(void) { 	 } //函数1 { 	 } //函数2 { 	 }   //要么 include<stdio.h> 函数1 { 	 } 函数2 { 	 }  int main(void) { 	  }

user: user-2
content: void paixu(int a[], int n); void bijiao(int x, int y);  int main() { }  void paixu(int a[], int n) { }  void bijiao(int x, int y) { }  你的种用法不推荐， 如果你们的教材就那样写， 建议你换一本教材，如果是你们的老师那样教建议多看网上的东西吧 另外，看了你的程序是要对原来的数组进行排序， bijiao 这个函数改只是把自己的参数x、y的值交换了，并没有修改到数组的值 如果要改数组的值 要改成 bijiao(int *x, int *y)，用指针；或者不用bijiao这个函数了，直接在paixu里面交换值
user-0 提问: 为什么64位PC机上 long的高位不为0？   

回复:
user: user-0
content: 问题关闭，谢谢大家的回复，内容概要已经转到我的博客：https://mp.csdn.net/console/editor/html/103819937，大家还有什么回复可以到博客留言

user: user-0
content: 二.可能原因  编译器的数据模型  Datetype  LP64   ILP64   LLP64   ILP32    LP32  char           8          8         8            8          8  short          16       16       16           16        16  int               32       64       32           32        16  long            64       64       32           32         32   long long    64  pointer        64       64        64           32        32  一般情况下windows64位一般使用LLP64模型  64位Unix,Linux使用的是LP64模型 ———————————————— 版权声明：本文为CSDN博主「编程吴彦祖」的原创文章，遵循 CC 4.0 BY-SA 版权协议，转载请附上原文出处链接及本声明。 原文链接：https://blog.csdn.net/akyj1021/article/details/81432758

user: user-1
content: windows上的64位编译器普遍使用LLP64模型（包括GCC的windows移植MinGW64），只有long long和指针是64位的，其他和32位编译器一致，是为了最大化兼容性的缘故。unix、linux上的64位编译器则主要使用LP64模型，long、long long和指针都是64位的，int保持32位，少部分使用ILP64模型，甚至SILP64，连short都是64位的，典型如CRAY的UNICOS系统上带的编译器。

user: user-0
content: 引用 6 楼 寻开心 的回复:引用 5 楼 真相重于对错 的回复:vs long long 才是64 正解

user: user-2
content: 引用 5 楼 真相重于对错 的回复:vs long long 才是64   windows系统，msdn下有一个页面 该信息也可用于各种Windows头文件中WinDef.h。我在这里列出了一些相关的类型：  类型| S / U | x86 | 64位 ----------------------------+-----+--------+------- BYTE，BOOLEAN | U | 8位| 8位 ----------------------------+-----+--------+------- SHORT | S | 16位| 16位 USHORT，WORD | U | 16位| 16位 ----------------------------+-----+--------+------- INT，LONG | S | 32位| 32位 UINT，ULONG，DWORD | U | 32位| 32位 ----------------------------+-----+--------+------- INT_PTR，LONG_PTR，LPARAM | S | 32位| 64位 UINT_PTR，ULONG_PTR，WPARAM | U | 32位| 64位 ----------------------------+-----+--------+------- LONGLONG | S | 64位| 64位 ULONGLONG，QWORD | U | 64位| 64位   而Linux或者Unix下面 针对64位平台的整数和指针的大小有一些可能的安排。其中最常用的两个是ILP64（实际上，这只是其中的一小部分例子，Cray就是这样）和LP64（几乎所有其他的）。首字母来自'int，long，指针是64位'和'long，指针是64位'。  Type           ILP64   LP64   LLP64 char              8      8       8 short            16     16      16 int              64     32      32 long             64     64      32 long long        64     64      64 pointer          64     64      64  看来还是不能假定这玩意儿的大小，还是实测为准啊

user: user-3
content: vs long long 才是64

user: user-0
content: 引用 2 楼 寻开心 的回复:你这个long int到底是几啊 从你代码上看不出来它的值 从你的输出结果上开，这个long的低四位是710000， 就是16进制的0x00 01 15 58 高位4个字节，看不出来你给设置上了什么东西， 从输出结果上看是0x00 01 3c 68 ， 十进制的810000  估计你是弄错了10进制和16进制的区别 0x710000， 0x810000，合并起来long的高位才会是1  找到原因了，应该和VS的问题，VS我已经配置 X64，为什么还是32位？  （ 	printf("size is %d\n", sizeof(long int)); 	printf("size is %d\n", sizeof(long));  这两个打印出来的都是 4）

user: user-0
content: 找到原因了，应该和VS的问题，VS我已经配置 X64，为什么还是32位？  （ 	printf("size is %d\n", sizeof(long int)); 	printf("size is %d\n", sizeof(long));  这两个打印出来的都是 4）

user: user-2
content: 你这个long int到底是几啊 从你代码上看不出来它的值 从你的输出结果上开，这个long的低四位是710000， 就是16进制的0x00 01 15 58 高位4个字节，看不出来你给设置上了什么东西， 从输出结果上看是0x00 01 3c 68 ， 十进制的810000  估计你是弄错了10进制和16进制的区别 0x710000， 0x810000，合并起来long的高位才会是1
user-0 提问: 为什么这个程序输不出结果

回复:
user: user-0
content: 引用 2 楼 qq_45744378的回复:[quote=引用 1 楼 寻开心的回复:]   if(t!=1)     {         max=0;        for(i=0;i<k;i++)        {            if(d[p[k]]>max)            {                max=d[p[k]];                v=p[k];            }        }        printf("%s",s[v]);     }  这里是对i做循环， 可是循环体内用一直是k参数， 这能对吗？  后面的v没有初始化过， 前面的循环有可能让v不更改， 这也是个潜在的漏洞 那么s[v]这里怎么改[/quote] 知道了，非常谢谢谢你！！

user: user-1
content: 给v赋予初值啊 max=0，其实是不合理的   应该是max=d[p[0]], v=0; 这样来初始化

user: user-0
content: 引用 1 楼 寻开心的回复:if(t!=1)     {         max=0;        for(i=0;i<k;i++)        {            if(d[p[k]]>max)            {                max=d[p[k]];                v=p[k];            }        }        printf("%s",s[v]);     }  这里是对i做循环， 可是循环体内用一直是k参数， 这能对吗？  后面的v没有初始化过， 前面的循环有可能让v不更改， 这也是个潜在的漏洞 那么s[v]这里怎么改

user: user-1
content: if(t!=1)     {         max=0;        for(i=0;i<k;i++)        {            if(d[p[k]]>max)            {                max=d[p[k]];                v=p[k];            }        }        printf("%s",s[v]);     }  这里是对i做循环， 可是循环体内用一直是k参数， 这能对吗？  后面的v没有初始化过， 前面的循环有可能让v不更改， 这也是个潜在的漏洞
user-0 提问: 我在输入作者名的时候运行异常，麻烦看下哪里错了，顺便看看整体有没有错，谢谢大佬。

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 你不是输入作者出错，是输入书名就错了，你要输入的是字符串吧？但是你定义的是一个字符，，你要把char X变成char X【放你字节大小】字节大小要至少等于你最大字节，不然会越界，一般定的稍微大点，一个汉字两个字节，书名的话来个60，名字24，看着来，不用太大，但是要保证你输入以后不会越界，访问的时候变量用 . p1.num，数组名、指针用->。char x[]，p1->x，

user: user-3
content: char是单个字符，改为字符数组

user: user-4
content: typedef struct library { struct library *next; int num; char bookname【100】; char author【50】; char type【100】; char publish【50】; float sale; char publishing_house【100】; char publishing_time【100】; }library; 改成类似这样的，才可以用%s方式来输入对应的数据。
user-0 提问: 求助

回复:
user: user-0
content: 引用 1 楼 柒贰伍玖 的回复:你 is 函数里面的 sum，没有初始化就直接用，会误判 count_sum最后的 return 语句是多余的 给你改了下   #include "stdio.h" #include "stdlib.h" #include "../../不被3整除的数/q1.h"  int is(int number); void count_sum(int a,int b);  int main() {  	int a,b;  	scanf("%d %d",&a,&b); 	if(is(a)) printf("%d is counted.\n",a); 	if(is(b)) printf("%d is counted.\n",b); 	count_sum(a,b); 	system("pause");  	return 0; }   int is(int number) { 	int i,a; 	int b[10]; 	int sum = 0;//加初始化 	a=number; 	while(a!=0) 	{  		for(i=0;i<10;i++) 		{ 			b[i]=a%10; 			a/=10; 		} 		for(i=0;i<10;i++) 		{ 			sum+=b[i]; 		} 	} 	if(sum==5) 		return 1; 	else 		return 0; }   void count_sum(int a,int b) { 	int i,sum=0,count=0;  	if(a>0&&b<=10000&&a<=b) 	{ 		i=a; 		while(i<=b) 		{ 			if(is(i)) 			{ 				printf("%d\r\n", i); 				count+=1; 				sum+=i; 			} 			i++; 		} 		printf("count=%d,sum=%d\n",count,sum); 	} }   谢谢大佬

user: user-1
content: 你 is 函数里面的 sum，没有初始化就直接用，会误判 count_sum最后的 return 语句是多余的 给你改了下   #include "stdio.h" #include "stdlib.h" #include "../../不被3整除的数/q1.h"  int is(int number); void count_sum(int a,int b);  int main() {  	int a,b;  	scanf("%d %d",&a,&b); 	if(is(a)) printf("%d is counted.\n",a); 	if(is(b)) printf("%d is counted.\n",b); 	count_sum(a,b); 	system("pause");  	return 0; }   int is(int number) { 	int i,a; 	int b[10]; 	int sum = 0;//加初始化 	a=number; 	while(a!=0) 	{  		for(i=0;i<10;i++) 		{ 			b[i]=a%10; 			a/=10; 		} 		for(i=0;i<10;i++) 		{ 			sum+=b[i]; 		} 	} 	if(sum==5) 		return 1; 	else 		return 0; }   void count_sum(int a,int b) { 	int i,sum=0,count=0;  	if(a>0&&b<=10000&&a<=b) 	{ 		i=a; 		while(i<=b) 		{ 			if(is(i)) 			{ 				printf("%d\r\n", i); 				count+=1; 				sum+=i; 			} 			i++; 		} 		printf("count=%d,sum=%d\n",count,sum); 	} }
user-0 提问: 改错

回复:
user: user-1
content: 引用 11 楼 柒贰伍玖 的回复:引用 9 楼 weixin_45949073 的回复:[quote=引用 7 楼 super_admi 的回复:] 我只能感叹一句：这年头，连手敲代码都懒得做了，居然直接上照片……这么多问题的也就个别这样，别太悲观。 还有更过分的，传的照片在电脑上 你还得歪着头看的[/quote]哈哈哈

user: user-2
content: 引用 9 楼 weixin_45949073 的回复:引用 7 楼 super_admi 的回复:我只能感叹一句：这年头，连手敲代码都懒得做了，居然直接上照片……这么多问题的也就个别这样，别太悲观。 还有更过分的，传的照片在电脑上 你还得歪着头看的

user: user-1
content: 引用 5 楼 寻开心 的回复:char fun(char * c) {         if () 不用改 return *c； }  int main（） {     ....    puts(*p) 改成 putchar（*p）；    。。。。。。 }putchar不是一个字符吗？这里应该是要输出字符串的。

user: user-1
content: 引用 7 楼 super_admi 的回复:我只能感叹一句：这年头，连手敲代码都懒得做了，居然直接上照片……这么多问题的也就个别这样，别太悲观。

user: user-2
content: fun函数 bool fun(char *c)          ->           char fun(char *) fun = c                         ->            return *c  main函数 p = s                           ->             *p = s while(*p)                     ->             while('\0' != *p) puts(*p)                      ->              putchar(*p)

user: user-3
content: 我只能感叹一句：这年头，连手敲代码都懒得做了，居然直接上照片……

user: user-0
content: 引用 1 楼 user-5的回复:char fun() 理论上指针要判断一下是不是NULL return *c; *p=s; puts(p)  不是很懂要怎么改，这些是语法的，逻辑的就没管了 这样改能运行不出结果

user: user-4
content: char fun(char * c) {         if () 不用改 return *c； }  int main（） {     ....    puts(*p) 改成 putchar（*p）；    。。。。。。 }

user: user-0
content: 引用 3 楼 柒贰伍玖的回复:题目要求发下看看 图片里第一行文字就是啊

user: user-2
content: 题目要求发下看看

user: user-0
content: 好的谢谢，我去试一下看看

user: user-5
content: char fun() 理论上指针要判断一下是不是NULL return *c; *p=s; puts(p)  不是很懂要怎么改，这些是语法的，逻辑的就没管了
user-0 提问: 框出来的语句有什么用吗？

回复:
user: user-1
content: 节点就是火车， 指针就是挂钩，自己想想一下，要摘掉一节车厢要怎么弄。  自己画图也好，拿实物示范也好。

user: user-2
content: 是为了能够连接到后面的节点，这一句，假如p是头节点，要删除p->next,而p->next->next需要通过p->next这个节点才能获取，如果直接删除p->next后面的节点就不能再连接上了，现在q=p->next   =>  q->next=p->next->next ;p->next=q->next => p-next->=p->next->next这样就把后面连起来而把p->next这个节点独立出来了，这样再删除这个节点就不会影响到别的节点了

user: user-0
content: 是为了找到q，后边好用e去除q里面的值吗？我不是很确定……希望大家能帮帮我，谢谢啦。
user-0 提问: 为什么将数组传入函数以后的sizeof算出来与主函数不一致？

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 建议使用宏定义计算数组长度： #define ARRAY_LEN(x) (sizeof(x)/sizeof(x[0]))

user: user-2
content: 这隐含了一个道理，也是最不容易理解的道理，指针所占的空间大小与指针的类型无关，而与系统的数据总线位数有关

user: user-0
content: 引用 6 楼 weixin_45949073的回复:[quote=引用 5 楼 ycy894zx的回复:]哦哦哦哦，谢谢大家！！我还没学指针 这样他们看不到的，最好的答谢就是结贴分配分数[/quote] 请问大佬手机怎么弄分配分数？

user: user-3
content: 因为这里不是数组了，而是指针。

user: user-4
content: 引用 5 楼 ycy894zx的回复:哦哦哦哦，谢谢大家！！我还没学指针 这样他们看不到的，最好的答谢就是结贴分配分数

user: user-0
content: 哦哦哦哦，谢谢大家！！我还没学指针

user: user-5
content: 一个是指针，一个是数组， 就是不一样了

user: user-6
content: 因为你传入函数的形参已经从那一片地址变成了首地址的指针，而sizeof（指针）是4/8字节（看系统）

user: user-7
content: 形参无法写数组 只能写指针

user: user-8
content: void f(int a[])  == void f(int* a)
user-0 提问: 单链表插入元素的代码中判断输入位置不合理的条件是否多余了？

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 所谓的应保护，就是不管前面怎么写代码， 反正我知道，到了这个就必须要达到某个条件 那么我就在这里加上对这个条件的判断， 以此来检验前面的成果。  如果前面有错了， 到了这里就可以发现， 从而确定错误的范围是在前面的代码里面发生的

user: user-0
content: 引用 2 楼 寻开心的回复:while结束的时候， j最多是和i-1相等，不会出现大于的情况 那个判断是多余的 留在这里，也许是残留代码，或者是硬保护，防止某些意外吧 能讲讲关于硬保护是什么意思吗，？网上没搜到。

user: user-2
content: while结束的时候， j最多是和i-1相等，不会出现大于的情况 那个判断是多余的 留在这里，也许是残留代码，或者是硬保护，防止某些意外吧

user: user-2
content: 当链表当中只有4个，参数i是5的时候， 就会造成while循环退出的时候，p是NULL，而j依然是小于i-1的 否则while退出的时候，j就是i-1 j最多和i-1相等， 不会出现大于的情况的，那是无效的条件； 放在里面也不出错的， 因为那个逻辑判断是 或  也许是残留的代码，放在这里做一个硬保护
user-0 提问: Vc6.0求佩尔方程

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 第一次 x未初始化
user-0 提问: c语言编程求答案

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 把循环里面的return 0去掉，就可以得到所有满足a*b=716699的a和b  a=563 b=1273     a+b=1836     a*b=716699 a= 67  b=10697   a+b=10764   a*b=716699 a=19   b=37721   a+b=37740   a*b=716699 a=1    b=716699  a+b=716700 a*b=716699

user: user-2
content: #include <stdio.h> #include <math.h>  int main() { int a, b; int v = 716699; for (a=sqrt(v); a>0; a-- ) {       b = v / a;       if ( a * b  == v ) {                printf("a=%d b=%d a+b=%d a*b=%d",a, b, a+b, a*b);                return 0;       } } return 0; };

user: user-0
content: 我不知道怎么编码，求编码

user: user-2
content: a*b为固定值， a+b最小值； 那么ab越接近，则和越小 所以上述的循环从sqrt（716699）开始向0循环就好，找到第一个满足a*b的整数解，计算出和就是答案了

user: user-3
content: 大致代码 int min() {     int result=INT_MAX;     int index=1;     for(int A=1;A<sqrt(716699);A++)     {                              if(716699%A==0)               {                   int B=716699/A;                      int AB= A+B;                   if(AB<result)                   {                         result=AB;                         index=A;                    }             }         return result;      }

user: user-3
content: 因为：A*B=716699 A+B=A+716699/A 也就是求 A+716699/A的极小值 且 A<716699/A
user-0 提问: 单链表尾插曲法

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 这个我不会 好久没发帖提问了，找不到管理和结贴入口了

user: user-0
content: 引用 8 楼 李家湾王老汉的回复:[quote=引用 7 楼 寻开心的回复:]不是q=p q是新插入的，自然就是最后的节点 要让p始终是最后的节点， 所以是p=q （这样才能保证下次来的q依然插在p的后面成为最后的节点） 嗷，我好像懂了。……………[/quote] 怎么把分给你啊？？？？

user: user-0
content: 引用 7 楼 寻开心的回复:不是q=p q是新插入的，自然就是最后的节点 要让p始终是最后的节点， 所以是p=q （这样才能保证下次来的q依然插在p的后面成为最后的节点） 嗷，我好像懂了。……………

user: user-2
content: 不是q=p q是新插入的，自然就是最后的节点 要让p始终是最后的节点， 所以是p=q （这样才能保证下次来的q依然插在p的后面成为最后的节点）

user: user-0
content: 引用 5 楼 寻开心的回复:这里的p=q，是让p始终是当前的尾巴节点 这样，每次新申请出来的q，都可以在他的后面继续插入 对呀，但是这样写不是很奇怪吗？要让每个q都等于p不应该是q=p吗？这样才是把p赋给q呀？ （额，我是个小白，对编程不是很懂。但是老师讲过说编程里面是把右边的赋给左边对吧？但根据这个思想就总是觉得最后一步写反了）

user: user-2
content: 这里的p=q，是让p始终是当前的尾巴节点 这样，每次新申请出来的q，都可以在他的后面继续插入

user: user-0
content: 引用 1 楼 自信男孩的回复:贴代码吧。 不是p变成q，而是p指向q的位置。 图已经发了。只是手机没法回复图片。

user: user-0

user: user-3
content: 贴代码吧。 不是p变成q，而是p指向q的位置。
user-0 提问: 大佬们，我这个哪里有问题吗，运行完最后一句话之后，数据都输出来了，然后就返回不了了，就崩溃了。

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 直接贴完整代码吧，从这个函数里看不出你的问题所在～其他函数也只能靠猜～
user-0 提问: 遇到一个问题！

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 第1种 : 1枚1分 2枚2分 19枚5分 第2种 : 1枚1分 7枚2分 17枚5分 第3种 : 1枚1分 12枚2分 15枚5分 第4种 : 1枚1分 17枚2分 13枚5分 第5种 : 1枚1分 22枚2分 11枚5分 第6种 : 1枚1分 27枚2分 9枚5分 第7种 : 1枚1分 32枚2分 7枚5分 第8种 : 1枚1分 37枚2分 5枚5分 . . . 第456种 : 86枚1分 2枚2分 2枚5分 第457种 : 87枚1分 4枚2分 1枚5分 第458种 : 88枚1分 1枚2分 2枚5分 第459种 : 89枚1分 3枚2分 1枚5分 第460种 : 91枚1分 2枚2分 1枚5分 第461种 : 93枚1分 1枚2分 1枚5分 我可以啊，逻辑和结果都没有问题啊

user: user-3
content: 增加头文件  #include<windows.h> 加一条显示屏命令  system("mode con:cols=100 lines=1000");  //请包含头文件    #include "stdio.h" #include<windows.h>   int main () { 	  	int i,j,k,h=0; 	system("mode con:cols=100 lines=1000");  //请包含头文件   	for(i=1;i<100;i++) 	{ 		for(j=1;j<50;j++) 		{ 			for(k=1;k<20;k++) 			{ 				if((i+(2*j)+(5*k))==100) 				{ 				h++; 				printf("第%d种 : %d枚1分 %d枚2分 %d枚5分\n",h,i,j,k); 			    } 			} 		} 	} 	system("pause"); }

user: user-4
content: "为什么一开始直接166种了" 输出界面的限制只显示几百行  你函数太多 上面的输出就被刷掉了  正常现象 如果不放心 你可以用freopen 把stdout改到一个文件里面  打开文件看输出结果 就不会从166开始了

user: user-0
content: 引用 1 楼 user-4 的回复:https://bbs.csdn.net/topics/394557285	 我的代码和他的一样，可是我输出的结果没有从零开始，直接从166开始了！

user: user-0
content: 引用 3 楼 柒贰伍玖 的回复:if(i+(2*j)+(5*k)==100)  这个你少了括号，这个只要整个表达式不为0都会进到if里面去 应该是if((i+(2*j)+(5*k))==100)我按照你说的改了，还是一样！

user: user-3
content: if(i+(2*j)+(5*k)==100)  这个你少了括号，这个只要整个表达式不为0都会进到if里面去 应该是if((i+(2*j)+(5*k))==100)

user: user-4
content: https://bbs.csdn.net/topics/394557285
user-0 提问: c控制台跨年小程序

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 哥们，代码排版下啊，这个一般没几个人能仔细去看的
user-0 提问: 关于c

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 你第二个%ld获取是不是需要&

user: user-0
content: 抱歉，我知道哪儿错了😂

user: user-0
content: 引用 2 楼 user-2的回复:你第二个%ld获取是不是需要& 谢谢！！ 😎😎😎😎😎😎😎😎😎😎😎😎
user-0 提问: VC6.0一直报错，打不开预编译头文件，救我

回复:
user: user-1
content: 从文件路径看是不对的，你那个cpp文件不应该在system32中！ 建议安装原版的VC6.0

user: user-2
content: 新建工程。控制台应用。

user: user-0
content: 引用 2 楼 liups 的回复:从文件路径看是不对的，你那个cpp文件不应该在system32中！ 建议安装原版的VC6.0 果然是路径错了，我改成了C:\Users\lenovo\Desktop\Debug\妹啊    就好了

user: user-0
content: 引用 2 楼 liups的回复:从文件路径看是不对的，你那个cpp文件不应该在system32中！ 建议安装原版的VC6.0 果然是路径错了，我改成了C:\Users\lenovo\Desktop\Debug\妹啊 就好了，

user: user-3
content: #include "stdafx.h" 或者 项目属性 中选择不使用预编译头
user-0 提问: VC6.0编译器频繁报错，大佬救我

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html
user-0 提问: 学员小问题，在线等，急

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 1 fopen两次是不对的。 FILE * fp； 就可以了 2 你先试试fgets后puts看看，是否从文件当中正确的获得了字符串 3 把文本读入到a数组后，你用sscanf函数读取就不用那么多while语句判断    sscanf 和 scanf函数类似    sscanf（a, "%s%s%s%s",  name, id, cp, ....
user-0 提问: C语言：三维基本勾股数组

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: #define RANGE 100  int main() {     int nCount=0;     int i, j;     for ( i=2; i<RANGE; i++ ) {         for ( j=1; j<i; j++ )         {             int v = i*i + j*j;             int t = sqrt(v);             if (t*t == v && t<=RANGE) {                 nCount++;                 printf("%3d\t%3d\t%3d -> %5d %5d %5d\n", j, i, t, j*j, i*i, t*t);             }         }     };     printf("Total: %d\n", nCount);     return 0; }

user: user-2
content: 没注意 “基本” 你自己把结果过滤一下就好了。  只要判定i和j是否互质就可以了。

user: user-0
content: 引用 1 楼 寻开心的回复:#define RANGE 100  int main() {     int nCount=0;     int i, j;     for ( i=2; i<RANGE; i++ ) {         for ( j=1; j<i; j++ )         {             int v = i*i + j*j;             int t = sqrt(v);             if (t*t == v && t<=RANGE) {                 nCount++;                 printf("%3d\t%3d\t%3d -> %5d %5d %5d\n", j, i, t, j*j, i*i, t*t);             }         }     };     printf("Total: %d\n", nCount);     return 0; } 你好，你上面的程序能够运行，是三维勾股数组，不过不是“基本”勾股数组吧？
user-0 提问: 新手求助

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 一楼正解，一个是全局变量，另外一个是函数传递的是值，如果要改变原来变量的值，就要用指针把变量的地址传过去

user: user-3
content: 第一个你定义的是全局变量，同名改变了变量的值，第二个你是传参，局部变量里的值虽然一样，但是局部变量的地址与你需要改变的变量的地址不同，所以你所做的改变仅仅只在你f函数中局部变量上，不会改变你main函数里的值，如果要改，把f的参数改为地址，然后把main函数传递的时候传递对应变量的地址，改变的就是main函数的变量的值了f（int* a,int* b）{{int t;t=*a,*a=*b;*b=t}} main调用传参f(&x,&y);
user-0 提问: 求大佬赐教，表达的不太清楚，还请原谅！

回复:
user: user-1
content: 图形用户界面（GUI）编程可以学习C++ Builder，架构先进（和C#一样拖控件），入门比较容易。  　　C++ Builder是真正的可视化的开发工具。C++ Builder可以用鼠标拖拉控件加上设置属性轻松的“设计”出一个程序的图形用户界面，利用可视的组件/控件像“搭积木”一样，以“所见即所得”的方式搭建应用程序的界面，这也是C++ Builder这个名字中Builder的概念。这样，只需要用C++语言编写业务逻辑代码，类似于DOS下文本界面编程，只要专注于实现业务逻辑功能就可以了，代码非常简洁。数据的输入和表现，都在图形用户界面，非常直观、易用。这就是RAD开发（Rapid Application Development，快速应用程序开发）。  书籍推荐： 《C++Builder 6程序设计教程（第二版）》 （陆卫忠，刘文亮　等编著 /2011-04-01 /科学出版社）（当当网） 《C++Builder 6编程实例精解》（赵明现），PDF，是数字版的，非扫描版的，里面还有一个俄罗斯方块游戏的完整实现。 《精彩C++Builder 6程序设计》（台湾 吴逸贤），里面有10几个简单小游戏的实现，可以自己看懂以后再重写，才是自己掌握的。 《C++ Builder 5高级编程实例精解》（刘滨 编著）都是较大的实用的程序。  C++ Builder书籍下载： https://pan.baidu.com/s/13n9hxwVj9ai1p5L2rQC83Q

user: user-2
content: MFC其实挺好的，从VC++6.0入手吧

user: user-3
content: 不清楚，c的话在学校用不到界面吧？简单的字符界面就够了，我们都是后面学了c++用QT，然后vs软件自带控件 要是做什么系统之类的，简单的字符界面就够了吧，printf("*****图书管理系统*****\n");printf("1.XXX\n");printf("2.xxx\n");printf("请输入你的选择\n");printf("input:");写个函数单独用来显示这些就好了 *****图书管理系统***** 1.XXX 2.xxx 请输入你的选择 input: 显示出来就是这样的

user: user-4
content: 你说的是图形化界面编程吧。这需要图形库。才大一啊，c++学了的话可以用qt。没学的话你可以找一下c语言的图形库，我知道有个叫easyx的图形库，但我没用过。我都是用qt.
user-0 提问: 第一次用C的结构体和链表写了个学生管理系统，调试的时候没有问题，但是运行的时候却无法正常工作，求各位大佬帮忙解惑！！！

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html
user-0 提问: c语言，大神帮忙解释下

回复:
user: user-1
content: do-while后面的分号最好加上，这样比较规范，养成个好习惯。

user: user-0
content: 谢谢，期末复习的题库，有点问题

user: user-2
content: 7 怎么没有对的答案啊    a 循环体内可以有多条语句，不正确    b 可以不执行到while就跳出，但是没有while 语法就不成立了    c 可以把终止循环的操作放到while里面用逗号表达式处理结束条件，也不正确。 相比之下，c可以作为本题答案    d do ｛｝while（1）；分号可以加的啊。也可以不加。但是不是不能加。 13      a) *p数组的第一个元素值     b) a【10】越界。   这个是答案     c）*p++ 是数组的第二个元素值     d） a【p-a】  就是a【0】 也是对的
user-0 提问: 一个结构体声明中要包含另一个结构体指针，要怎么做？

回复:
user: user-1
content: struct people {      int age;     struct people *next;   //链表节点的定义方法。 }

user: user-2
content: 这个对的阿，通常就是包含的结构体先声明，然后记得格式{}后的；别忘了

user: user-3
content: 通常就是你这种做法，也可以用 void *p，用的时候强制转换

user: user-4
content: 个人喜好，主要看你编码习惯

user: user-0
content: 谢谢各位 ！

user: user-5
content: 你自己写的那种方法就是常用的了

user: user-0
content: 引用 1 楼 柒贰伍玖 的回复:  引用 2 楼 qq_1457346882 的回复:  引用 3 楼 自信男孩 的回复:  引用 4 楼 寻开心 的回复:  我的意思是    我用这种做法：  #include "hoteler_node.h"   。            然后在后面写新的结构体room(room包含另一结构体peopel的指针)声明

user: user-5
content: 只要提前声明被包含的结构，不让它没有定义，就可以和常规类型一样使用了
user-0 提问: 谁能帮我看看这是哪里出了问题（哭辽(´;︵;`)）

回复:
user: user-0
content: 引用 3 楼 qinjiankai的回复:第二张图的b指向的是常量区内存（“you are ****……”这个是常量），那个地方的内存你能动吗。。第一张图上的b是在栈上，你动得了它 对对对，刚刚知道了这个问题(҂⌣̀_⌣́)对这种内存啥的不是很明白，谢谢回答(*°∀°)=3

user: user-1
content: 第二张图的b指向的是常量区内存（“you are ****……”这个是常量），那个地方的内存你能动吗。。第一张图上的b是在栈上，你动得了它

user: user-0
content: 引用 9 楼 棉猴的回复:正如楼上朋友说的，两个代码中，b所处的内存空间是不同的  如下代码中 char *a = "i am teacher."; 	char b[] = "you are a student."; 	char* p = b; 	char *c = "you are a student."; 可以观察下a,b,c和p的值，因为a和c是在堆的常量区中，所以这两个指针的内容靠得很近；而b和p是在栈中，所以离a和c就很远  嗯嗯<(｀^´)>知道了，谢谢！

user: user-2
content: 引用 5 楼 qinjiankai 的回复:[quote=引用 4 楼 xxxiaodi 的回复：][quote=引用 3 楼 qinjiankai的回复:]第二张图的b指向的是常量区内存（“you are ****……”这个是常量），那个地方的内存你能动吗。。第一张图上的b是在栈上，你动得了它 对对对，刚刚知道了这个问题(҂⌣̀_⌣́)对这种内存啥的不是很明白，谢谢回答(*°∀°)=3[/quote]没事没事，给分吧哈哈哈[/quote] 我想问一下，她的char *b="you .......",写全了是const char *b="..." 吗？是可以改变指针的地址，但是不能对指针赋值吗？

user: user-3
content: 正如楼上朋友说的，两个代码中，b所处的内存空间是不同的  如下代码中 char *a = "i am teacher."; 	char b[] = "you are a student."; 	char* p = b; 	char *c = "you are a student."; 可以观察下a,b,c和p的值，因为a和c是在堆的常量区中，所以这两个指针的内容靠得很近；而b和p是在栈中，所以离a和c就很远

user: user-4
content: 直接贴代码吧，图片不清晰也不好调试～

user: user-5

user: user-0
content: 引用 5 楼 qinjiankai的回复:[quote=引用 4 楼 xxxiaodi 的回复：][quote=引用 3 楼 qinjiankai的回复:]第二张图的b指向的是常量区内存（“you are ****……”这个是常量），那个地方的内存你能动吗。。第一张图上的b是在栈上，你动得了它 对对对，刚刚知道了这个问题(҂⌣̀_⌣́)对这种内存啥的不是很明白，谢谢回答(*°∀°)=3[/quote]没事没事，给分吧哈哈哈[/quote] 怎么给分呐，我刚用这个(*｀へ´*)（尴尬）

user: user-1
content: 引用 4 楼 xxxiaodi 的回复：[quote=引用 3 楼 qinjiankai的回复:]第二张图的b指向的是常量区内存（“you are ****……”这个是常量），那个地方的内存你能动吗。。第一张图上的b是在栈上，你动得了它 对对对，刚刚知道了这个问题(҂⌣̀_⌣́)对这种内存啥的不是很明白，谢谢回答(*°∀°)=3[/quote]没事没事，给分吧哈哈哈

user: user-2
content: 你好，我也是一个新手，我看了看，觉得代码是没有问题的，可能是不是编译器出了问题？

user: user-0
content: 救一下孩子吧……………
user-0 提问: c语言，大神帮忙解释一下

回复:
user: user-1
content: “ABCD”。实际存储的是 {'A',   'B',     'C',    'D',   '\0'.   }                                         p    p+1     p+2  p+3.  p+4

user: user-1
content: 0 字符串是以数字0结尾的 p+4指向的就是这个尾巴
user-0 提问: 求大佬的帮助!!!

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 课设？谁没事帮你写这一大堆东西啊哥们。你可以自己写，不懂的地方再来问的
user-0 提问: 求助大佬，想知道图一思考题怎么写，图二怎么写

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html
user-0 提问: vs编写的贪食蛇项目中Dubug文件夹中的.exe文件复制出来的文件直接就能用，绿色版的？

回复:
user: user-1
content: 可以的吧，太久没用了，记得之前写过表白的窗口是直接用的，但是哪个文件夹里的就不知道了。.exe是编译运行生成的可执行文件，只要环境是常规环境即就可以用

user: user-0
content: 我都不用正式生成一个.exe，就从debug文件夹里复制出来就行了？

user: user-2
content: 有可能需要一些dll

user: user-3
content: 还签名？ 你想多了 这个不是ios或者android开发 windows的应用是有比较复杂的，但是呢你自己的那个简单的很， 估计外部dll，什么系统组件之类的都没有，一个exe文件就可以满天飞了
user-0 提问: 为什么vs会提示字节错误？

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-0
content: 引用 2 楼 寻开心的回复:vs2019 默认的应该是c++17的标准吧。 对于一些可能存在问题的代码都提出警告。 这些警告不是必须要解决的。 okk，原来是这样，好的谢谢大佬！

user: user-2
content: vs2019 默认的应该是c++17的标准吧。 对于一些可能存在问题的代码都提出警告。 这些警告不是必须要解决的。

user: user-2
content: 代码没有问题 可能是工程设置的问题，或者vs抽风 这些警告也不算错误，可以不搭理它。
user-0 提问: c语言，大神帮忙解释一下

回复:
user: user-1
content: 逻辑表达式的结果只有0，1两种，BD直接排除的  3<2 不成立， 不影响|| 后面的判断 -1不是0，就等同于true，所以不影响&&后面的判断 4>3-!0  !0 就是1， 3-1=2 ， 4>2 成立  所以答案是a
user-0 提问: 数据结构c语言版题，哪位大佬能给解释一下

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 16/(16+4)=80%

user: user-3
content: 看书，看定义， 最最基础的 真的没有什么可说的  时间复杂度是怎么算的？ 存储密度是怎么定义的？ 你只要看了书， 这个都有答案， 而且是最最基础的  所以，不打算回答这个问题了。  逼你自己看书。

user: user-0
content: 引用 1 楼 寻开心的回复:O（n） 80% 时间复杂度怎么算，还有下面那个存储密度怎么算

user: user-0
content: 引用 1 楼 寻开心的回复:O（n） 80% 怎么算的，能教教我嘛

user: user-3
content: O（n） 80%
user-0 提问: 数据结构c语言版题，哪位大佬能给解释一下

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html
user-0 提问: C语言输入两位小数和三位小数，如何原封不动输出它们

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-0
content: 引用 6 楼 寻开心的回复:printf("%g %g", 1.3, 1.25 ); 好的好的，谢谢了

user: user-2
content: printf("%g %g", 1.3, 1.25 );

user: user-2
content: %g 指定是可以的

user: user-0
content: 引用 3 楼 寻开心的回复:你要只求一样，当字符串输入输出好啦。 好吧，，其实我这个代码前面是比较输入的小数大小，然后输出它们，没有其他办法了吗

user: user-2
content: 你要只求一样，当字符串输入输出好啦。

user: user-0
content: 引用 1 楼 寻开心的回复:printf的时候指定 %.2f 和 %.3f就好了 如果输入的顺序和元素的个数不是固定的呢

user: user-2
content: printf的时候指定 %.2f 和 %.3f就好了