Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: C语言，小白请教各位大神…

回复:
user: user-1
content: vs2015,中的编译库才是正确的、平板上编译器不标准

user: user-2
content: 第一个是赋值表达式，输出的是真假，非0为真。

user: user-3
content: 之前写错了，答案合适呢 [图片]

user: user-3
content: 应该是10,1,0,1

user: user-4
content: 003F18E3  mov         edx,dword ptr [ebp-0ECh]   003F18E9  push        edx   003F18EA  mov         eax,dword ptr [ebp-0F0h]   003F18F0  push        eax   003F18F1  mov         ecx,dword ptr [x]   003F18F4  push        ecx   003F18F5  mov         edx,dword ptr [x]   003F18F8  push        edx   003F18F9  push        offset string "%d,%d,%d,%d\n" (03F7B30h)   003F18FE  call        _printf (03F104Bh)   003F1903  add         esp,14h   这一部分是调用printf函数对应的汇编，可以看到push了四个值，以及一个字符串进去，这里的四个值里面的后面两个push都是[x]，也就是都是推入的x的值，而x在经过前面的计算后，值是30，所以入栈的四个值就是0，0，30，30

user: user-4
content: VS2017，结果是30，30，0，0，我用汇编调试了一下，发现是这样的，printf()，这个语句，先是计算后面四个算式，而且从右往左计算，第三个和第四个好理解，结果就是0，第二个式子的结果不重要，重要的是，经过这个计算后，printf里面对应的第二个%d对应的值是在x这个变量里面，注意，这个时候，x=1，但是并没有将这个结果1显示出来；然后，计算第一个式子，结果是x=30，同时printf里面对应的第一个%d对应的值也是是在x中国变量里面。 计算完成后是显示过程，在调用pritf函数的时候，传入的四个%d对应的值，就是0，0，x的值，x的值(右往左传递)，所以，对应显示到屏幕上，就是30，30，0，0.

user: user-5
content: 这种未定义的行为就不应该出现

user: user-6
content: 这个是我自己的理解，要是你查到了更权威的解释，麻烦分享给我， 我用的是VS2017，运行结果是30,30,0,0 我测试了一下，有一种解释：不同编译器，编译器版本不同，它们的prinf（）的计算和打印的顺序不同。 我看前面的好像有4种答案：30,1,0,1；1,1,0,1；30,30,0,0；30,1,0,0。 ①30,1,0,1 这个应该是心里算的答案，从左往右，计算一个打印一个。（可以想象成计算完后放入了某个空间，后面的计算会修改变量的值，但没有修改放在这里准备打印的值） ②1,1,0,1 这个应该是从左往右计算完每个表达式（30,1,0,1），然后从右往左打印，打印完后面三个后x=y==z把x改成了1，再打印第一个的时候，x被改成了1.所以打印出了1。 ③30,30,0,0 这个应该是从右往左计算完每个表达式（30,1,0,0），然后从左往右打印，计算完后第一个表达式x=y=z把x改成了30,打印到x=(y==z)时，x就成了30。 ④30,1,0,0 这个应该是从右往左计算，计算一个打印一个。

user: user-7
content: 看不明白  太深了 ~

user: user-8
content: 这种应该类似i=i++这种，不同编译器处理方式不同，应量避免使用

user: user-9
content: 这个太专业了

user: user-10
content: 应该是判断吧

user: user-11
content: 不会是敲错了吧

user: user-12
content: 从左向右是30 1 0 1  从右向左是30 30 0 0

user: user-0
content: 引用 6 楼 hitzsf的回复:vs2017，cb 都是：30,30,0,0 编译器的问题？我第一次在平板上用mobie C编译运行真的是1 1 0 1，然后后来用dev c++ 5.11在电脑上试了一次，是 30 30 0 0；但是还是不懂为什么第二个运行结果也是30，关系运算符==优先级不是应该高于赋值运算符吗？那x=y==z为什么会等于30呢？

user: user-13
content: vs2017，cb 都是：30,30,0,0

user: user-14
content: 仔细检查你的代码和题目一样吗

user: user-15
content: 答案错了吧，不管从函数从右往左还是从左往右传参数，x=y=z的结果都是30啊，因为执行这个表达式之前z都没变过。

user: user-0
content: 引用 1 楼 focuslight的回复:VS 下运行结果是 30,1,0,0  printf 从右向左运算 但是我用软件运行的结果是：1，1，0，1；很纳闷为啥呀

user: user-0
content: 但是我用软件运行的结果是：1，1，0，1；很纳闷为啥呀
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: 不知这个题目来源于哪，题干的叙述个人认为很不C/C++。C/C++中个人认为不存在所谓“子函数”的概念，更别提多少层子函数。C/C++中所有的函数是平行的，不存在嵌套定义的函数。当然，国内有C/C++的书中有“子函数”的提法，但本人不愿接受。 仅个人观点，不争论，不讨论。

user: user-3
content: 从1到100累加求和，用函数表示，计算机程序

user: user-4
content: 楼主描述中的“第一层”和“第二层”是什么意思？

user: user-5
content: 引用 3 楼 qq_44826458 的回复:谢谢，这个程序和我的问题有出出，不对哦 不知道你回答的哪个人，我的测试结果是如题意的，有可能是你自己阐述出错

user: user-6
content: #include <stdio.h> float addition(int x); float division (int i); int main(int argc, char *argv[]) {     int num;     printf("请输入一个整数：\r\n");     scanf("%d", &num);     printf("%f\r\n", addition(num));     getchar();     return 0; } float addition(int x) {     int i;     float sum = 0.0;     for(i = 1; i <= x; i += 2)     {         sum += division(i);         printf("sum=%f\n", sum);     }     return sum; } float division (int i) {     static x = 1;     if (x == 1)     {         x = 0;         return 1.0 / i;     }     else     {         x = 1;         return -(1.0 / i);      } }

user: user-0
content: 谢谢，这个程序和我的问题有出出，不对哦

user: user-7
content: #include <stdio.h> double div (int i) { 	return 1.0 / ( 2 * i - 1 ); } double total (int n) { 	double sum = 0; 	int sign = 1; 	for ( int i = 1; i <= n; i++, sign *= -1 ) { 		sum += div (i)*sign; 	}//end for 	return sum; } main ( ) { 	int x = 100; 	double result; 	result = total (x); 	printf ("%lf\n", result); }

user: user-5
content: #include "stdio.h" int main( void ) { 	int x=0, i=0 , flag=1; 	double sum=0; 	scanf("%d",&x); 	for( i=1 ; i<=x ; i++ ) 	{ 		sum+=flag * (1.0/(2*i-1)); 		flag=-flag; 	} 	printf("%g",sum); 	return 0;	 }
user-0 提问: A+B问题

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

user: user-2
content: 如果是求n个数的和，你的程序是可以的，只是输入数字的时候，数字之间应是空格而不能用逗号

user: user-3
content: scanf("%d %d",&a, &b); printf("%d", a+b);

user: user-4
content: 你写的是平均值呀  题目没要求多次输出数据  n是多余的
user-0 提问: C语言for循环失效，什么问题，怎么解决？

回复:
user: user-0
content: 引用 1 楼 user-1的回复:if(flag==1)	 {	 printf("%d%c%d=%d\n",x,op,y,z);	 break;	 }	 --> if(flag==1)	 {	 printf("%d%c%d=%d\n",x,op,y,z);	 //break;	 }	  你这里的break直接跳出for循环了，还有op=getchar()后最好再加上一个getchar()吸收回车符。 记得结贴：） 谢谢！你的答案回答到点子上了，非常有用

user: user-1
content: if(flag==1)	 {	 printf("%d%c%d=%d\n",x,op,y,z);	 break;	 }	 --> if(flag==1)	 {	 printf("%d%c%d=%d\n",x,op,y,z);	 //break;	 }	  你这里的break直接跳出for循环了，还有op=getchar()后最好再加上一个getchar()吸收回车符。 记得结贴：）
user-0 提问: 翻牌问题

回复:
user: user-1
content: 仅供参考，输入输出需要按照题设要求改改： #include <stdio.h> #include <stdlib.h>  typedef struct tag_list_node {     void *next;     int num; }list_node_s;  void display_list(list_node_s* head) {          if (NULL == head)     {         return;     }          list_node_s *cur = head;     printf("list member:");     while(cur != NULL)     {         printf(" %d", cur->num);         cur = cur->next;     }     printf("\n"); }  list_node_s* init_list(int num) {     list_node_s *head;     list_node_s *cur;     list_node_s *next;     int i;          head = (list_node_s *)malloc(sizeof(list_node_s));     head->num = 1;     head->next = NULL;          cur = head;     for (i = 2; i <= num; i++)     {         next = (list_node_s *)malloc(sizeof(list_node_s));         next->num = i;         cur->next = next;         cur = next;     }          cur->next = NULL;      display_list(head);      return head;     }   list_node_s* remove_node_from_list_head(list_node_s* head) {     if (NULL == head || NULL == head->next)     {         return NULL;     }          list_node_s *new_head = head->next;     free(head);     return new_head; }  void insert_node_from_list_tail(list_node_s* head, int num) {     list_node_s *cur = head;     list_node_s *node;          while (cur->next != NULL)     {         cur = cur->next;     }          node = (list_node_s *)malloc(sizeof(list_node_s));     node->num = num;     node->next = NULL;     cur->next = node; }  int list_proc(list_node_s* head) {     list_node_s *cur_head = head;          while (cur_head->next != NULL)     {         cur_head = remove_node_from_list_head(cur_head);         insert_node_from_list_tail(cur_head, cur_head->num);         cur_head = remove_node_from_list_head(cur_head);         display_list(cur_head);     }          return cur_head->num; }  int main() {     list_node_s *head;     int num;     int last_num;          scanf("%d", &num);     head = init_list(num);     last_num = list_proc(head);     printf("%d\n", last_num);          return 0; }

user: user-1
content: 不难吧，用个链表数据结构就能做啊

user: user-2
content: #include <stdio.h>  int main() {   int T, n, x, y;    scanf("%d", &T);   while (T--)   {     scanf("%d", &n);     if (y = 0, (x = n) == 1) puts("1");     else     {       while (x > (1 << y)) x -= (1 << y++);       printf("%d\n", x != 1 ? (x - 1) * 2 : n);     }   }    return 0; }

user: user-2
content: 这题可以直接计算：
user-0 提问: 如何解决两个头文件中函数名相同问题？

回复:
user: user-1
content: 限定文件作用域

user: user-2
content: 改名最稳妥.

user: user-3
content: C++用命令空间解决，C语言应该搞不定，编译都会有问题。

user: user-4
content: static限定为文件作用域，定义两个指针，通过指针调用函数。

user: user-5
content: 基本上只能改名字,让它们不一样 C语言里面也没命名空间的概念 当然可以强行用c++来编译

user: user-6
content: 要么改了其中一个文件里的函数名，两个文件对外的接口如果是相同的函数名那么肯定是不行的。如果两个函数名一样，但是一个对内，一个对外，那么对内的可以加上static，头文件里就不要声明对内的函数了。
user-0 提问: 大神帮忙

回复:
user: user-1
content: 看看运算符优先级

user: user-2
content: 引用 1 楼 focuslight 的回复:if((p=fopen("f:\\aa\\w1.txt", w))==NULL)  改成这样试试 不要乱教啊，，，，，

user: user-1
content: if((p=fopen("f:\\aa\\w1.txt", w))==NULL)  改成这样试试
user-0 提问: 我的服务端和客户端怎么了

回复:
user: user-0
content: 引用 2 楼 user-2的回复:贴源码出来，我跑下试试 应该是send里面strlen的问题

user: user-0
content: 引用 3 楼 自信男孩的回复:客户端send函数里，为什么send的长度是sizeof(sendBuf) + 1个长度，应该是strlen(sendBuf) + 1吧 对对对，我蠢了，谢谢老哥

user: user-1
content: sizeof(sendBuf)+1，发送的字节数到对端已经越界了，看到你的服务器接收也是128个字节，但是客户端发了129个字节。

user: user-1
content: 客户端send函数里，为什么send的长度是sizeof(sendBuf) + 1个长度，应该是strlen(sendBuf) + 1吧

user: user-2
content: 贴源码出来，我跑下试试

user: user-0
content: 呜呜呜呜，我给你们劈个叉，你们救救我吧
user-0 提问: 控件是子窗口吗？为什么QQ的搜索栏或按钮没有窗口句柄？

回复:
user: user-1
content: 引用 6 楼 六道佩恩 的回复:[quote=引用 5 楼 stherix 的回复:] QQ的控件基本是自绘的 也就是非win控件,没有句柄的 但是QQ留了一个IAccessible接口用于获取 https://www.cnblogs.com/SadlyCodes/p/3472406.html 是用的windows自带的那些绘图函数吗？[/quote]  这个不清楚 GDI+,opengl,directx都有可能

user: user-0
content: 引用 5 楼 stherix 的回复:QQ的控件基本是自绘的 也就是非win控件,没有句柄的 但是QQ留了一个IAccessible接口用于获取 https://www.cnblogs.com/SadlyCodes/p/3472406.html 是用的windows自带的那些绘图函数吗？

user: user-1
content: QQ的控件基本是自绘的 也就是非win控件,没有句柄的 但是QQ留了一个IAccessible接口用于获取 https://www.cnblogs.com/SadlyCodes/p/3472406.html

user: user-2
content: 引用 3 楼 六道佩恩 的回复:[quote=引用 2 楼 zuoziyang521 的回复:]  请问楼主还有下载tanzhou---js视频嘛，同求方便的话请加QQ754925743，谢谢，借贴回复，实属抱歉 https://pan.baidu.com/s/1IMZ1OtgjqIMa0-elNYgiYw am32[/quote] 谢谢博主

user: user-1
content: 引用 8 楼 六道佩恩 的回复:[quote=引用 7 楼 stherix 的回复:] [quote=引用 6 楼 六道佩恩 的回复:] [quote=引用 5 楼 stherix 的回复:] QQ的控件基本是自绘的 也就是非win控件,没有句柄的 但是QQ留了一个IAccessible接口用于获取 https://www.cnblogs.com/SadlyCodes/p/3472406.html 是用的windows自带的那些绘图函数吗？[/quote]  这个不清楚 GDI+,opengl,directx都有可能[/quote] 理论上这些库不都是调用Win API实现的吗？[/quote] opengl,directx 这个应该不算win api

user: user-0
content: 引用 7 楼 stherix 的回复:[quote=引用 6 楼 六道佩恩 的回复:] [quote=引用 5 楼 stherix 的回复:] QQ的控件基本是自绘的 也就是非win控件,没有句柄的 但是QQ留了一个IAccessible接口用于获取 https://www.cnblogs.com/SadlyCodes/p/3472406.html 是用的windows自带的那些绘图函数吗？[/quote]  这个不清楚 GDI+,opengl,directx都有可能[/quote] 理论上这些库不都是调用Win API实现的吗？

user: user-0
content: 引用 2 楼 zuoziyang521 的回复: 请问楼主还有下载tanzhou---js视频嘛，同求方便的话请加QQ754925743，谢谢，借贴回复，实属抱歉 https://pan.baidu.com/s/1IMZ1OtgjqIMa0-elNYgiYw am32

user: user-2
content: 请问楼主还有下载tanzhou---js视频嘛，同求方便的话请加QQ754925743，谢谢，借贴回复，实属抱歉

user: user-3
content: 纯自绘也未尝不可。
user-0 提问: 两台电脑用+Ubantu显示不同路由

回复:
user: user-0
content: 引用 3 楼 user-1_16_com 的回复:你的虚拟机网段跟PC都处于同一个网段的话，可以关闭PC机的防火墙试试。 桥接之后没有设置成同一个IP。。。。

user: user-0
content: 是否需要一个交换机 还是把笔记本再插一根网线？

user: user-1
content: 你的虚拟机网段跟PC都处于同一个网段的话，可以关闭PC机的防火墙试试。

user: user-0
content: 看IP地址的话都是192.168.15.2网段的 但是两台设备在Ubantu里面就是ping不通 相互连接的时候显示不在同一个路由
user-0 提问: C语言，堆排序的代码运行显示“heapsort”: 找不到标识符，是什么问题？

回复:
user: user-1
content: 先声明后使用 或者把被调用函数放在调用函数之前

user: user-2
content: #include <stdio.h> #include<stdlib.h>  #define N 14 typedef int KeyType; typedef int InfoType; typedef int SeqList;  typedef struct {     KeyType key;     InfoType otherinfo; }RecType;  void build_max_heap(RecType  R[],int n);  //建大根堆算法 void heapsort(RecType  R[], int n);   //堆排序的算法 //void main() int main() {     int i,n;     RecType R[N];     printf("请输入将要排序元素的个数:");     scanf("%d", &n);     printf("\n");     for(i=0; i < n; i++)     {         printf("请输入第%d个数为：",i+1);         scanf("%d",&R[i].key);         scanf("%d",&R[i].otherinfo);     }     printf("排序前的数据:\n");  //打印排序前的数据     for (int i = 0; i < n; i++)     {         printf("%d ",R[i].key);         printf("%d ",R[i].otherinfo);     }     heapsort(R, n);     printf("\n排序后的数据:\n"); //打印排序后的数据     for (i = 0;i < n;i++) {         printf("%d  ",R[i].key);         printf("%d  ",R[i].otherinfo);     }     printf("\n");     system("pause"); } void max_heapify(RecType  R[],int k,int m)             //用筛选法调整堆 {     RecType t;     int i,j,x;      t=R[k];     x=R[k].key;     i=k;     j=2*i;     while(j<=m)     {         if (j<m && R[j].key<R[j+1].key)             j=j+1;         if(x<R[j].key)         {             R[i]=R[j];             i=j;             j=2*i;         }         else             break;     }     R[i]=t;  } void build_max_heap(RecType  R[],int n)  //建大根堆算法 {     int i;      for (i = n/2;i >= 1;i--)         max_heapify(R,i,n); }  void heapsort(RecType  R[], int n)   //堆排序的算法 {      //int i,n;     int i;      build_max_heap(R,n);     for (i = n;i >1;i--)     {         R[0] = R[1];         R[1] = R[i];         R[i] = R[0];         max_heapify(R,1,i-1);     } } 供参考！  解决了大部分问题，但是你的算法有问题（为仔细看，没有解决），建议你还是在梳理一下算法 但从这个error描述来讲，就是没有在调用前声明该函数导致的。把函数声明放到main函数前就可以了。 但是有个其他问题，你见过scanf输入一个结构体的吗？  heapsort中n是局部变量，并且是一个随机值，直接传到build_max_heap(R,n);里，肯定会导致越界。
user-0 提问: 关于进栈问题的提问

回复:
user: user-1
content: 这个栈中节点有两个元素，一个是该元素的值，一个是指向下一个值的地址，方便找到下一个元素。这里s->next应该是空，null。表示这个是栈的最后一个元素temp->next=s->next和前一行是设置这个要插入进去的元素的值和他的下一个元素的地址，s->next=temp是将temp链接到栈后面，s的下一个元素指向的是temp表示插入了一个元素。

user: user-2
content: 链表的定义中，Next的属性就是本身Stack, 所以s-Next=Temp,是指将新增的Temp链到S后面去。

user: user-3
content: 这是在链表队列的末尾再添加一个元素
user-0 提问: 各位大神，小弟又有一个关于结构体指针强转的问题想要请教一下

回复:
user: user-0
content: 引用 7 楼 lin5161678 的回复:[quote=引用 6 楼 ze_hit 的回复:] [quote=引用 5 楼 lin5161678 的回复:] 你的顾虑的确是合理的 的确可能存在因为不对齐造成错误的可能性  所以 那段代码 要么就是通过其他手法设置了对齐  比如pack(4) 而你没注意 要么就是只能部署到特定平台  谢谢您的回答，我还有一个问题想请教一下。如果上面的代码中，假设buff是发送缓冲区，我对B结构体指针不使用强制转换，而是采用以下方式：  B bs; bs.b1... ; bs.b2...;     //填写和修改bs memcpy(buff + sizeof(A), &bs, sizeof(B)); XXXXXXXX buff;     //将buff发送给接收方  而在接收方，也不采用直接强制转换的方式取出结构体的内容，而是采用下面的方式：  char recv[1024] = {0};   //定义接收缓冲区 XXXXXXXX recv；  //  将数据接收到缓冲区中 B rs； memcpy(&B, recv + sizeof(A), sizeof(B)); rs.b1...; rs.b2...;    //读取接收到的B结构体内容  使用这种方式是不是就可以从根本上解决我之前提出的问题，从而实现无需指定对齐方式的情况下跨平台移植呢？[/quote]  单纯讨论 写入缓冲区 和 从缓冲区读数据  的确从解决之前的问题(内存没对齐) 实现跨平台 但需要注意 因为跨平台 你发送和接受的环境中 sizeof(A) 不保证一样大 同理sizeof(B) 也不保证一样大 略有瑕疵[/quote] 谢谢您，是我表述有误，我本意是指发送和接收方具有相同平台，而这段代码在不同平台上跑。

user: user-1
content: 引用 6 楼 ze_hit 的回复:[quote=引用 5 楼 lin5161678 的回复:] 你的顾虑的确是合理的 的确可能存在因为不对齐造成错误的可能性  所以 那段代码 要么就是通过其他手法设置了对齐  比如pack(4) 而你没注意 要么就是只能部署到特定平台  谢谢您的回答，我还有一个问题想请教一下。如果上面的代码中，假设buff是发送缓冲区，我对B结构体指针不使用强制转换，而是采用以下方式：  B bs; bs.b1... ; bs.b2...;     //填写和修改bs memcpy(buff + sizeof(A), &bs, sizeof(B)); XXXXXXXX buff;     //将buff发送给接收方  而在接收方，也不采用直接强制转换的方式取出结构体的内容，而是采用下面的方式：  char recv[1024] = {0};   //定义接收缓冲区 XXXXXXXX recv；  //  将数据接收到缓冲区中 B rs； memcpy(&B, recv + sizeof(A), sizeof(B)); rs.b1...; rs.b2...;    //读取接收到的B结构体内容  使用这种方式是不是就可以从根本上解决我之前提出的问题，从而实现无需指定对齐方式的情况下跨平台移植呢？[/quote]  单纯讨论 写入缓冲区 和 从缓冲区读数据  的确从解决之前的问题(内存没对齐) 实现跨平台 但需要注意 因为跨平台 你发送和接受的环境中 sizeof(A) 不保证一样大 同理sizeof(B) 也不保证一样大 略有瑕疵

user: user-0
content: 引用 5 楼 lin5161678 的回复:你的顾虑的确是合理的 的确可能存在因为不对齐造成错误的可能性  所以 那段代码 要么就是通过其他手法设置了对齐  比如pack(4) 而你没注意 要么就是只能部署到特定平台  谢谢您的回答，我还有一个问题想请教一下。如果上面的代码中，假设buff是发送缓冲区，我对B结构体指针不使用强制转换，而是采用以下方式：  B bs; bs.b1... ; bs.b2...;     //填写和修改bs memcpy(buff + sizeof(A), &bs, sizeof(B)); XXXXXXXX buff;     //将buff发送给接收方  而在接收方，也不采用直接强制转换的方式取出结构体的内容，而是采用下面的方式：  char recv[1024] = {0};   //定义接收缓冲区 XXXXXXXX recv；  //  将数据接收到缓冲区中 B rs； memcpy(&B, recv + sizeof(A), sizeof(B)); rs.b1...; rs.b2...;    //读取接收到的B结构体内容  使用这种方式是不是就可以从根本上解决我之前提出的问题，从而实现无需指定对齐方式的情况下跨平台移植呢？

user: user-1
content: 你的顾虑的确是合理的 的确可能存在因为不对齐造成错误的可能性  所以 那段代码 要么就是通过其他手法设置了对齐  比如pack(4) 而你没注意 要么就是只能部署到特定平台

user: user-2
content: `B* b = (B*) (buff +sizeof(A));`感觉这种写法与`B* b = p`这个写法并没有什么不同，个人理解是4字节对齐可能是快一点，但是这种告诉你一个不是4字节对齐的地址，也会按照字节序得到想要数据的

user: user-0
content: 引用 1 楼 user-4 的回复:这样访问根本不会有问题，只是这么写的话对性能会有点影响罢了。 如果要避免这种问题，直接用4字节对齐的方式不就好了？  在x86上我试过，确实不会出错，但是好像ARM和SPARC非对齐访问是不允许的吧！

user: user-3
content: 可以对A强制4字节对齐，pack(4)

user: user-4
content: 这样访问根本不会有问题，只是这么写的话对性能会有点影响罢了。 如果要避免这种问题，直接用4字节对齐的方式不就好了？
user-0 提问: 关于运算符优先级的问题。

回复:
user: user-1
content: 引用 1 楼 下雨听风人的回复:在表达式b = !(x+1>0)&&y++||++z;中 优先级排序如下 () ++ ! + > && || = ++既然比逻辑与的优先级要高，为什么输出显示y的自增并没有运行呢？ y的结果为0. 因为!(x+1)为0不会在进行&后面的做算了 相当于!(x+1)｜|++z

user: user-2
content: 如果不确定优先级，建议用括号来确定你想要的优先级。

user: user-0
content: b = !(x+1>0)&&y++||++z; 我感觉可能是这样  这里既然赋值的优先级最低  那么久限制性赋值的右侧表达式 右侧表达式中||的优先级最低  那就先看 ||的左侧表达式  左侧中逻辑与的优先级最低 那就先看 逻辑与的表达式 不知道这么想对不对

user: user-3
content: 优先级保证的是执行!(x+1>0)&&(y++)，而不是执行(!(x+1>0)&&y)++ 并不是一条语句里的++必须都在&&之前执行

user: user-4
content: 优先级高 不等于先算 计算顺序和优先级无关

user: user-0
content: 在表达式b = !(x+1>0)&&y++||++z;中 优先级排序如下 () ++ ! + > && || = ++既然比逻辑与的优先级要高，为什么输出显示y的自增并没有运行呢？ y的结果为0.
user-0 提问: 求救！C语言函数如何返回指向空数组的指针？

回复:
user: user-1
content: 为什么要这么做呢？ 这个题目完全不需要啊。

user: user-2
content: 空数组是指什么？是指数组内容为空，还是一个没有长度的数组？

user: user-3
content: 返回NULL不就好了，C++都不支持不占内存的数组

user: user-4
content: 直接返回NULL不就行了 为什么一定要返回一个空数组指针呢
user-0 提问: C语言数据结构栈删除操作疑惑

回复:
user: user-1
content: 要看你的入栈是先动指针还是先动数据了，因此需要看一下你的入栈和初始化栈的操作

user: user-2
content: 引用 4 楼 xyz-x的回复:我用#CSDN#这个app发现了有技术含量的博客，小伙伴们求同去《c++实现栈》, 一起来围观吧 https://blog.csdn.net/xyzbaihaiping/article/details/51125005  可以看看这个 看下那个图*top不是栈顶的那个元素，*--top才是，top为了方便入栈 发的是c++的，博主有c语言的应该，我有点忘记了

user: user-2
content: 我用#CSDN#这个app发现了有技术含量的博客，小伙伴们求同去《c++实现栈》, 一起来围观吧 https://blog.csdn.net/xyzbaihaiping/article/details/51125005  可以看看这个 看下那个图*top不是栈顶的那个元素，*--top才是，top为了方便入栈

user: user-3
content: 要看數據結構和入棧操作，看起來可能這個top只是用於做入口索引，不存儲數據。

user: user-4
content: 要看你的push函数是怎么实现的，可能是因为压数据的时候s.top指定并不是指向当前数据，而是需要先位移一下则是当前pop的数据。

user: user-5
content: top不是栈顶数据，而是栈顶数据的上一个
user-0 提问: 求助：C语言实现

回复:
user: user-0
content: 请问出现了一堆这个提示： undefined reference to `CreateCompatibleDC@4' 是怎么回事，我用的是DEV C++，没搞懂是环境的问题吗？

user: user-1
content: 仅供参考：#pragma comment(lib,"gdi32") #include <windows.h> #include <stdio.h>  int main() {     const DWORD uWidth = 18 + 17 * 256, uHeight = 18 + 17 * 128;      PBITMAPINFO pbmi = (PBITMAPINFO) LocalAlloc (LPTR, sizeof (BITMAPINFOHEADER) + sizeof (RGBQUAD) * 2);     pbmi->bmiHeader.biSize = sizeof (BITMAPINFOHEADER);     pbmi->bmiHeader.biWidth = uWidth;     pbmi->bmiHeader.biHeight = uHeight;     pbmi->bmiHeader.biPlanes = 1;     pbmi->bmiHeader.biBitCount = 1;     pbmi->bmiHeader.biSizeImage = ((uWidth + 31) & ~31) / 8 * uHeight;     pbmi->bmiColors[0].rgbBlue = 0;     pbmi->bmiColors[0].rgbGreen = 0;     pbmi->bmiColors[0].rgbRed = 0;     pbmi->bmiColors[1].rgbBlue = 255;     pbmi->bmiColors[1].rgbGreen = 255;     pbmi->bmiColors[1].rgbRed = 255;      HDC hDC = CreateCompatibleDC (0);     void * pvBits;     HBITMAP hBitmap = CreateDIBSection (hDC, pbmi, 0, &pvBits, NULL, 0);     SelectObject (hDC, hBitmap);     HFONT hFont = CreateFont (16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "宋体"); //  HFONT hFont = CreateFont (16, 0, 0, 0, 0, 0, 0, 0, SHIFTJIS_CHARSET, 0, 0, 0, 0, "宋体");     SelectObject (hDC, hFont);     BitBlt (hDC, 0, 0, uWidth, uHeight, NULL, 0, 0, WHITENESS);      char c[4];     int i, j;     for (i = 128; i < 256; i++) {         sprintf (c, "%02X", i);         TextOut (hDC, 1, (i - 127) * 17 + 1, c, 2);     }     for (j = 0; j < 256; j++) {         sprintf (c, "%02X", j);         TextOut (hDC, (j + 1)* 17 + 1, 1, c, 2);     }     for (i = 128; i < 256; i++) {         for (j = 0; j < 256; j++) {             c[0] = (char) i;             c[1] = (char) j;             TextOut (hDC, (j + 1) * 17 + 1, (i - 127) * 17 + 1, c, 2);         }     }     for (i = 0; i < 130; i++) {         MoveToEx (hDC, 0, i * 17, NULL);         LineTo (hDC, uWidth, i * 17);     }     for (j = 0; j < 258; j++) {         MoveToEx (hDC, j * 17, 0, NULL);         LineTo (hDC, j * 17, uHeight);     }      BITMAPFILEHEADER bmfh;     bmfh.bfType = *(PWORD) "BM";     bmfh.bfReserved1 = 0;     bmfh.bfReserved2 = 0;     bmfh.bfOffBits = sizeof (BITMAPFILEHEADER) + sizeof (BITMAPINFOHEADER) + sizeof (RGBQUAD) * 2;     bmfh.bfSize = bmfh.bfOffBits + pbmi->bmiHeader.biSizeImage;      HANDLE hFile = CreateFile ("goal.bmp", GENERIC_WRITE, 0, 0, CREATE_ALWAYS, 0, 0);     if (hFile != INVALID_HANDLE_VALUE) {         DWORD dwWritten;         WriteFile (hFile, &bmfh, sizeof (BITMAPFILEHEADER), &dwWritten, NULL);         WriteFile (hFile, pbmi, sizeof (BITMAPINFOHEADER) + sizeof (RGBQUAD) * 2, &dwWritten, NULL);         WriteFile (hFile, pvBits, pbmi->bmiHeader.biSizeImage, &dwWritten, NULL);          CloseHandle (hFile);     }      DeleteObject (hFont);     DeleteObject (hBitmap);     DeleteDC (hDC);     LocalFree (pbmi);      return 0; }
user-0 提问: c基础题，萌新在线等，挺急的

回复:
user: user-0
content: 就这两题。。 实在没思路了 接触c才两个月

user: user-0
content: 再来一题  编写程序，用指向一维数组的指针变量p实现对二维数组b中各元素的输入和输出。（输出用指针变量的多种表现形式进行数组元素的多次输出。）
user-0 提问: c语言小白求问

回复:
user: user-0
content: 是想用二分法求零到六上这个函数的根，精确到0.000001 输入零和六以后输出结果不正确...

user: user-1
content: #include<stdio.h>  //void main(void) int main(void) {     double x1,x2,f1,f2,x,f,t=0;      printf("请输入区间范围");     scanf("%lf%lf",&x1,&x2);     f1 = x1*x1*x1-7*x1-1;     f2 = x2*x2*x2-7*x2-1;     do     {         if(f1*f2 > 0) {             printf("此区间没有根，请重新输入");             break;         }         else         {             x=(x2+x1)/2;             f=x*x*x-7*x-1;         }         if(f*f1>0)         {             x1=x;             f1=f;         }         else         {             x2=x;             f2=f;         }         t = t+1;     } while(0.000001>x2-x1);     printf("该区间上有根%lf,二分次数为%lf",x,t); }  供参考！  建议贴出测试用例，以及预想的结果。 主要是通过你的代码看不出算法是什么
user-0 提问: c语言该怎么学

回复:
user: user-1
content: 首先你得配好环境建议使用虚拟机＋Ubantu 然后你得会基础语法 最后你得多练习

user: user-2
content: 引用 3 楼 冷风1023的回复:第一步、打开书本 第二步、看书学习 第三步、在机器上练习 第四步、总结 第五步、做项目 以上一直要while(1)循环，直到你放弃这门语言 太真实了8，，，，，

user: user-3
content: 第一步、打开书本 第二步、看书学习 第三步、在机器上练习 第四步、总结 第五步、做项目 以上一直要while(1)循环，直到你放弃这门语言

user: user-0
content: 用编译器多练习
user-0 提问: 求大佬解惑

回复:
user: user-1
content: 用单步调试啊。想做一个合格的程序员，单步调试是必须的！

user: user-2
content: 漫漫逐步调试。

user: user-3
content: 闪退说明你程序挂了，调试的时候会自动挂到问题发生点的
user-0 提问: 求助

回复:
user: user-1
content: dsw只是工程文件,里面没有代码的 如果没有.c .cpp这样的代码文件,也只是一个空壳而已  另外,现在还有在用VC6的吗? 真是老古董的老师去教一堆懵懂的学生

user: user-2
content: 强行改文件后缀试试？

user: user-0
content: 救救孩子吧(我都快绝望了……)

user: user-0
content: 谢谢解答的朋友，我已经重打了(-ι_- )
user-0 提问: 记事本编辑文字的部分是子窗口还是控件?

回复:
user: user-1
content: 引用 8 楼 六道佩恩 的回复:额，“窗口也属于控件”这个说法我还从没见到过，刚搜了下没搜到，之前Microsoft查阅控件的说明好像也没看到这个说法，请问这个说法是怎么来的？ 没见过就去见见  不要全靠搜索 看看书 比如 Windows程序设计

user: user-1
content: 控件本身就是一个窗体

user: user-2
content: 既是子窗口，也是控件。

user: user-0
content: 引用 7 楼 Simple-Soft 的回复:[quote=引用 6 楼 六道佩恩 的回复:] [quote=引用 2 楼 Simple-Soft 的回复:] 你可以用spy++查看，vc自带的，可以看出那个控件的类型和名字，肯定是应该是texybox 类名是Edit，无标题，仅根据这一点能区分控件和窗口吗？[/quote] 控件啊！窗口也属于控件啊[/quote] 额，“窗口也属于控件”这个说法我还从没见到过，刚搜了下没搜到，之前Microsoft查阅控件的说明好像也没看到这个说法，请问这个说法是怎么来的？

user: user-3
content: 有句柄的，之前用过

user: user-4
content: 子窗口控件.

user: user-5
content: 你可以用spy++查看，vc自带的，可以看出那个控件的类型和名字，肯定是应该是texybox

user: user-6
content: 编辑区应该是控件,文本框之类的 控件也都有句柄

user: user-5
content: 引用 6 楼 六道佩恩 的回复:[quote=引用 2 楼 Simple-Soft 的回复:] 你可以用spy++查看，vc自带的，可以看出那个控件的类型和名字，肯定是应该是texybox 类名是Edit，无标题，仅根据这一点能区分控件和窗口吗？[/quote] 控件啊！窗口也属于控件啊

user: user-0
content: 引用 2 楼 Simple-Soft 的回复:你可以用spy++查看，vc自带的，可以看出那个控件的类型和名字，肯定是应该是texybox 类名是Edit，无标题，仅根据这一点能区分控件和窗口吗？
user-0 提问:  * a和*a和* a的区别

回复:
user: user-0
content: 引用 3 楼 user-1 的回复:随便瞟了眼就发现有问题： q = top; delete q; top = top -> next;  都把top释放了，还访问top->next，这不是野指针么？ 确实有问题，主要是while循环的判断条件有问题，清空的是对象ls中的内容，对象q用来辅助清空内容，因此判断的应该是ls中的top.而不是判断q

user: user-1
content: 随便瞟了眼就发现有问题： q = top; delete q; top = top -> next;  都把top释放了，还访问top->next，这不是野指针么？

user: user-0
content: 好像不关定义的事，怎么这个停止运行框有时有，有时没有。 这是codeblock的问题么？ 只能怪学校实验室的电脑了诶。

user: user-0
content: 艹，这代码怎么是这样的 我再发一下 #include <iostream> using namespace std; template <class DataType> struct Node{     DataType data;     Node *next; }; template <class DataType> class LinkStack{     private:     Node<DataType> * top;     public:     LinkStack(){top=NULL;}     ~LinkStack();     void push(DataType x);     DataType pop();     DataType gettop();     int Empty(); };   template <class DataType> LinkStack<DataType>::~LinkStack(){     Node<DataType> *q = top;     while(q!=NULL){         q = top;         delete q;         top = top -> next;     } }  template <class DataType> void LinkStack<DataType>::push(DataType x){     Node<DataType> *s = new Node<DataType>;     //定义变量格式要完全     s -> data = x;     s -> next = top;     top = s; }  int main(){     cout<<"sdsdsd"<<endl;     LinkStack<string> ls;     cout<<"xxxxxx"<<endl;     ls.push("lzh");     cout<<"sdsd";     cout<<"sldksd"; }
user-0 提问: 新人提问

回复:
user: user-0
content: 引用 18 楼 weixin_44930231的回复:[quote=引用 16 楼 636f6c696e的回复:]p=1 p=p*base=1*base=base p=p*base=base*base=base^2 ... 所以n次循环后p=base^n 如果这还理解不了的话，那也没辙了。 不知道我在六楼的回复怎么样\^O^/[/quote] 好吧是10楼引用六楼

user: user-0
content: 引用 16 楼 636f6c696e的回复:p=1 p=p*base=1*base=base p=p*base=base*base=base^2 ... 所以n次循环后p=base^n 如果这还理解不了的话，那也没辙了。 不知道我在六楼的回复怎么样\^O^/

user: user-0
content: 引用 13 楼 caohanxing1的回复:是求2的i次方，和-3的i次方？ 是的   power（2，i）与power（-3，i）就是求2与-3的i次方

user: user-1
content: p=1 p=p*base=1*base=base p=p*base=base*base=base^2 ... 所以n次循环后p=base^n 如果这还理解不了的话，那也没辙了。

user: user-2
content: #include <stdio.h> int power(int n, int m); main() { 	int i; 	for (i = 0; i < 10; ++i) 		printf("%d %3d %6d\n", i, power(2, i), power(-3, i)); 	return 0; } int power(int base, int n) { 	int i, p; 	p = 1; 	for (i = 1; i <= n; ++i) 		p = p * base; 	return p; }

user: user-3
content: 1. p是变量，可以把数据存入变量，也可以从变量里提取数据。 2. 计算有先后，对于p = p* base，先计算p*base，这个时候是从p中取数据，得到乘积结果后，再计算 p=乘积结果，即把结果存入p。 3. 变量是同一个变量，只是这两个p是对p的不同操作，一个取值来计算，一个保存数据。

user: user-4
content: 是求2的i次方，和-3的i次方？

user: user-5
content: 赋值没这么难理解吧！高中都在讲

user: user-0
content: 引用 8 楼 自信男孩的回复:两个p是一样的，只是先用p的当前值与Base相乘，然后把结果再放到p中。 谢谢你的回复   很直接

user: user-0
content: 引用 6 楼 stherix的回复:只能理解为 p= 1 * base; 第一轮循环结束后,p的值就是base了 这就是算幂的函数 p要乘以n次base 最终p的值是base的n次方 有一些理解了 调用power函数需要两个参数base与n i与p是power函数中的两个变量 首先赋值p=1使得for的循环体p=p*base首先得到第一个p的值p=1*base即p=base 而在for的参数列表中i的意义就是控制次数，相乘的次数。使得幂运算转换成了乘法运算。i=1相当于第一次乘法运算，而此时p的值为1，p=p*base使得p值变为base，之后第二次循环++i，此时p=p*base就相当于p=base*base即p=base的2次方，直到for判断语句i<=n判断为假停止执行语句块，但此时for已经循环了n次，所以此时return p中的p值为base的n次方，已达到目的，求底数的n次幂，即power函数的功能。

user: user-6
content: 两个p是一样的，只是先用p的当前值与Base相乘，然后把结果再放到p中。

user: user-0
content: 引用 6 楼 stherix的回复:只能理解为 p= 1 * base; 第一轮循环结束后,p的值就是base了 这就是算幂的函数 p要乘以n次base 最终p的值是base的n次方 p的值是base的n次方，那么p*base中，base为底数，p为指数，但*是乘法运算或返回重复若干次的字符串，所以p=p*base是一个乘法运算又如何进行base的N次方运算？或者说*还可以表示相乘的次数，所以p=p*base也可以理解为base乘以p次base？ 另 power语句块声明了变量i，由power的参数列表可以知道i就是base，那么p=p*base是否可以看成并写做p=p*i？ 还有谢谢你的解答。

user: user-7
content: 好像可以直接用math函数吧 用这个#include<math.h> 直接写pow（int x，int n）就等于x的n次幂 这样就不用写自定义函数啦

user: user-8
content: 只能理解为 p= 1 * base; 第一轮循环结束后,p的值就是base了 这就是算幂的函数 p要乘以n次base 最终p的值是base的n次方

user: user-0
content: 引用 4 楼 stherix的回复:p = p * base; 这个等号不是数学上的相等,而是赋值语句 先计算等号右边的值,再把结果赋给左边的变量 谢谢你的回答 不过  在power的语句块中先声明了一个变量p然后赋值p=1     在只声明了一个变量p且p被赋值的情况下p=p*base是否可以理解为1=1*base？           而这个base是否就是在power语句块中声明的变量i？

user: user-8
content: p = p * base; 这个等号不是数学上的相等,而是赋值语句 先计算等号右边的值,再把结果赋给左边的变量

user: user-9
content: 头文件是include<stdio.h>

user: user-0
content: 引用 1 楼 stherix的回复:你能理解 p = p + 1; 这个的意思吗?  至于写出来显示错误 建议仔细学好最基础的东西 标识符命名,赋值语句,等等 嗯 才开始学c     第一本书就是这个   一章章看过来    这里小白理解不了    查也没有具体解答   so   来这里提问    希望可以解惑 另   这个程序就是书上的原版

user: user-8
content: 你能理解 p = p + 1; 这个的意思吗?  至于写出来显示错误 建议仔细学好最基础的东西 标识符命名,赋值语句,等等
user-0 提问: 编写一个c程序，求s=1+（1+2）+（1+2+3）+...+（1+2+3+n）的值

回复:
user: user-1
content: 错误清单： （1） fun函数少了一个 右花括号。 （2）fun 函数内的 printf 语句，变量 n 的前面多了一个 & 。 （3）fun 函数内，return 语句放在了 for 循环内，应该放到 for  循环的后面。 其它，好像没啥问题了。你先修正之后试试。
user-0 提问: 关于scanf 输入问题

回复:
user: user-1
content: 你不是指定了宽度为3吗？你输入了1.254 2.654，指定宽度3，于是接收了1.2，这就是3个字符，所以第一个结果就是1.2。然后你在scanf里指定的规则是“%3f,%2f，第一个%3f已经满足，接下来scanf等着你输入逗号，但输入缓冲区里只剩下“54 2.654”，匹配不到逗号，所以scanf退出，只成功匹配到a。你通过scanf的返回值就能知道成功匹配了几个变量。

user: user-2
content: 引用 3 楼 weixin_44813559的回复:[quote=引用 2 楼 qq_38834405的回复:]指定宽度是在printf里面 scanf 也可以，只不过有规定好像我也不太清楚[/quote] 那是scanf_s，需要指定大小

user: user-3
content: 第一个输入逗号呢？

user: user-0
content: 引用 2 楼 qq_38834405的回复:指定宽度是在printf里面 scanf 也可以，只不过有规定好像我也不太清楚

user: user-2
content: 指定宽度是在printf里面

user: user-0
content: 顺序有点乱，好像重复了，能看懂就行
user-0 提问: 数组的应用  新手编程

回复:
user: user-0
content: 引用 1 楼 拥抱Linux的回复:下面是参考代码，留了一个空，你看看能不能看懂代码的意思，然后思考一下怎么填比较合适——这不是刁难你，而是希望你能有思考、有收获。  // 输入任意的5个整数放在一维数组中，假定输入的5个数是：1，2，8，2，10，编写程序打印下面的方阵： #include <stdio.h> #define LEN 5 int main(int argc, char const *argv[]) { 	int a[LEN];         // 输入5个整数 	for (int i = 0; i < LEN; i++) { 		scanf("%d", &a[i]); 	} 	// 5行输出，被分成5次大循环来完成， 	for (int i = 0; i < LEN; i++) { 		// 第 i 行的输出，是从数组的第 i 个元素开始的，按数组的长度（元素个数）来确定小循环的次数 		// 下标如果超出数组上限的话，又重新归零，从而达到首尾相接的效果。 		for (int j = i, count = 1;; j++, count++) { 			if (j == LEN) { 				j = 0; 			} 			printf("%d ", a[j]);         // 下面圆括号中是 if 的判断条件表达式，问号需要你根据程序和题意改成合适的变量名或者整数 			if (count == ?) { 				break; 			} 		} 		printf("\n"); 	} 	return 0; }  上面的 if 的判断条件里填入合适的变量名或者整数值之后，程序的测试运行截图如下：  十分感谢🙏🙏  但是因为前期没有学过int main ()括号里加东西，和count 函数，但看了后百度了一下还是有了一定了解。感谢🙏

user: user-1
content: 引用 2 楼 qq_44695678 的回复:十分感谢  但是因为前期没有学过int main ()括号里加东西，和count 函数，但看了后百度了一下还是有了一定了解。感谢  main()圆括号里的东西，你现在可以不用搭理；count是上面代码中的一个int型变量的名称而已，不是函数哦！ 上面代码中的 ？ 应该写 LEN 或者 5 ，也就是数组的长度值。 祝你C语言学习进步！

user: user-1
content: 下面是参考代码，留了一个空，你看看能不能看懂代码的意思，然后思考一下怎么填比较合适——这不是刁难你，而是希望你能有思考、有收获。  // 输入任意的5个整数放在一维数组中，假定输入的5个数是：1，2，8，2，10，编写程序打印下面的方阵： #include <stdio.h> #define LEN 5 int main(int argc, char const *argv[]) { 	int a[LEN];         // 输入5个整数 	for (int i = 0; i < LEN; i++) { 		scanf("%d", &a[i]); 	} 	// 5行输出，被分成5次大循环来完成， 	for (int i = 0; i < LEN; i++) { 		// 第 i 行的输出，是从数组的第 i 个元素开始的，按数组的长度（元素个数）来确定小循环的次数 		// 下标如果超出数组上限的话，又重新归零，从而达到首尾相接的效果。 		for (int j = i, count = 1;; j++, count++) { 			if (j == LEN) { 				j = 0; 			} 			printf("%d ", a[j]);         // 下面圆括号中是 if 的判断条件表达式，问号需要你根据程序和题意改成合适的变量名或者整数 			if (count == ?) { 				break; 			} 		} 		printf("\n"); 	} 	return 0; }  上面的 if 的判断条件里填入合适的变量名或者整数值之后，程序的测试运行截图如下：
user-0 提问: C语言

回复:
user: user-1
content: 引用 3 楼 user-2 的回复:另请教下，你那种格式的怎么弄的。我回复的格式不太好看。但是从VS拷贝出来的，怎么没有缩进呢。  在代码前后加(c后面空格删除) [code=c ]   [/code]

user: user-2
content: 引用 1 楼 stherix 的回复:int main() { 	double limit, total = 0; 	scanf("%lf", &limit);  	for (int i = 1;; i++) 	{ 		total += 1.0 / i; 		if (total > limit) 		{ 			printf("%d\n", i - 1); 			break; 		} 	} 	return 0; } 输出时不用 i - 1，不然就不大于limit了。 另请教下，你那种格式的怎么弄的。我回复的格式不太好看。但是从VS拷贝出来的，怎么没有缩进呢。

user: user-2
content: #include<stdio.h>  int main() { 	double dSum = 0.0; 	double dLimit = 0.0; 	scanf("%lf", &dLimit); 	long long i = 1; 	for (; ; ++i) 	{ 		dSum += 1.0 / i; 		if (dSum > dLimit) 		{ 			break; 		} 	}  	printf("满足条件的最小i值为：%ld.\n", i);  	return 0; }  // 注：limit不要输入太大，不然会运行很久很久（一般20以内会很快出结果）

user: user-1
content: int main() { 	double limit, total = 0; 	scanf("%lf", &limit);  	for (int i = 1;; i++) 	{ 		total += 1.0 / i; 		if (total > limit) 		{ 			printf("%d\n", i - 1); 			break; 		} 	} 	return 0; }
user-0 提问: 关于句柄的一些问题

回复:
user: user-0
content: 引用 3 楼 stherix的回复:句柄可不是结构体指针,他只是一个整形数字 是windows操作系统对系统资源的一个编号,比如某个文件,某个外设,一个窗体等等 这是由操作系统分配的 hout就是标准输出设备的句柄,一般代表显示输出设备也就是控制台屏幕 通过这个句柄获取到它的屏幕信息,修改光标位置后,再把设置写回设备 那些结构体都是windowsAPI规定的参数,你不能改成自定义的结构或者其他类型的参数 麻烦你帮我举个标准输入和错误句柄的例子可以么？

user: user-1
content: 句柄可不是结构体指针,他只是一个整形数字 是windows操作系统对系统资源的一个编号,比如某个文件,某个外设,一个窗体等等 这是由操作系统分配的 hout就是标准输出设备的句柄,一般代表显示输出设备也就是控制台屏幕 通过这个句柄获取到它的屏幕信息,修改光标位置后,再把设置写回设备 那些结构体都是windowsAPI规定的参数,你不能改成自定义的结构或者其他类型的参数

user: user-2
content: GetStdHandle((STD_OUTPUT_HANDLE)); 就是控制台界面的句柄，一个标识。有了这个句柄你就能设置控制台窗口的一些属性了 比如，文字颜色，字体，背景样色，透明度，窗口位置等等等等。 比如你的程序中控制的就是光标位置。

user: user-0
user-0 提问: 求大佬看看这段程序错在哪

回复:
user: user-1
content: #include<stdio.h>  int main() {     int i;     double I=0;     int k=-1;      //for(i=1;(1/i)>=1e-5;i+=2)     for(i = 1; (1.0 / i) >= 1e-5; i += 2)     {         k = -k;         I += (k * 1.0 / i);     }     printf("%f\n",I);      return 0; }  供参考！

user: user-2
content: k是int，所以k/i会被转换成int，就是0 改成double(k) / i 就好了

user: user-3
content: 除了1楼说的问题，还有个printf错误。 double类型的输出，要用lf. 改成：printf("%lf",I);
user-0 提问: C语言循环语句，小白求问。。

回复:
user: user-1
content: 哪里不会？还是只想做个伸手党？

user: user-2
content: #include<stdio.h>  int main() { 	int a[100]; 	for (int i = 0; i < 100; ++i) 	{ 		a[i] = 100 + i; 	}  	printf("正序输出：\n"); 	for (int i = 0; i < 100; ++i) 	{ 		printf("%d\t", a[i]); 	} 	printf("\n"); 	printf("反序输出：\n"); 	for (int i = 99; i >= 0; --i) 	{ 		printf("%d\t", a[i]); 	} 	printf("\n");  	printf("奇数输出：\n"); 	for (int i = 0; i < 100; ++i) 	{ 		if (1 == a[i] % 2) 			printf("%d\t", a[i]); 	} 	printf("\n");  	printf("偶数输出：\n"); 	for (int i = 0; i < 100; ++i) 	{ 		if (0 == a[i] % 2) 			printf("%d\t", a[i]); 	} 	printf("\n");  	return 0; }  // 结贴给分。
user-0 提问: 如何自己实现一个mini的C语言文件操作函数？

回复:
user: user-1
content: 如果在系统环境下，简单。把系统接口（也就是api）包装一下完事了 如果在独立环境在，困难。因为你，不是写在一个运行库，而是在写一个系统。 （fopen， fread， fwrite， fclose 这些函数就是系统接口，没有系统，他们是没有的）

user: user-2
content: 引用 1 楼 单眼皮的小健 的回复：fatfa，搜这个文件系统，非常短小精悍是fatfs，打错

user: user-2
content: fatfa，搜这个文件系统，非常短小精悍
user-0 提问: 救急救急大佬们

回复:
user: user-0
content: 好的，我测试下，等会结

user: user-1
content: 问题已解决，结贴给分！

user: user-1
content: #include <stdio.h>  int main() { 	int n = 0; 	printf("请输入一个整数:"); 	scanf("%d", &n); 	char s[29] = {'\0'}; 	// 前28位先写0 	for (int i = 0; i < 28; ++i) 	{ 		s[i] = '0'; 	}  	int x = n;  //保存n 	for (int i = 0; i < 28; ++i) 	{ 		int k = n & 0x0001; 		if (1 == k) 		{ 			s[27 - i] = '1'; 		} 		n = n >> 1;  // 移位 		if (0 == n) 		{ 			break; 		} 	} 	printf ("%d 的二进制为：%s.", x, s); 	return 0; }

user: user-0
content: 将一些很大的数比如4664556转化为二进制，然后补充成为28位的二进制，直接输出0101101就行

user: user-1
content: 1，不考虑溢出是吧？ 2，二进制怎么保存，字符串？

user: user-2
content: 哪里不会？转换2进制实质是不停%2 /2的过程

user: user-0
content: 引用 6 楼 wshyhm的回复:问题已解决，结贴给分！ 能不能再加一点，根据得到的二进制数求真值反码补码
user-0 提问: C语言编程

回复:
user: user-1
content: 嗯，好像不是严格匹配你的题目的要求，比如把均值放进一维数组之类的，因为觉得那样写太罗嗦。你看看吧，不合适的话，当作个了解参考就行了。

user: user-1
content: 参考代码，如下：  #include <stdio.h>  int main(int argc, char const *argv[]) { 	float a[3][3]; 	float sum[3] = { 0 }; 	for (int i = 0; i < 3; i++) { 		for (int j = 0; j < 3; j++) {                         // 按行输入逐个数值，以空格或回车分隔 			scanf("%f", &a[i][j]);                         // 累加各列之和 			sum[j] += a[i][j]; 		} 	}         // 逐个输出各列和的平均值 	for (int i = 0; i < 3; i++) { 		printf("%.2f ", sum[i] / 3); 	} 	printf("\n"); 	return 0; }   Linux环境下，clang编译后测试运行截图，如下：  输入的时候，是否按矩阵的形式输入，并不影响输出结果，因为代码是按3个一行、3个一列来获取数据的。希望能帮到你。

user: user-2
content: #include <stdio.h> #define N 3  int main() { 	int i, j; 	float matrix[N][N]; 	float average[N] = {0}; 	for ( i = 0; i < N; i++) 	{ 		for ( j = 0; j < N; j++) 		{ 			scanf("%f", &matrix[i][j]); 		} 		getchar();   //吸收回车 	} 	for ( j = 0; j < N; j++) 	{ 		for ( i = 0; i < N; i++) 		{ 			average[j] += matrix[i][j];  //求列累加和 		} 		average[j] = average[j] / N;     //求均值 	} 	for ( i = 0; i < N; i++) 	{ 		printf("%.2f ", average[i]);    //两位小数 	} }

user: user-0
content: 求求了感谢各位大佬！！
user-0 提问: 一个c语言的问题

回复:
user: user-1
content: 问题原因是，使用scanf 输入数据之后的输入缓冲区有残留数据，这些残留数据被下一次循环的scanf 无脑读入了。于是，错误的值被赋予了变量，后面的输入全都错位了，变量就没有得到想要的值。  推荐解决方案一：在scanf 语句后面添加如下语句，吸收掉输入缓冲区残留数据，  int getBuff; while ((getBuff = getchar() != '\n') && (getBuff != EOF));  它的具体机制是，使用循环把输入缓冲区的数据读完,直到读到缓冲区的\n或者是空值。  推荐解决方案二：其实俺并不推荐这种办法，因为受平台和软件限制，基本上只在windows的VC系IDE里起效，而gcc、clang都不支持。  //使用fflush()函数 // fflush()不是标准库文件，gcc、clang就不支持，即缺少移植性     fflush(stdin);  希望能帮到你。

user: user-2
content: for(int i=0;i<4;i++)     {         scanf("%c %d %d",&c[i],&a[i],&b[i]);         getchar();     }  加一个getchar()吸收下每行输入后的回车字符。
user-0 提问: 数据结构顺序表初始化 

回复:
user: user-0
content: 引用 3 楼 自信男孩 的回复:引用 2 楼 qq_36536451 的回复:[quote=引用 1 楼 自信男孩 的回复:] 第一种情况是通过返回值，可以返回初始化的顺序表；第二种与第三种类似，即通过类似指针的形式，以传出参数的形式获取初始化的顺序表。第二种是C++才有的语法---引用&  主要是分配空间不清楚 分配空间，前两个都是堆上申请的，第三是栈上的空间（如果是局部变量）。  不同的空间，其生命周期也是不一样的，堆上空间是手动申请，手动释放，不释放知道程序退出才会被回收。栈上的空间是函数内。函数被调用，从第一的位置开始到函数调用结束被释放。  [/quote] 谢谢 嗯 还有最后一个问题  图一是给顺序表分配空间  图二是给数组分配空间   有什么区别吗  是因为图二数组大小没有定义吗   这样的话图二顺序表的空间又是怎么样的呢

user: user-1
content: 引用 2 楼 qq_36536451 的回复:引用 1 楼 自信男孩 的回复:第一种情况是通过返回值，可以返回初始化的顺序表；第二种与第三种类似，即通过类似指针的形式，以传出参数的形式获取初始化的顺序表。第二种是C++才有的语法---引用&  主要是分配空间不清楚 分配空间，前两个都是堆上申请的，第三是栈上的空间（如果是局部变量）。  不同的空间，其生命周期也是不一样的，堆上空间是手动申请，手动释放，不释放知道程序退出才会被回收。栈上的空间是函数内。函数被调用，从第一的位置开始到函数调用结束被释放。

user: user-0
content: 引用 1 楼 自信男孩 的回复:第一种情况是通过返回值，可以返回初始化的顺序表；第二种与第三种类似，即通过类似指针的形式，以传出参数的形式获取初始化的顺序表。第二种是C++才有的语法---引用&  主要是分配空间不清楚

user: user-1
content: 第一种情况是通过返回值，可以返回初始化的顺序表；第二种与第三种类似，即通过类似指针的形式，以传出参数的形式获取初始化的顺序表。第二种是C++才有的语法---引用&
user-0 提问: c语言共用体内存共用问题，为什么和理解的不一样，求解答，谢谢

回复:
user: user-1
content: 引用 5 楼 qybao 的回复：楼上的，你睁大眼睛看清楚的意思 不是两个不同的联合体变量（例子里是info2，info3，这是两个变量）共用一块内存好吧，看错，向你道歉，中文歧义多

user: user-2
content: 楼上的，你睁大眼睛看清楚的意思 不是两个不同的联合体变量（例子里是info2，info3，这是两个变量）共用一块内存

user: user-1
content: 引用 3 楼 qybao 的回复：联合体是里面的字段（例子里是stu1，stu2，stu3，这是联合体的字段）共用一块内存，不是两个不同的联合体变量（例子里是info2，info3，这是两个变量）共用一块内存。好好区别一下联合体的字段和联合体变量先不看变量类型，只要是2个分别定义的变量（int a；int b），他们就互不干扰，各自占用自己的内容，只是现在变量类型是共用体而已，这就转不过来。不要误人子弟

user: user-2
content: 联合体是里面的字段（例子里是stu1，stu2，stu3，这是联合体的字段）共用一块内存，不是两个不同的联合体变量（例子里是info2，info3，这是两个变量）共用一块内存。好好区别一下联合体的字段和联合体变量

user: user-1
content: info2和info3不是同一个变量，你操作info2不会影响info3，输出bbdd

user: user-3
content: 我的理解是共用体共用的内存是内部变量共用同一段内存，比如info2.stu2='a';那么info2这个联合体内的所有数据都共用一段数据，也就说stu1='a'、stu2='a'、stu3='a' 而在你的代码里info2和info4是两个联合体的实例，也就说他们是不同的联合体（当然联合体指针*info1和*info3也就不一样的啦），所以才会出现你所运行的效果。 为了验证这一点，你可以把info1和info3的内存地址打印出来看一下，肯定是不一样的。 下面是我电脑上的结果：
user-0 提问: 歌德巴赫猜想在线等

回复:
user: user-1
content: 以后再也不回答这些结帖率为0的帖子了，都快2周了，还不结贴。

user: user-1
content: #include <stdio.h>  // 判断是否素数 bool IsPrimeNumber(int nNum) { 	bool bIsPrime = true; 	if (2 == nNum || 3 == nNum) 	{ 		return bIsPrime; 	}  	for (int i = 2; i*i <= nNum; ++i) 	{ 		if (0 != nNum %i) 		{ 			continue; 		} 		// 不是素数 		bIsPrime = false; 		break; 	}  	return bIsPrime; }  int main() { 	int k = 1; 	for (int n = 4; n <= 200; n = n + 2, ++k) 	{ 		for (int i = 2; i <= n / 2; ++i) 		{ 			bool bIsPrime = true; 			bIsPrime = IsPrimeNumber(i); 			if (bIsPrime) 			{ 				bIsPrime = IsPrimeNumber(n - i); 				if (bIsPrime) 				{ 					printf ("%d = %d + %d\t", n, i , n - i); 					if (0 == k % 5) 					{ 						printf ("\n"); 					} 					break; 				} 			} 		} 	} 	return 0; }  // 正确答案，结题给分，谢谢！

user: user-2
content: 所以问题是什么？秀一下你的代码么？

user: user-3
content: 不好意思， 少了 y 声明  BOOL isPrimeNo (int x) {     int  t = 2+ (int) sqrt(x);     int  y；       for (int k=2; k < t; ++k) {         y = x / k;         if (y * k == x) {             return FALSE;         }     }       return TRUE; }

user: user-3
content: 判断是否是 质数的程序：   BOOL isPrimeNo (int x) {     int  t = 2+ (int) sqrt(x);      for (int k=2; k < t; ++k) {         y = x / k;         if (y * k == x) {             return FALSE;         }     }      return TRUE; }

user: user-0
content: 引用 1 楼 下雨的猫的回复:#include <stdio.h> #include <stdlib.h> #include <math.h> int main() { 	int n,j,i,flag,t; 	for (n = 4;n <= 100;n = n + 2) 	{ 		for(i = 2;i < n;i++) 		{ 			flag = 1; 			j = 2; 			while(j < i) 			{ 				if(i % j == 0) 				{ 				flag = 0; 				break; 				} 				j++;  			} 			j = 2; 			t = n - i; 				while(j < t) 				{ 					if(i % j == 0) 					{ 						flag = 0; 							break; 					} 					j++; 				} 				if(flag == 1) 				{  				printf("%2d+%2d=%2d  ",i,t,n); 					} 			} 	}  	return 0;  } 兄弟，你算的结果里有9错了

user: user-4
content: #include <stdio.h> #include <stdlib.h> #include <math.h> int main() { 	int n,j,i,flag,t; 	for (n = 4;n <= 100;n = n + 2) 	{ 		for(i = 2;i < n;i++) 		{ 			flag = 1; 			j = 2; 			while(j < i) 			{ 				if(i % j == 0) 				{ 				flag = 0; 				break; 				} 				j++;  			} 			j = 2; 			t = n - i; 				while(j < t) 				{ 					if(i % j == 0) 					{ 						flag = 0; 							break; 					} 					j++; 				} 				if(flag == 1) 				{  				printf("%2d+%2d=%2d  ",i,t,n); 					} 			} 	}  	return 0;  }
user-0 提问: 求教：如何求最短回路？（每条边只通过一次，通过所有顶点）注：边上数字为权值

回复:
user: user-1
content: 欧拉回路问题，图中有顶点的度数是奇数，所以这个图不存在欧拉回路。

user: user-2
content: 这种题目用迪杰斯特拉算法就可以解决，由于算法一言半语解释不清楚，给你看一下这篇文章，了解一下这个算法https://baike.baidu.com/item/%E8%BF%AA%E6%9D%B0%E6%96%AF%E7%89%B9%E6%8B%89%E7%AE%97%E6%B3%95/4049057?fr=aladdin
user-0 提问: 关于C语言有符号输出

回复:
user: user-1
content: 引用 2 楼 weixin_44813559 的回复:[quote=引用 1 楼 拥抱Linux的回复:]因为在（1）占据4个字节的（2）有符号的int型里，-2147483648在内存中就是1...(31个0) 啊。 你定义的n在内存中不就是1...(31个0)这样的吗？那当然就输出-2147483648啦。 俺猜测你的困惑的原因不在于有符号、无符号int型，而在于int型数据在内存中的存储形式，要知道这些数据在内存中是以补码的形式存储的。对于补码而言，要获取真正的值并显示出来，就要把补码再转换回原码，然后才显示出来。 所以，对于1...(31个0)，以%d输出的时候，编译器首先判断了它是一个有符号Int型数据，1是符号位，不动，右边的31个0是补码，需要转换为原码，就成了2147483648，所以最终输出-2147483648。 你再看看什么是原码、反码、补码，应该就会明白了。 希望可以帮到你。 可是1...(31个0)转化为原码，符号位不动，取反加1就变成1...(32个0)了呀，怎么弄[/quote]  那怎么会呢？ 33个位就超出int的4个字节了呀！ （1）负数的补码，从根本上来说，就是由符号位结合它的绝对值（正数）的「真值」的二进制形式经过取反、加一后得来的。 具体到你的例子，-2147483648 的补码是什么？ 就是 符号位是 1 再「结合」它的绝对值 2147483648 的二进制形式经过取反、加一得来的啊。2147483648 的二进制形式是 1...(31个0)，取反之后是 0...(31个1)，再加一，得到1...(31个0)，这已经是32位了，对吧？ 那么，符号位的 1 放在哪里呢？ 符号位的 1  当然还是放在最高位啦， 那就和 刚刚得到的 1...(31个0) 的最高位的 1 重合了嘛！ 「重合」，注意一下，它还是只有32位，并不会去占据33位。这个 1...(31个0) 就这样就作为补码成功地表示了 负数 -2147483648 了呀。 （2）至于你说，由这个补码还原回去还原不了的问题，那是因为你还原的方法不对。 后面的31个0取反、加1，也只能得到 1...(31个0)啊，无论如何它还是得是32位啊！ 那还原回去的值，就是 符号位的 1 表示负，结合 1...(31个0) ，总的表示 -2147483648 了呀！明白了吧？  就是说，1...(31个0)作为有符号int型数据的话，它不能在内存里表示 正数 2147483648，但是不代表从数值概念上讲，它不是 正数 2147483648 的表示形式呀！这两个概念要区分开。 （3）你看4个字节的int型数据的机器里，int型的表示范围是多少？是[-2147483648,2147483647]，为什么最大值不是2147483648呢？因为它作为 int型 的话，那就表示不了啊！正数的补码就是它的原码，符号位是0，后面的才是数值位，而2147483648的二进制形式是1...(31个0)已经把32位空间都占满了，那么符号位的 0 去哪里呢？放到第33位去，那就超出4个字节了呀！ 放到最高位，那不就变成了0...(31个0)了吗？ 你看，这怎么办？ 没办法，int型它就是只有这么大的表示范围，这是规定啊！其实也有办法，把数据类型从 int型 改成 long int型不就好了吗？ ——所以，俺这段话想表达的意思就是，虽然 1...(31个0) 作为有符号 int型数据的时候，它不能在内存里表示 正数 2147483648，但是不代表从数值概念上讲，它不是 正数 2147483648 的二进制表示形式呀。巧就巧在 -2147483648 作为 int 型数据，它有补码，但是没有原码和反码。这也是为什么int 的表示范围没有关于 0 对称的原因，同时 0 的补码也只有 1个 的原因 。 （4）最后，再次建议你，看看什么是原码、反码、补码，包括它们的来龙去脉，以及在某个数据类型下的表示情况。

user: user-0
content: 引用 1 楼 拥抱Linux的回复:因为在（1）占据4个字节的（2）有符号的int型里，-2147483648在内存中就是1...(31个0) 啊。 你定义的n在内存中不就是1...(31个0)这样的吗？那当然就输出-2147483648啦。 俺猜测你的困惑的原因不在于有符号、无符号int型，而在于int型数据在内存中的存储形式，要知道这些数据在内存中是以补码的形式存储的。对于补码而言，要获取真正的值并显示出来，就要把补码再转换回原码，然后才显示出来。 所以，对于1...(31个0)，以%d输出的时候，编译器首先判断了它是一个有符号Int型数据，1是符号位，不动，右边的31个0是补码，需要转换为原码，就成了2147483648，所以最终输出-2147483648。 你再看看什么是原码、反码、补码，应该就会明白了。 希望可以帮到你。 可是1...(31个0)转化为原码，符号位不动，取反加1就变成1...(32个0)了呀，怎么弄

user: user-1
content: 因为在（1）占据4个字节的（2）有符号的int型里，-2147483648在内存中就是1...(31个0) 啊。 你定义的n在内存中不就是1...(31个0)这样的吗？那当然就输出-2147483648啦。 俺猜测你的困惑的原因不在于有符号、无符号int型，而在于int型数据在内存中的存储形式，要知道这些数据在内存中是以补码的形式存储的。对于补码而言，要获取真正的值并显示出来，就要把补码再转换回原码，然后才显示出来。 所以，对于1...(31个0)，以%d输出的时候，编译器首先判断了它是一个有符号Int型数据，1是符号位，不动，右边的31个0是补码，需要转换为原码，就成了2147483648，所以最终输出-2147483648。 你再看看什么是原码、反码、补码，应该就会明白了。 希望可以帮到你。
user-0 提问: 两个多项式相加的程序为啥不对(~_~;)

回复:
user: user-0
content: 引用 1 楼 user-1的回复:LinkList Add_L(LinkList P,LinkList Q)；你这一个函数里面的p都没初始化，然后主函数的Q也没有初始化，你试试改一下可不可以 改了，还是不行。输入系数和指数，没有输出，直接结束程序了。

user: user-1
content: LinkList Add_L(LinkList P,LinkList Q)；你这一个函数里面的p都没初始化，然后主函数的Q也没有初始化，你试试改一下可不可以
user-0 提问: C语言疑问，请问各位大佬我这个为什么运行没结果

回复:
user: user-0
content: 引用 楼主 user-0的回复:#include<stdio.h> #include<math.h> #define N 100 #define T 2000 void main() {  int i,j,l,k,k1;  double cha,x,y,s;  double t[T][N][N];  printf("\t\t\t二维非稳态导热问题\t\t");  printf("\n\t\t\t\t\t\t----\n");  printf("\n形区域，边长L=W=0.1，求该矩形区域内的温度分布。\n");  /*自动赋予温度初场*/   for(i=0;i<N;i++)    for(j=0;j<N;j++)     t[0][i][j]=600;  /*四个边界上的第一类边界条件*/  for(j=0;j<N;j++)  {   t[0][0][j]=10;   t[0][N-1][j]=10;  }  for(i=0;i<N;i++)  {   t[0][i][0]=20;   t[0][i][N-1]=20;  }  /*步长计算*/  x=(double)0.1/(N-1);  y=(double)0.1/(N-1);  s=(double)20.0/(T-1);  /*迭代循环*/ cha=1;k=0;   while(cha>0.0001&&k<T)/*迭代是否收敛判断*/   {   k++;k1=k; 	 for(i=1;i<N-1;i++)        for(j=1;j<N-1;j++)         t[k][i][j]=(t[k-1][i][j+1]+t[k-1][i][j-1]+t[k-1][i+1][j]+t[k-1][i-1][j]-4*t[k-1][i][j])*((0.0001062*s)/(x*x))+t[k-1][i][j];      cha=0; 	for(i=0;i<N;i++)       for(j=0;j<N;j++)        cha=cha+fabs(t[k][i][j]-t[k-1][i][j]);        cha=cha/(N*N);   }    /*输出温度分布，其中l控制输出值的排列;这个结果是按照笛卡尔坐标系下平面从左上角开始依次的*/  printf("\n经数值离散计算的该矩形区域内温度分布为：\n");  l=0; for(k=0;k<k1;k++)  for(j=0;j<N;j++)   for(i=0;i<N;i++)   {    printf("%4.3f ",t[k][i][j]);    l=l+1;    if(l==N)    {     printf("\n");     l=0;    }   }  /*为了是生成的exe文件结果算的后不会立即退出，方便观看*/  getchar();getchar();  /*其中第一个getchar读取了回车键，第二个getchar读取任意键*/ } 一块边长为 0.1x0.1(m)的正方形铜箔片，其厚度可忽略不计。初始时刻(t0=0s) 铜箔片温度 T0=600℃，此时突然将铜片边界分别与T∞=20℃、T∞=10℃的恒定冷源接触进行冷却降温；如图1已知铜箔片的导热系数λ=366W/(mk)，ρ=8930kg/m3  cp =386J/(kg*k) ,热扩散系数 a=0.0001062(m2/s)，忽略上下平面的导热，假定表面传热系数h=∞；构建二维常物性非稳态第二类边界条件导热问题；模型如图所示，计算在其他参数不变的情况下，铜箔片的温度随时间的变化规律以及温度分布。 关于二维非稳态迭代运算
user-0 提问: 简单C语言程序（C程序设计语言练习2-4），求指错~~~

回复:
user: user-1
content: 结论，能正常输出？

user: user-0
content: 引用 13 楼 17- 的回复:结论，能正常输出？ 我12楼的代码应该是没问题的，您遇到什么问题了吗？

user: user-0
content: 引用 6 楼 qq_38834405 的回复:[quote=引用 4 楼 ZhouJunjie100 的回复:] [quote=引用 2 楼 qq_38834405 的回复:] 你的编译器不会报错吗在定义函数的时候 我好像一直这样定义函数诶，您是发现了什么问题吗？求分享~[/quote]对不起，孤陋寡闻了。。。第一次知道可以这么用。你代码问题在于数组越界，在第一个for循环的开始加个k=0就不会越界了。但是你的算法有问题。。（我以为越界是因为你没定义大小的缘故。。信口开河了。。[/quote] 可否详细说说我的算法问题是什么呢

user: user-0
content: 引用 6 楼 qq_38834405 的回复:[quote=引用 4 楼 ZhouJunjie100 的回复:] [quote=引用 2 楼 qq_38834405 的回复:] 你的编译器不会报错吗在定义函数的时候 我好像一直这样定义函数诶，您是发现了什么问题吗？求分享~[/quote]对不起，孤陋寡闻了。。。第一次知道可以这么用。你代码问题在于数组越界，在第一个for循环的开始加个k=0就不会越界了。但是你的算法有问题。。（我以为越界是因为你没定义大小的缘故。。信口开河了。。[/quote] 感谢感谢，k忘了每次要初始化了，十分感谢你的回复和帮忙

user: user-0
content: 引用 5 楼 qq_38834405 的回复:[quote=引用 3 楼 ZhouJunjie100的回复:]没有报错呀，您是觉得这句话哪里有问题吗 你得给大小。c数组初始化需要大小，声明的时候不用[/quote] 数组作为函数参数本质上应该是向函数传递数组指针，所以不用定义大小的

user: user-2
content: #include <stdio.h> #include<string.h>//加个头文件 /*在你的代码上修改的*/ void squeeze(char s1[100], char s2[100]); int main() { 	int temp_s1, i; 	char s1[100] = "abcdefghijklmnopqrstuvwxyz"; 	char s2[100] = "bcuvwx"; 	temp_s1 = strlen(s1);//计算s1的长度 	squeeze(s1, s2); 	for (i = 0; i < temp_s1; i++) { 		if (s1[i] != '\0') { 			printf("%c", s1[i]); 		} 	} 	return 0; } void squeeze(char s1[100], char s2[100]) { 	int k = 0; 	int temp_s1, temp_s2; 	temp_s1 = strlen(s1); 	temp_s2 = strlen(s2); 	for (int i = 0; i < temp_s1; i++) { 		for (int j = 0; j < temp_s2; j++) { 			if (s1[i] == s2[j]) { 				s1[i] = '\0';//相同就变成'\0' 			} 		} 	} }

user: user-2
content: 引用 4 楼 ZhouJunjie100 的回复:[quote=引用 2 楼 qq_38834405 的回复:] 你的编译器不会报错吗在定义函数的时候 我好像一直这样定义函数诶，您是发现了什么问题吗？求分享~[/quote]对不起，孤陋寡闻了。。。第一次知道可以这么用。你代码问题在于数组越界，在第一个for循环的开始加个k=0就不会越界了。但是你的算法有问题。。（我以为越界是因为你没定义大小的缘故。。信口开河了。。

user: user-2
content: 引用 3 楼 ZhouJunjie100的回复:没有报错呀，您是觉得这句话哪里有问题吗 你得给大小。c数组初始化需要大小，声明的时候不用

user: user-0
content: 引用 2 楼 qq_38834405 的回复:你的编译器不会报错吗在定义函数的时候 我好像一直这样定义函数诶，您是发现了什么问题吗？求分享~

user: user-0
content: 没有报错呀，您是觉得这句话哪里有问题吗

user: user-2
content: 你的编译器不会报错吗在定义函数的时候

user: user-2
content: void squeeze(char s1[],char s2[]){

user: user-0
content: 最后总结一下吧，我这道题的实现逻辑出现了问题。感谢大家的提醒~参考了书上的答案，把我最后的代码贴上来以供参考吧~ #include <stdio.h> void squeeze(char s1[],char s2[]); int main() { 	char s1[100]="abcdefghijklmnopqrstuvwxyz"; 	char s2[100]="bcuvwx"; 	squeeze(s1,s2);  	printf("%s",s1); 	return 0; } void squeeze(char s1[],char s2[]){ 	int k=0; 	int j=0; 	for(int i=0;s1[i]!='\0';i++){ 		for(j=0;s2[j]!='\0'&&s1[i]!=s2[j];j++); 		if(s2[j]=='\0') s1[k++]=s1[i]; 	} 	s1[k]='\0'; }

user: user-2
content: 你大概是想不相同的保留在原位置。暂且先不谈这个能不能实现，你的k最大也就第二个数组的大小，最后k位置\0第一个数组就只能这么大了。（我觉得找相同比找不相同好解））
user-0 提问: 求大神帮我看看怎么回事，c语言链表！

回复:
user: user-1
content: 楼主，你的后面那个*LinkList是什么意思啊

user: user-2
content: ABCD空指针，没有初始化，传参数也都有问题，void creatlist(LinkList &L,int n)，改为void creatlist(LinkList L,int n)，很多是指针问题
user-0 提问: socket通讯

回复:
user: user-1
content: MSDN98_1.ISO http://pan.baidu.com/s/1dDF41ix,  MSDN98_2.ISO http://pan.baidu.com/s/1bnGo0Vl 安装MSDN98 然后在里面找socket的例子代码。

user: user-2
content: vs2017,可以写控制台或MFC
user-0 提问: error C2143: syntax error : missing ')' before ';' 求解答

回复:
user: user-1
content: 不管是可读性还是后续修改上来讲，个人建议即便是循环或者判断只有一条语句，也加上大括号。 引用 8 楼 @风轻云淡_ 的回复:我觉得他们可能不是节约省略，而是忘记了。我就是这么过来的

user: user-2
content: 我觉得他们可能不是节约省略，而是忘记了。我就是这么过来的

user: user-3
content: 不要省略大括号哦，for循环后边，省略了就相当于只循环for后边的一句话

user: user-1
content: 我发现很多初学者语法都不太熟，还喜欢沈略大括号

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

user: user-5
content: if(i=0; i<=L->last)  语法错误，if里面应该是一个表达式，而不是语句

user: user-6
content: if 的 圆括号 里 只能是 表达式， 不能是 语句；也就是说  if  的 圆括号 里 不能 有 分号 。

user: user-7
content: 给个建议， 该加{}的地方不要节约 代码格式规范一点，问题很快就能找到

user: user-8
content: 输出函数可以写成这样  void Output(SeqList *L)  //输出函数 { 	int i; 	for (i = 0; i <= L->last; i++) 			printf("%2d ", L->elem[i]); 	printf("\n"); }

user: user-9
content: if语句里不能有;啊,这有什么疑问?