Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 嘻嘻?那个大佬帮我分析一下

回复:
user: user-0
content: 引用 4 楼 棉猴 的回复：首先要清楚两点。 1 表达式类型 因为x的类型是int，所以x/2的类型也是int，所以当x=3时，x/2的值是1；当x=1时，x/2的值是0。 2 递归函数 如果一个函数调用了它本身，不管这种调用是直接的还是间接的，都称该函数为递归 函数(recursive function)。 在递归函数中，一定有某条路径是不包含递归调用的;否则，函数将“永远”递归下 去，换句话说，函数将不断地调用它自身直到程序控件栈耗尽为止。我们有时候会说这种函数含有递归循环(recursion loop)。 第一次调用 在fun()函数中，x的值首先是3，x/2的值是1，此时满足递归条件， 第二次调用，调用fun(x/2) 此时x的值是1，x/2的值是0，不满足递归条件，所以printf()函数输出1； 返回第一次调用，此时printf()函数输出3 返回主函数，printf回车。 谢谢🙏刚刚学递归...初学者，谢谢你

user: user-0
content: 引用 3 楼 user-2 的回复：fun(3)进入函数,满足3/2>0 所以字啊次调用fun(3/2) 此时为fun(1),不满足1/2>0，输出1 然后退回到上层，在输出3 在调回到main输出\n 满意么，骚年嘻嘻🤭刚刚其实看书也懂了我一直觉的是31明白了这个叫递归

user: user-1
content: 首先要清楚两点。 1 表达式类型 因为x的类型是int，所以x/2的类型也是int，所以当x=3时，x/2的值是1；当x=1时，x/2的值是0。 2 递归函数 如果一个函数调用了它本身，不管这种调用是直接的还是间接的，都称该函数为递归 函数(recursive function)。 在递归函数中，一定有某条路径是不包含递归调用的;否则，函数将“永远”递归下 去，换句话说，函数将不断地调用它自身直到程序控件栈耗尽为止。我们有时候会说这种函数含有递归循环(recursion loop)。 第一次调用 在fun()函数中，x的值首先是3，x/2的值是1，此时满足递归条件， 第二次调用，调用fun(x/2) 此时x的值是1，x/2的值是0，不满足递归条件，所以printf()函数输出1； 返回第一次调用，此时printf()函数输出3 返回主函数，printf回车。

user: user-2
content: fun(3)进入函数,满足3/2>0 所以字啊次调用fun(3/2) 此时为fun(1),不满足1/2>0，输出1 然后退回到上层，在输出3 在调回到main输出\n 满意么，骚年

user: user-0
content: 引用 1 楼 user-2 的回复：递归，打断点啊可不可以帮我分析一下过程

user: user-2
content: 递归，打断点啊
user-0 提问: 关于光标移动的一点问题

回复:
user: user-1
content: void GotoXY(short y, short x) {	 	HANDLE a=GetStdHandle(STD_OUTPUT_HANDLE);		//获取本程序标准输出的句柄 	COORD t;										//COORD为表示坐标的结构体 	t.X=x*2;										//方便汉字定位，一个汉字占两个字符宽 	t.Y=y; 	SetConsoleCursorPosition(a , t);					//设置控制台光标位置 }  调用此函数即可移动到指定坐标去，记得包含windows.h。如果想获得光标的位置，可以去查GetConsoleScreenBufferInfo函数
user-0 提问: 一道c语言选择题 求球大佬解释一下

回复:
user: user-1
content: 执行了这句：c=！c，所以c=1

user: user-2
content: 引用 3 楼 focuslight 的回复:a=b=c=0   if(a=b)等价于if (0)     所以执行 else 的代码   c=！c    逻辑非运算，就是把后面的表达式的值取反。比如你这里的，c=0；在逻辑里面，0被认为是false，所以，！c的值就是true, c=1 正解！

user: user-3
content: 不管是c++和++c都没关系，因为根本执行不到 引用 2 楼 weixin_44972980 的回复:[quote=引用 1 楼 636f6c696e 的回复：]a=b 不是a==b if(a=b)等价于if (a)等价于if 0那个是不是 单用的时候 c++ 和++c没有区别 结果都是原来的c加上一[/quote]

user: user-4
content: a=b=c=0   if(a=b)等价于if (0)     所以执行 else 的代码   c=！c    逻辑非运算，就是把后面的表达式的值取反。比如你这里的，c=0；在逻辑里面，0被认为是false，所以，！c的值就是true, c=1

user: user-0
content: 引用 1 楼 636f6c696e 的回复：a=b 不是a==b if(a=b)等价于if (a)等价于if 0那个是不是 单用的时候 c++ 和++c没有区别 结果都是原来的c加上一

user: user-3
content: a=b 不是a==b if(a=b)等价于if (a)等价于if 0
user-0 提问: 变量交换,这种方法对吗？

回复:
user: user-1
content: 你这个只是把两个变量的顺序交换了一下，但是它们的值并没有交换呀！要实现交换它们的值，我们需要一个临时变量来存储其中的一个值，就相当于我们要交换两个苹果的位置，需要借助一个空盘子一样； int temp;//定义一个临时变量 temp=a;//先把a的值赋给temp a=b;//把b的值赋给a,此时a的值为b的值 b=temp;//把原来a的值赋给b   ＃include<stdio.h> int main() {int a,b; scanf("%d%d",&a,&b); int temp;//定义一个临时变量 temp=a;//先把a的值赋给temp a=b;//把b的值赋给a,此时a的值为b的值 b=temp;//把原来a的值赋给b printf(%d %d\n",a,b); return 0; }

user: user-2
content: 少侠这波操作还可以，内存上的值没有变，会造成段错误

user: user-3
content: 交换其实是指交换内存里的数据，你这样交换只是输出时“交换”，而内存里的值没有变化。

user: user-4
content: a还是a， b还是b

user: user-5
content: 少侠这波操作6啊,秀的我脑壳疼 int tmp=a; b=a; a=tmp;

user: user-6
content: ......没有交换变量啊，只是逆序输出
user-0 提问: 明明有库，编译器却不自动链接，这是怎么回事？

回复:
user: user-0
content: 引用 1 楼 user-1 的回复:#pragma comment(lib, "XXX.lib")  添加一下， 就一行代码的事 我已经提到过“手动链接”的方案，你并没有在回答我的问题。

user: user-1
content: #pragma comment(lib, "XXX.lib")  添加一下， 就一行代码的事
user-0 提问: steam!=NULL

回复:
user: user-0
content: 已解决，谢谢各位大佬

user: user-0
content: 引用 3 楼 636f6c696e的回复:从assert看，fp是空，所以挂了，确定在程序运行位置有相应的文件么？ 我直接复制的路径，确定

user: user-1
content: fp = fopen(……); if(fp != NULL) //先判断下文件是否打开成功 {    }

user: user-2
content: 从assert看，fp是空，所以挂了，确定在程序运行位置有相应的文件么？

user: user-0
content: 还是不行，不是死循环的问题

user: user-3
content: NULL是void *类型的，为什么要和char类型的数据比较呢？ 程序一场了，很可能是死循环了。 修改三个个地方吧： 第一，把ch定义为int类型，然后 第二，while (ch != EOF); 第三，判断一下打开文件之后返回值，即判断一下fp是否为NULL  基础的C语言使用，建议多练习一下
user-0 提问: 整合两个代码

回复:
user: user-0
content: 引用 3 楼 自信男孩 的回复:什么问题？可以把问题描述的更清晰一些～就是这个第一个是个月历查询年份>回车>月份>回车>日期>回车就能显示月历，第二个是个动态时间捕获的。想把两个合在一块QAQ

user: user-0
content: 就是这个第一个是个月历查询年份>回车>月份>回车>日期>回车就能显示月历，第二个是个动态时间捕获的。想把两个合在一块

user: user-1
content: 两个代码功能分别是啥，要整合成什么样子都不说，是让人去猜么？

user: user-2
content: 什么问题？可以把问题描述的更清晰一些～

user: user-3

user: user-0
content: 顶一哈= =
user-0 提问: 矩阵转置行指针

回复:
user: user-1
content: #include <stdio.h>  #define N 10  void f(int(*a)[N], int n) {     /**********  Begin  **********/     int i, j, tmp;      for (i = 0; i < n; i++)         for (j = i; j < n; j++) {             if (i != j) {                 tmp = a[i][j];                 a[i][j] = a[j][i];                 a[j][i] = tmp;             }             //printf("a[%d][%d] = %d\n", i, j, a[i][j]);         }      /**********   End  ***********/  }  int main() {     int a[N][N], n, i, j;     scanf("%d", &n);     if (n > N)   //防止n过大导致数组越界         n = N;     int cnt = 1;     for (i = 0; i<n; i++)         for (j = 0; j<n; j++)             a[i][j] = cnt++;             //scanf("%d", &a[i][j]);     for (i = 0; i<n; i++) {         for (j = 0; j<n; j++)             printf("%2d ", a[i][j]);         putchar(10);     }     putchar(10);     f(a, n);     for (i = 0; i<n; i++)     {         for (j = 0; j<n; j++)             printf("%2d ", a[i][j]);         printf("\n");     }     return 0; }  供参考！
user-0 提问: 如何将Int转为16进制数存放到Byte数组里面？

回复:
user: user-1
content: int a=12;int b=0x0b;byte b=0x0b; 三者一样

user: user-1
content: byte b = 0x0b;

user: user-2
content: 楼上的人已经说了，内存里都是二进制，没有什么10进制 16进制之说。 如果你是要打印输出成0xb，可以通过printf("0x%X", b[0])进行输出 引用 3 楼 clwk 的回复:转换没问题，我的问题就是怎么把转换后的结果变成b[0] = 0XB

user: user-0
content: 转换没问题，我的问题就是怎么把转换后的结果变成b[0] = 0XB

user: user-3
content: 在内存里都是以二进制形式存储的，没有10进制，16进制等之说。所以，没有必要先转16进制再放到byte里，可以直接赋值 b[0]  = a;如果想看b[0]的16进制数据，可以用%x输出即可。

user: user-2
content: 本质是10进制到256进制的转换，你想到这点怎么做就没啥难度了吧
user-0 提问: Byte 数组长度如何计算？

回复:
user: user-1
content: 引用 2 楼 636f6c696e 的回复:看错了，数组长度都可以通过sizeof(a) / sizeof(a[0])来获取 这是求数组的长度，楼主的数据不确定正好放满数组吧

user: user-0
content: 好的，多谢了。

user: user-1
content: 引用 10 楼 clwk 的回复:[quote=引用 9 楼 自信男孩 的回复:] [quote=引用 2 楼 636f6c696e 的回复:] 看错了，数组长度都可以通过sizeof(a) / sizeof(a[0])来获取 这是求数组的长度，楼主的数据不确定正好放满数组吧[/quote] 是的，长度未知，所以需要计算。[/quote] 那就在存数据的地方顺便将长度带出来

user: user-0
content: 引用 9 楼 自信男孩 的回复:[quote=引用 2 楼 636f6c696e 的回复:] 看错了，数组长度都可以通过sizeof(a) / sizeof(a[0])来获取 这是求数组的长度，楼主的数据不确定正好放满数组吧[/quote] 是的，长度未知，所以需要计算。

user: user-2
content: 不存在的，既然你声明了byte b[10]，就算你没有主动赋值了，b[6]~b[9]都是有具体数值的，而且一般为0。 如果你想获取到赋值过的长度，也有两种方法： 1. 初始化为无效值，比如0xff 2. 加一个flag字段组装成一个结构体来使用 引用 6 楼 clwk 的回复:有个问题就是： byte b[10];  sizeof(b)/sizeof(b[0])=10; 我只想获取长度6

user: user-0
content: 有个问题就是： byte b[10];  sizeof(b)/sizeof(b[0])=10; 我只想获取长度6

user: user-3
content: 数组做形参的时候,要带上数组长度

user: user-2
content: 函数传参数组退化成指针，要么用C++引用，要么在函数传参也传入数组长度 引用 3 楼 clwk 的回复:没错，这样是可以的，但是改成如下方式，就不灵了。  void _bytelength(BYTE* bInfo) { 	int ilen = sizeof(bInfo) / sizeof(bInfo[0]); 	 } 结果变成4了。

user: user-0
content: 没错，这样是可以的，但是改成如下方式，就不灵了。  void _bytelength(BYTE* bInfo) { 	int ilen = sizeof(bInfo) / sizeof(bInfo[0]); 	 } 结果变成4了。

user: user-2
content: 看错了，数组长度都可以通过sizeof(a) / sizeof(a[0])来获取

user: user-2
content: 就你这样的数据规律，可以直接用strlen来获取
user-0 提问: C语言数组问题

回复:
user: user-1
content: for (i = 0; i < n - 1; i++)     b[i] = a[i + 1] - a[i]; 引用 2 楼 weixin_44859164 的回复:[quote=引用 1 楼 user-1的回复:]哪里不会问哪里，作业党还是自己试着写写吧 把a中所有的后项减前项至差存入数组b，这里不会表示[/quote]

user: user-0
content: 引用 1 楼 user-1的回复:哪里不会问哪里，作业党还是自己试着写写吧 把a中所有的后项减前项至差存入数组b，这里不会表示

user: user-1
content: 哪里不会问哪里，作业党还是自己试着写写吧
user-0 提问: 想让线程退出时输出 Hello,world! 结果总是输出NULL， 哪里有问题？

回复:
user: user-0
content: 正解：https://blog.csdn.net/yuhan61659/article/details/81296111

user: user-0
content: 5楼：但是线程退出函数pthread_exit(void *rval_ptr)返回的不是个指针吗？包括线程显式退出的返回值：return (void *)str. 我就是想利用pthread_join(pthread_t tid,void **rtval)的第二个2级指针参数达到目的，不知道这里这个参数能做什么

user: user-1
content: void *creat(void *arg){         char str[13]="hello! world!";         printf("new thread is created ... \n");         return (void *)str; }    这是返回局部变量的地址，有些问题

user: user-0
content: 还是不行，感觉指针传递有问题

user: user-0
content: proyj@ubuntu1804:~$ gcc test.c -lpthread -o test test.c: In function ‘creat’: test.c:9:9: warning: function returns address of local variable [-Wreturn-local-addr]   return (void *)str;          ^~~~~~~~~~~ test.c: In function ‘main’: test.c:15:11: warning: initialization makes integer from pointer without a cast [-Wint-conversion]   int temp=(int *)malloc(sizeof(int));            ^ test.c:22:27: warning: passing argument 2 of ‘pthread_join’ from incompatible pointer type [-Wincompatible-pointer-types]   error = pthread_join(tid,&temp);                            ^ In file included from test.c:2:0: /usr/include/pthread.h:251:12: note: expected ‘void **’ but argument is of type ‘int *’  extern int pthread_join (pthread_t __th, void **__thread_return);             ^~~~~~~~~~~~ test.c:27:41: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]   printf("thread is exit! because %s\n", (char *)temp);                                          ^ proyj@ubuntu1804:~$ ./test main thread! new thread is created ... thread is exit! because (null) proyj@ubuntu1804:~$

user: user-2
content: void *temp是空指针，没申请内存

user: user-3
content: int *temp = (int *)malloc(sizeof(int));  error = pthread_join(tid,&temp);         if(error){                 printf("thread is not exit ... \n");                 return -2;         } printf("state  = %d\n", *temp);
user-0 提问: c语言中关于指针类型分辨问题

回复:
user: user-1
content: 试试C11引入的_Generic  #include "stdio.h" int main( void) { 	char *p; 	_Generic( p, int*:printf("A"), char*:printf("B"), double*: printf("c")); 	return 0;  }

user: user-2
content: 楼主可以说说看原始诉求是什么么？ 我觉得可以通过union来解决

user: user-3
content: 做不到，里面的数据做不到识别类型。

user: user-4
content: 重点是你如何知道void*指向的实际类型？ 有两个基本方案： 1）在编码的时候就清楚什么类型（静态） 2）运行时确定：由外部某些条件判断类型，然后进行转换。或者，指针（所有类型）指向的内存的固定位置携带类型信息

user: user-2
content: 不能，C语言指针可以随意转换类型

user: user-5
content: 不知道以下代码是否能帮到楼主？  int test(void *p) {     uint8_t *p8 = (uint8_t *)p;     uint16_t *p16 = (uint16_t *)p;     uint32_t *p32 = (uint32_t *)p;     ... }
user-0 提问: 萌新，求大神帮忙

回复:
user: user-1
content: 这个很简单，就是三个变量，分别存储：第一个数字  运算符   第二个数字 然后按照运算符的多种情况来执行对应的运算即可。附上代码：   #include <stdio.h> #include <stdlib.h>  int main() {     int a,b,result;     char op;     scanf("%d %c %d",&a,&op,&b);     switch(op)     {     case '+':result=a+b;break;     case '-':result=a-b;break;     case '*':result=a*b;break;     case '/':result=a/b;break;     case '%':result=a%b;break;     default:printf("ERROR");return 1;     }     printf("%d",result);     return 0; }

user: user-0
content: 引用 1 楼 user-2的回复: #include <stdio.h> #include <stdlib.h>  int main() {     int a,b,result;     char op;     scanf("%d %c %d",&a,&op,&b);     switch(op)     {     case '+':result=a+b;break;     case '-':result=a-b;break;     case '*':result=a*b;break;     case '/':result=a/b;break;     case '%':result=a%b;break;     default:printf("ERROR");return 1;     }     printf("%d",result);     return 0; }   谢谢了，真的帮到我了

user: user-2
content: #include <stdio.h> #include <stdlib.h>  int main() {     int a,b,result;     char op;     scanf("%d %c %d",&a,&op,&b);     switch(op)     {     case '+':result=a+b;break;     case '-':result=a-b;break;     case '*':result=a*b;break;     case '/':result=a/b;break;     case '%':result=a%b;break;     default:printf("ERROR");return 1;     }     printf("%d",result);     return 0; }
user-0 提问: c语言问题

回复:
user: user-1
content: 创建一个130空间的int数组，初值为1，对输入字符串遍历一遍，每个字符进行标记，比如出现字符“a”，用ASCII码做下标，把这个数组下标置为1，即保证这个字符出现过，然后，先从''A到Z，再从a到z，找到的第一个就是最大的
user-0 提问: 这个哪里错了有大佬知道吗

回复:
user: user-0
content: 引用 4 楼 海鸥的泪眸的回复:把你的变量都定义为double类型，谁规定存钱都是整数，系统测试你程序的时候会输入小数的，兄弟！ 老铁。。。看题目要求啊

user: user-0
content: 引用 3 楼 tianyingang的回复: 你的程序输出是多少？ 好啦谢谢！！！！！！！！！

user: user-0
content: 引用 2 楼 user-3的回复:输出样例： sum=53844.53 看漏了！！谢谢！！！！！！！

user: user-1
content: 把你的变量都定义为double类型，谁规定存钱都是整数，系统测试你程序的时候会输入小数的，兄弟！

user: user-2
content: 你的程序输出是多少？

user: user-3
content: 输出样例： sum=53844.53

user: user-0
content: 求解答。。
user-0 提问: 掷骰子游戏，救救孩子吧

回复:
user: user-1

user: user-0
content: 1，提示用户输入y就算准备好开始游戏，程序显示出三个骰子各自的数值，以及三个骰子加起来的总和数。结束后问用户还要不要再来，y再来，n退出。 2，如果筛子出现111,222,333,444,555,666的组合就打印花屏幕恭喜用户中彩。 3，每次扔骰子前邀请用户输入数值下注，如果用户博大小赢了就赚投注2倍的点数，如果碰到111,222,333之类的中彩组合则赢10倍的点数。 4，能够设计一个帮助用户显示所剩点数的机制，用户开始游戏时有300点，每次投注最少不能少于50点，每次投注额只能是50点的倍数。 系统记录用户还剩多少点。 5，每轮游戏前提示用户当前的点数以及用户游戏的次数，用户一共赢了多少次，输了多少次。
user-0 提问: 求大佬进来看一眼（关于循环数）

回复:
user: user-1
content: /* Bailian2952 循环数 */  #include <stdio.h> #include <string.h>  #define BASE 10 #define N 60 char s[N + 1];  int main() { 	int len, i;  	while (~scanf("%s", s)) { 		len = strlen(s);  		int ans = 0, flag = 1; 		for (i = len - 1; i/*等价 i!=0 */; i--) {			//从字符串的最后，也就是数字的最低位开始 			ans += (s[i] - '0') * (len + 1);				//每一位数乘以（数字的长度+1）比如142857最低位就是7*（6+1）= 49 			if (ans % BASE != 9) { flag = 0; break; }		//查看最后一位ans是不是9,不是说明不是循环数，flag标记，结束循环 			ans /= BASE;									//去除低位49->4 		} 		if (flag) { 			len = (len + 1) / 2;							//将数字对半分开,查看每一组对应位置相加是否为9 			for (i = 0; i < len; i++) {						//比如142857—》142 and 857 ：1+8 4+2 2+7 				if (s[i] - '0' + s[i + len] - '0' != 9) {		//-'0'只是做一个类型转换 					flag = 0; 					break; 				} 			} 		}  		printf("%d\n", flag); 	}  	return 0; }

user: user-0
content: for(i = len - 1; i; i--) {             ans += (s[i] - '0') * (len + 1);             if(ans % BASE != 9) {flag = 0; break;}             ans /= BASE;         }这个for循环真的看不懂什么意思    大佬讲讲吧！

user: user-2
content: 题目不是写得很清楚了么？ 循环数的定义就是n位数字乘1~n都是原数字的一种分割组合 引用 3 楼 程序员00h 的回复:[quote=引用 2 楼 Italink的回复:] /* Bailian2952 循环数 */  #include <stdio.h> #include <string.h>  #define BASE 10 #define N 60 char s[N + 1];  int main() { 	int len, i;  	while (~scanf("%s", s)) { 		len = strlen(s);  		int ans = 0, flag = 1; 		for (i = len - 1; i/*等价 i!=0 */; i--) {			//从字符串的最后，也就是数字的最低位开始 			ans += (s[i] - '0') * (len + 1);				//每一位数乘以（数字的长度+1）比如142857最低位就是7*（6+1）= 49 			if (ans % BASE != 9) { flag = 0; break; }		//查看最后一位ans是不是9,不是说明不是循环数，flag标记，结束循环 			ans /= BASE;									//去除低位49->4 		} 		if (flag) { 			len = (len + 1) / 2;							//将数字对半分开,查看每一组对应位置相加是否为9 			for (i = 0; i < len; i++) {						//比如142857—》142 and 857 ：1+8 4+2 2+7 				if (s[i] - '0' + s[i + len] - '0' != 9) {		//-'0'只是做一个类型转换 					flag = 0; 					break; 				} 			} 		}  		printf("%d\n", flag); 	}  	return 0; }   不是   这些能看懂    不好意思  我没说清楚   我不知道为什么要用for循环这样判断   是循环数的什么定理吗[/quote]

user: user-1
content: https://baike.baidu.com/item/%E5%BE%AA%E7%8E%AF%E6%95%B0/2519004?fr=aladdin

user: user-0
content: 引用 2 楼 Italink的回复: /* Bailian2952 循环数 */  #include <stdio.h> #include <string.h>  #define BASE 10 #define N 60 char s[N + 1];  int main() { 	int len, i;  	while (~scanf("%s", s)) { 		len = strlen(s);  		int ans = 0, flag = 1; 		for (i = len - 1; i/*等价 i!=0 */; i--) {			//从字符串的最后，也就是数字的最低位开始 			ans += (s[i] - '0') * (len + 1);				//每一位数乘以（数字的长度+1）比如142857最低位就是7*（6+1）= 49 			if (ans % BASE != 9) { flag = 0; break; }		//查看最后一位ans是不是9,不是说明不是循环数，flag标记，结束循环 			ans /= BASE;									//去除低位49->4 		} 		if (flag) { 			len = (len + 1) / 2;							//将数字对半分开,查看每一组对应位置相加是否为9 			for (i = 0; i < len; i++) {						//比如142857—》142 and 857 ：1+8 4+2 2+7 				if (s[i] - '0' + s[i + len] - '0' != 9) {		//-'0'只是做一个类型转换 					flag = 0; 					break; 				} 			} 		}  		printf("%d\n", flag); 	}  	return 0; }   不是   这些能看懂    不好意思  我没说清楚   我不知道为什么要用for循环这样判断   是循环数的什么定理吗
user-0 提问: 线程等待函数 pthread_join(pthread_t tid, void **rval_ptr) 为什么第二个参数要定义成二级指针？

回复:
user: user-0
content: copies the exit status of the target thread (i.e., the value that the target thread supplied to pthread_exit(3)) into  the  location  pointed  to  by *retval.   本身pthread_exit(void *retval)函数参数就是个指针，pthread_exit(3)是什么用法？

user: user-1
content: If retval is not NULL, then pthread_join() copies the exit status of the target thread (i.e., the value that the target thread supplied to pthread_exit(3)) into  the  location  pointed  to  by        *retval.  If the target thread was canceled, then PTHREAD_CANCELED is placed in *retval  这是一个传入传出参数

user: user-0
content: 网上大多数例子都是调用函数时将这个指针参数设置成了NULL

user: user-0
content: 请问有没有例子可以加深理解？

user: user-2
content: 二级指针就说明*rval_ptr会修改啊，猜测函数内部实现为： 会申请内存存取数据：mem = malloc(xxx) 最后*rval_ptr = mem
user-0 提问: 小白初学指针 有些问题

回复:
user: user-1
content: scanf的第二个参数是一个地址，表明输入转换后的数字写进这个地址里，而a[j][i]是个变量，相当于你是在用这个变量的值来作为地址。

user: user-2
content: 表达式a[j][i]是一个整体。

user: user-0
content: 我明白了 二位数组 数组名传递的是a[0]的地址 并非a[0][0] 所以为出现问题 感谢大佬！

user: user-0
content: 引用 1 楼 user-3 的回复:&a[j][i] 谢谢大佬回答 能编译了 但是我想问题下 数组名不也是指针吗？为什么在scanf下也要加取址符号？

user: user-3
content: &a[j][i]
user-0 提问: 有大神能帮我看看 这个程序为什么查不出来吗？

回复:
user: user-0
content: 引用 1 楼 user-2的回复: #include<stdio.h> #include<stdlib.h> #define N 10 void main() { 	int array[N] = { 98,87,81,79,52,49,33,21,18,6 }; 	int x = 81; 	int location; 	int bottom = 0; 	int top = N - 1; 	int mid; 	int flag = 0; 	while (bottom <= top) 	{ 		mid = (bottom + top) / 2; 		if (array[mid] == x) 		{ 			location = mid; 			flag = 1; 			break; 		} 		else if (bottom == top)	//未找到需要结束循环 			break; 		else if (array[mid] < x) //反了 			top = mid-1;			  		else 			bottom = mid+1 ; 	} 	if (flag == 0) 		printf("不存在!\n"); 	else 		printf("%d 在数组中的位置是：%d \n", x, location + 1); 	system("pause"); } 谢谢您了，我是一名刚学C语言的学生，感谢您在百忙之中对我做出的指导。这个程序调了好久，谢谢您的帮忙。

user: user-1
content: 自己调试下呗，难道以后每个问题都要来论坛上问人么？ windows上vs linux上gdb都可以逐行调试，再不济自己加点printf总会吧

user: user-2
content: #include<stdio.h> #include<stdlib.h> #define N 10 void main() { 	int array[N] = { 98,87,81,79,52,49,33,21,18,6 }; 	int x = 81; 	int location; 	int bottom = 0; 	int top = N - 1; 	int mid; 	int flag = 0; 	while (bottom <= top) 	{ 		mid = (bottom + top) / 2; 		if (array[mid] == x) 		{ 			location = mid; 			flag = 1; 			break; 		} 		else if (bottom == top)	//未找到需要结束循环 			break; 		else if (array[mid] < x) //反了 			top = mid-1;			  		else 			bottom = mid+1 ; 	} 	if (flag == 0) 		printf("不存在!\n"); 	else 		printf("%d 在数组中的位置是：%d \n", x, location + 1); 	system("pause"); }
user-0 提问: 编写程序输入10个整数，查找并打印不同的数字的个数

回复:
user: user-0
content: 引用 1 楼 user-2 的回复： #include <stdio.h> #include <stdlib.h>  int main() {     int a[10],i,j,n=0;     for(i=0;i<10;i++)     {         scanf("%d",&a[i]);         for(j=0;j<i;j++)         {             if(a[i]==a[j])                 break;         }         if(j>=i)    n++;     }     printf("%d",n);     return 0; }  谢谢谢

user: user-1
content: 引用 1 楼 user-2的回复: #include <stdio.h> #include <stdlib.h>  int main() {     int a[10],i,j,n=0;     for(i=0;i<10;i++)     {         scanf("%d",&a[i]);         for(j=0;j<i;j++)         {             if(a[i]==a[j])                 break;         }         if(j>=i)    n++;     }     printf("%d",n);     return 0; }   奥，看明白了，没问题。

user: user-1
content: 引用 1 楼 user-2的回复: #include <stdio.h> #include <stdlib.h>  int main() {     int a[10],i,j,n=0;     for(i=0;i<10;i++)     {         scanf("%d",&a[i]);         for(j=0;j<i;j++)         {             if(a[i]==a[j])                 break;         }         if(j>=i)    n++;     }     printf("%d",n);     return 0; }   输入那里的循环是不是有问题？刚输入一个值就进里面的循环开始判断了。

user: user-2
content: #include <stdio.h> #include <stdlib.h>  int main() {     int a[10],i,j,n=0;     for(i=0;i<10;i++)     {         scanf("%d",&a[i]);         for(j=0;j<i;j++)         {             if(a[i]==a[j])                 break;         }         if(j>=i)    n++;     }     printf("%d",n);     return 0; }
user-0 提问: 小白求救

回复:
user: user-1
content: 你可以逐个字符获取，然后乘以百乘以千这样计算进一个整型变量，相当于把一个字符的数字转换为了一个整数的数字，当检测到非数字的时候，进行符号的判断，然后进行计算

user: user-2
content: 先找到表达式中“+”的位置，根据这个位置截取加数和被加数，之后用atoi()函数将加数和被加数变为整型，相加之后，再用itoa()函数把和变为字符串。

user: user-3
content: atoi

user: user-0
content: 引用 1 楼 user-4的回复:用字符数组，然后循环每个字符进行加法运算 哥们，我还是不懂，你可以用代码实现一下吗

user: user-4
content: 用字符数组，然后循环每个字符进行加法运算
user-0 提问: 创建窗口的样式里，有几个宏的值大小相同是怎么回事？

回复:
user: user-0
content: 引用 3 楼 user-1 的回复:不是吧 child貌似是窗体才会有 普通控件没有 控件不就是作为子窗体的吗？

user: user-1
content: 不是吧 child貌似是窗体才会有 普通控件没有

user: user-0
content: 引用 1 楼 user-1 的回复:因为是用在不同地方的，只有窗体才会有最大化按钮，控件没有。tabstop也是针对控件的，窗体没有这个特性 是不是设置了WS_CHILD才会认为0x00 01 00 00是控件，而没设置WS_CHILD就会认为0x00 01 00 00是最大化按钮？

user: user-1
content: 因为是用在不同地方的，只有窗体才会有最大化按钮，控件没有。tabstop也是针对控件的，窗体没有这个特性
user-0 提问: 求char转int 方法类似atoi函数的功能

回复:
user: user-0
content: 引用 2 楼 六道佩恩 的回复： #include "stdio.h" int main( void) { 	char str[100]="42DC0000"; 	int a=0; 	sscanf(str, "%x", &a);	//以str所谓输入的内容，按%x规则提取到&a  	printf("%x",a); 	return 0;  }  万分感谢大佬在百忙之中解答我的问题，因为刚加完班所以这么晚回贴，谢谢大佬我亲测可行，比心

user: user-0
content: 引用 1 楼 user-2 的回复：sscanf %x万分感谢大佬在百忙之中解答我的问题，因为刚加完班所以这么晚回贴，谢谢大佬我亲测可行，比心

user: user-1
content: #include "stdio.h" int main( void) { 	char str[100]="42DC0000"; 	int a=0; 	sscanf(str, "%x", &a);	//以str所谓输入的内容，按%x规则提取到&a  	printf("%x",a); 	return 0;  }

user: user-2
content: sscanf %x
user-0 提问: C语言  if嵌套

回复:
user: user-1
content: 修改：switch 换成if 更容易实现 另外 需要考虑满一百两百 不同的换购情况 得另加if

user: user-1
content: 编程思想 if 里嵌套 switch 用于换购产品 再写一条 printf用于 换购后总金额  在写printf 换购内容 最后else 不参加换购 思想告诉你 怎么实现自己思考

user: user-2
content: 能先百度学习下吗

user: user-3
content: 你要是基础都不会，写给你你也不知道，很简单的，自己看看，写出代码有问题再拿出来

user: user-4
content: 很基础的题目，这应该是课本上的课后题吧，没有多难。建议你自己先写写，遇到问题再提出来

user: user-5
content: 就是if和switch，看书吧，看完条件判断语句，就OK了，要是打算完成个作业，就直接百度一个

user: user-6
content: 看书去，基础的东西看都没看
user-0 提问: C语言问题

回复:
user: user-0
content: 引用 10 楼 六道佩恩的回复: #include "stdio.h" int main( void) { 	char str[100]; 	gets(str);			//建议用fgets  	int i=0; 	for( i=0 ; str[i]!='\0' ; i++ ) 		if( str[i]>='a' && str[i]<='z' ) 			str[i]-=('a'-'A'); 	printf("%s",str); 	return 0;  }   谢谢大佬！！！

user: user-1
content: #include "stdio.h" int main( void) { 	char str[100]; 	gets(str);			//建议用fgets  	int i=0; 	for( i=0 ; str[i]!='\0' ; i++ ) 		if( str[i]>='a' && str[i]<='z' ) 			str[i]-=('a'-'A'); 	printf("%s",str); 	return 0;  }

user: user-2
content: 引用 7 楼 elk.✨ 的回复:[quote=引用 4 楼 早打大打打核战争的回复:]呃，C的话把int c提出来单独定义即可（或者启用C99支持），putchar(10)可以写成putchar(c)，还可以省一个字符~~~  老铁，严格按照题目要求[/quote]  它只是传一个输入数据给程序，然后读程序的输出，根本不知道程序内部的实现~~~

user: user-3
content: 引用 5 楼 elk.✨ 的回复:[quote=引用 1 楼 自信男孩的回复:]把%s改成%c就可以了。a[i]是char类型，为什么要用%s输出呢 看题目要求啊大哥[/quote]  你的程序没有问题吗？用%s输出char类型的数据，肯定是有问题呢

user: user-0
content: 引用 4 楼 早打大打打核战争的回复:呃，C的话把int c提出来单独定义即可（或者启用C99支持），putchar(10)可以写成putchar(c)，还可以省一个字符~~~  老铁，严格按照题目要求

user: user-0
content: 引用 2 楼 零点、的回复:#define MAX_LEN (64)     char str[MAX_LEN];     memset(str, '\0', sizeof(str));     scanf("%s", str);     printf("strlen(str) = %d\n", strlen(str));      if (strlen(str) > (MAX_LEN - 1)) {         printf("input str too long!\n");         return -1;     }     for (int i = 0; str[i] != '\0'; i++) {         if (str[i] >= 'a' && str[i] <= 'z') {             str[i] = str[i] - 'a' + 'A';         }     }     printf("%s\n", str);     return 0; 老铁，严格按照题目要求

user: user-0
content: 引用 1 楼 自信男孩的回复:把%s改成%c就可以了。a[i]是char类型，为什么要用%s输出呢 看题目要求啊大哥

user: user-2
content: 呃，C的话把int c提出来单独定义即可（或者启用C99支持），putchar(10)可以写成putchar(c)，还可以省一个字符~~~

user: user-2
content: #include <stdio.h>  int main() {   for (int c; (c = getchar()) != 10 ? 1 : (putchar(10), 0);)     (c < 97) || (c > 122) ? putchar(c) : putchar(c - 32);    return 0; }

user: user-4
content: #define MAX_LEN (64)     char str[MAX_LEN];     memset(str, '\0', sizeof(str));     scanf("%s", str);     printf("strlen(str) = %d\n", strlen(str));      if (strlen(str) > (MAX_LEN - 1)) {         printf("input str too long!\n");         return -1;     }     for (int i = 0; str[i] != '\0'; i++) {         if (str[i] >= 'a' && str[i] <= 'z') {             str[i] = str[i] - 'a' + 'A';         }     }     printf("%s\n", str);     return 0;

user: user-3
content: 把%s改成%c就可以了。a[i]是char类型，为什么要用%s输出呢
user-0 提问: 初混c/c++板块，为什么多数人直接伸手要代码？

回复:
user: user-1
content: 新手嘛，正常，我也一样。

user: user-2
content: 因为来这的人并不都是专业的，有的只业余的,并不想研究太深入。还有的人是想要示例代码，方便理解

user: user-3
content: 防坑指南——远离那些1级号并且发过多贴但结帖率低的 辛辛苦苦不就是为了个分吗

user: user-3
content: 那些人只是要交作业又不是学要编程 只有秃者才学编程，像俺们这种头发飘逸的当然只要代码  像那种一上来就把题目扔上来的我回复都懒得回复 有些人只是求一些用法的，我偶尔会写些Demo

user: user-4
content: 有的人就是混的

user: user-5
content: 说得很对！不仅如此，好多还是拿了代码就跑的，不回复也不结帖。
user-0 提问: gets(str[i])语句只能得到输入的第一个值

回复:
user: user-0
content: 引用 1 楼 user-2的回复:char *idNum[MAX]; 只是个字符指针的数组,你需要用手动申请内存等方法让数组里每一个指针都指向合法的内存区域 才能够在后面用gets接收多个字符串 确实是这个问题，搞定了，非常感谢

user: user-1
content: char *idNum[MAX]; for(int i=0;i<n;i++) {     idNum[i] = malloc(MAX_LEN); }

user: user-2
content: char *idNum[MAX]; 只是个字符指针的数组,你需要用手动申请内存等方法让数组里每一个指针都指向合法的内存区域 才能够在后面用gets接收多个字符串
user-0 提问: SetPixel等函数检测到未定义

回复:
user: user-1
content: msvc和gcc用的头文件/库并不是同一套,它们都有各自的实现 msvc估计是会自动去lib配置里去找需要的库,并且链接进来,或者它的头文件里就有#pragma comment(lib,"xxxx")引入 gcc除了最基本的库,其他的都需要你手动包含

user: user-0
content: 引用 3 楼 ooolinux 的回复:控制台项目还是win32项目？ 控制台呀，，，看main不就看出来了吗

user: user-2
content: 控制台项目还是win32项目？

user: user-0
content: 我测试手动包含静态库发现可以实现了 gcc hdc.c -o hdc.exe -lgdi32 那么，现在的问题是，，，为啥它有库却没有去包含？包含哪些库由什么决定？

user: user-3
content: #include "windows.h"换成#include <windows.h>试一下

user: user-4
content: 引用 8 楼 六道佩恩 的回复:[quote=引用 6 楼 早打大打打核战争 的回复:] 这就是C++的一个缺陷（从C带来的），头文件和库之间没有对应关系，后来的语言都对这个问题做了改进，诸如Delphi的uses、C#的using、Java的import等等 这个是跟语言有关还是编译器有关？会不会是在哪里记录了头文件与库的索引？[/quote]  严格来说是实现相关的，比如MASM中就有个includelib，指出需要链接某个库，如果在头文件中增加一个预处理指令，比如叫#includelib就解决了

user: user-1
content: 引用 7 楼 六道佩恩 的回复:[quote=引用 5 楼 stherix 的回复:] msvc和gcc用的头文件/库并不是同一套,它们都有各自的实现 msvc估计是会自动去lib配置里去找需要的库,并且链接进来,或者它的头文件里就有#pragma comment(lib,"xxxx")引入 gcc除了最基本的库,其他的都需要你手动包含 在gcc上用了许多windows的函数，鼠标模拟、键盘模拟、控制台函数、窗口移动与创建、消息的接收与发送等等，这些算常用吗？目前都正常使用不用包含，但同样身为windows api的画图函数却需要包含，，感觉有点怪，不知道是不是有哪里记录了头文件的与实现库的索引？[/quote]  msvc的头文件支持指示嵌入lib文件的写法,只要你引用了这个头文件,他一般会帮你导入lib 但是这不是c/c++标准,所以gcc必须自己写在编译连接命令里

user: user-0
content: 引用 6 楼 早打大打打核战争 的回复:这就是C++的一个缺陷（从C带来的），头文件和库之间没有对应关系，后来的语言都对这个问题做了改进，诸如Delphi的uses、C#的using、Java的import等等 这个是跟语言有关还是编译器有关？会不会是在哪里记录了头文件与库的索引？

user: user-0
content: 引用 5 楼 stherix 的回复:msvc和gcc用的头文件/库并不是同一套,它们都有各自的实现 msvc估计是会自动去lib配置里去找需要的库,并且链接进来,或者它的头文件里就有#pragma comment(lib,"xxxx")引入 gcc除了最基本的库,其他的都需要你手动包含 在gcc上用了许多windows的函数，鼠标模拟、键盘模拟、控制台函数、窗口移动与创建、消息的接收与发送等等，这些算常用吗？目前都正常使用不用包含，但同样身为windows api的画图函数却需要包含，，感觉有点怪，不知道是不是有哪里记录了头文件的与实现库的索引？

user: user-4
content: 这就是C++的一个缺陷（从C带来的），头文件和库之间没有对应关系，后来的语言都对这个问题做了改进，诸如Delphi的uses、C#的using、Java的import等等
user-0 提问: 请教大佬

回复:
user: user-1
content: 堆栈本来就是先进后出、放进去再拿出来就实现你的功能了。 首先你要有一个堆栈。如果不要求自己实现堆栈、用std::Stack就可以了。百度自己搜一下

user: user-0
content: 用reverse的话应该怎么写啊，一直写不对

user: user-1
content: 引用 3 楼 weixin_44963498 的回复:我搜了的，但是没搜到。我是真的不会，太笨了  希望你学会stack类的用法。学会使用搜索引擎  #include <iostream> #include <stack>  using namespace std;  int main() { 	stack<int> tempStack; 	tempStack.push(2); 	tempStack.push(4); 	tempStack.push(6); 	tempStack.push(8); 	tempStack.push(10); 	 	while (!tempStack.empty()) 	{ 		cout << tempStack.top() << endl; 		tempStack.pop(); 	} 	system("pause"); 	return 0; }

user: user-2
content: 用一个std::stack把数组中的数push进去，然后在pop出来就可以了

user: user-3
content: 另写一个Stack. java  包含出栈 入栈 取栈顶 非空否的函数 然后在另一个Java文件里调用出栈函数pop不就好了  设置循环输出 print(stack.pop()+ " ");

user: user-0
content: 我搜了的，但是没搜到。我是真的不会，太笨了😢

user: user-0
content: 我搜了的，但是没搜到。我是真的不会，太笨了😥
user-0 提问: 函数返回导致 指针变成野指针?

回复:
user: user-1
content: 我也遇到了相同的问题， 当方法按值返回对象的时候，对象有指针的时候，调用拷贝函数的时候，系统生成的临时对象的 指针成员函数就会变成野指针。  你找到解决办法了吗？

user: user-2
content: 很有可能你函数 传的是 指针的值,而不是地址. 导致 在某个函数里面free了 ,但返回到函数 指针还是指向原来的

user: user-3
content: 就是在關鍵位置輸出關鍵内容，可以是標準輸出，也可以寫到文件裏。

user: user-4
content: SwapOne里面的RKey只是个建立在栈上的局部变量 当函数返回的时候,局部变量都被自动释放了,所指向的内存也就是非法 无法在函数体外使用

user: user-5
content: 这个有很多种可能，比如多线程其他线程操作了这个变量，还有是t的内存在LBTreeDelete已经释放了，只是暂时数据没有被更改，所以没看到出问题

user: user-0
content: 引用 3 楼 老马何以识途 的回复:首先，你這段代碼裏的數據結構和部分函數還不清楚細節如何，很難去判斷。看地址好像是t被移位了，那麽正如樓上所説的，有沒有別的綫程對&t做了操作？  第二點，swapOne的返回值必須馬上使用，比如直接memcpy到一個本地變量，不能到下一個語句操作，會有不可預期的結果。  第三點，調試程序比較準確的是寫日志，單步執行有時候不太準確。 请教下写日志是什么意思?

user: user-6
content: 1）如楼上所述，如果不是每次都出现并且用到多线程，可能是其他线程对这个内存修改了 2）LBTreeDelete这个函数的问题，先把这个句注释掉，如果问题不出现那就能确定是这个函数逻辑不对

user: user-3
content: 首先，你這段代碼裏的數據結構和部分函數還不清楚細節如何，很難去判斷。看地址好像是t被移位了，那麽正如樓上所説的，有沒有別的綫程對&t做了操作？  第二點，swapOne的返回值必須馬上使用，比如直接memcpy到一個本地變量，不能到下一個語句操作，會有不可預期的結果。  第三點，調試程序比較準確的是寫日志，單步執行有時候不太準確。
user-0 提问: Fn键的键盘码是多少？

回复:
user: user-1
content: 这是键盘的控制器自动处理的，Fn键不产生扫描码，Fn+其他键会被键盘控制器解释为特定的扫描码发出，这和control、alt、win之类的键不一样

user: user-2
content: 估摸着是由键盘的驱动程序或者嵌入式硬件程序直接处理掉了，根本不转发给系统消息队列

user: user-3
content: Fn是特色功能，不是所有电脑都有，既然不是一个标准，当然没有对应的key code
user-0 提问: 在线等，急！！！

回复:
user: user-1
content: 引用 4 楼 飞龙KO 的回复:#include <stdio.h> #include <malloc.h> #define MAXSIZE 10 typedef struct {     int Q[MAXSIZE];     int front; //队头指示器     int rear;  //队尾指示器 } SeqQueue;  void InitQueue(SeqQueue *Q_Seq);//初始化操作，将Q初始化为一个空的循环队列 int EnterQueue(SeqQueue *Q_Seq, int x); //入队，将元素x入队 int DeleteQueue(SeqQueue *Q_Seq, int *x); //出队，删除队列的队头元素，用x返回其值 int main(void) {     SeqQueue S;     SeqQueue *s = &S;     int x, i;     int *a = &x;     InitQueue(s);     for(i = 1; i < MAXSIZE; i++)         EnterQueue(s, i*(rand()%10));     for(i = 1; i < MAXSIZE; i++)     {         DeleteQueue(s, a);         printf("%d ", x);     }     printf("\n");     return 0; }  void InitQueue(SeqQueue *Q_Seq)//初始化操作，将Q初始化为一个空的循环队列 {     Q_Seq->front = Q_Seq->rear = 0; }  int EnterQueue(SeqQueue *Q_Seq, int x) //入队，将元素x入队 {     if((Q_Seq->rear + 1) % MAXSIZE == Q_Seq->front) //尾指针加一追上头指针，队列已满         return 0;     Q_Seq->Q[Q_Seq->rear] = x;     Q_Seq->rear = (Q_Seq->rear + 1) % MAXSIZE;     return 1; }  int DeleteQueue(SeqQueue *Q_Seq, int *x) //出队，删除队列的队头元素，用x返回其值 {     if((Q_Seq->front == Q_Seq->rear)) //队列为空         return 0;     *x = Q_Seq->Q[Q_Seq->front];     Q_Seq->front = (Q_Seq->front + 1) % MAXSIZE; //重新设置队头指针     return 1;//操作成功 }  MAXSIZE 换成MAX

user: user-1
content: #include <stdio.h> #include <malloc.h> #define MAXSIZE 10 typedef struct {     int Q[MAXSIZE];     int front; //队头指示器     int rear;  //队尾指示器 } SeqQueue;  void InitQueue(SeqQueue *Q_Seq);//初始化操作，将Q初始化为一个空的循环队列 int EnterQueue(SeqQueue *Q_Seq, int x); //入队，将元素x入队 int DeleteQueue(SeqQueue *Q_Seq, int *x); //出队，删除队列的队头元素，用x返回其值 int main(void) {     SeqQueue S;     SeqQueue *s = &S;     int x, i;     int *a = &x;     InitQueue(s);     for(i = 1; i < MAXSIZE; i++)         EnterQueue(s, i*(rand()%10));     for(i = 1; i < MAXSIZE; i++)     {         DeleteQueue(s, a);         printf("%d ", x);     }     printf("\n");     return 0; }  void InitQueue(SeqQueue *Q_Seq)//初始化操作，将Q初始化为一个空的循环队列 {     Q_Seq->front = Q_Seq->rear = 0; }  int EnterQueue(SeqQueue *Q_Seq, int x) //入队，将元素x入队 {     if((Q_Seq->rear + 1) % MAXSIZE == Q_Seq->front) //尾指针加一追上头指针，队列已满         return 0;     Q_Seq->Q[Q_Seq->rear] = x;     Q_Seq->rear = (Q_Seq->rear + 1) % MAXSIZE;     return 1; }  int DeleteQueue(SeqQueue *Q_Seq, int *x) //出队，删除队列的队头元素，用x返回其值 {     if((Q_Seq->front == Q_Seq->rear)) //队列为空         return 0;     *x = Q_Seq->Q[Q_Seq->front];     Q_Seq->front = (Q_Seq->front + 1) % MAXSIZE; //重新设置队头指针     return 1;//操作成功 }

user: user-2
content: 编写队列的接口～入队，出队等函数接口

user: user-0
content: 引用 1 楼 飞龙KO的回复:没明白，题目. 但是题目就是这个，我也没明白

user: user-1
content: 没明白，题目.
user-0 提问: 请问  return （void *）8 这条语句是什么意思？

回复:
user: user-1
content: 指针本身就是一串二进制啊，意思就是返回一个void指针类型，它的值是8

user: user-2
content: 返回  void * 类型 的指针，值 是 8 。

user: user-3
content: void指针， 可以转成 int*

user: user-0
content: 假如机器存储器地址是16位的，是否返回的值是0x0008？

user: user-0
content: 那到底返回的是数值8还是指针？

user: user-4
content: 指针是表示地址的，本质就是一个无符号整形数

user: user-5
content: 将数字8转化为(void *)指针，作为函数的返回值

user: user-6
content: // 如： void* test() { int i = 8; return (void*)i;  // 意思就是你要返回的值是 i  但是 函数声明的返回值是 void*  所以要强制转换类型后 才能正确返回 }
user-0 提问: VC 串口发送数据包含0X00,该如何处理？

回复:
user: user-0
content: 好的，我试一试。

user: user-1
content: 发送字节长度不应该是由ilen控制的吗，增加4个字节试试?

user: user-2
content: int ilen = strlen( (char *)cCheckData); 这里有问题 因为strlen是计算到\0为止的长度 所以实际要发送的字符数量,必须传进来,不能用strlen来计算

user: user-0
content: int writecom(char* data, int len);  unsigned char HexCheckSum(unsigned char* cCheckData) { 	int ilen = strlen( (char *)cCheckData); 	unsigned char iChecksum = 0; 	for (int i=0; i< ilen; i++) 	{ 		iChecksum += (unsigned char)cCheckData[i]; 	} 	return iChecksum; }  BYTE nCmdData[] = {0x33,0x01,0x12,0x00,0x00,0x00,0x01}; HexCheckSum(nCmdData) 其实在这一步，就只能算到0X12了。 也可以忽略HexCheckSum  writecom（nCmdData， ilen）到这里也是一样，到0X12就结束了，后面的无法发送。

user: user-2
content: 应该写出你的代码 让别人排错和修改
user-0 提问: 一些常见的编程

回复:
user: user-0
content: 你说的确实很对，下次注意，谢谢

user: user-0
content: 引用 5 楼 Jackie豪的回复:关注一波吧大神大神23333 关注啦，我才刚开始学习

user: user-0
content: 引用 6 楼 636f6c696e的回复:分享类建议放在博客 好的👌明白了，谢谢指导

user: user-1
content: （1）第5个的 while 那句语句 的位置不对。 你看， main 函数名后面没有 紧跟 花括号 就知道有问题了。应该是下面这样：  #include <stdio.h> int main() { 	int m, n, r; 	printf("请输入两个数："); 	scanf("%d%d", &m, &n); 	r = m % n; 	while (r != 0) { 		m = n; 		n = r; 		r = m % n; 	} 	printf("最大公约数为%d\n", n); 	return 0; }  （2）考虑到C程序符合标准文档的要求，以及可移植性的话，一般推荐把 main 函数的参数表写为以下两种形式之一：  int main(void)  或者  int main(int argc, char const *argv[])   欢迎及时结帖、给分！：）

user: user-2
content: 第五个程序编译能通过吗？r还没定义就是用了。

user: user-3
content: 分享类建议放在博客

user: user-4
content: 关注一波吧大神大神23333

user: user-5

user: user-0
content: 嘻嘻，是大佬吗，多多指教

user: user-6
content: 路过，打个酱油
user-0 提问: 大神们，求解答

回复:
user: user-1
content: 素数的定义：在大于1的自然数中，除了1和它本身以外，不再有其他因数的数。

user: user-2
content: 不能说是你的算法错了，应该是某些地方没有理解到位哈！ 素数的定义是除去1和本身能整除它以外，其他的数不能。 举个例子，求17是不是素数，那么就是求在2~16中有没有数能够整除它，按照定义的话就有思路写出程序了 #include <stdio.h> int main() { int i,j; for(i=1;i<=100;i++) { for(j=2;j<i;j++) if(i%j==0)//这里就相当于是在算举的例子中的2~16中有没有能够整除17的，如果有的话，那就说明不是素数，因为不满足素数的定义 { break； } if(j==i) printf("%d\n",i);//输出一个数然后换行可以写在一起的，减少代码嘛！ } printf("\n"); return 0; } 这里只是算1~100以内的素数的话就可以用2~N-1的方法循环判断，如果过大的话就是sqrt开方后求

user: user-3
content: 算法错了~~   #include <stdio.h> int main() { 	int i,j; 	for(i=1; i<=100; i++) { 		for(j=2; j<i; j++) 			if(i%j==0) break; 		if(i==j) printf("%d  ",i); 	} 	return 0; }

user: user-4
content: 输出"%d   " 打几个空格 把数字隔开

user: user-4
content: for(i=1;i<=100;i++) { for(j=2;j<=i;j++) { if(i/j!=0) continue; } printf("%d",i); }
user-0 提问: 编程萌新求助，C primer plus第二章编程练习题第5题

回复:
user: user-1
content: 引用 1 楼 user-2_16_com 的回复: cdp@cdp:~/pratise$ gcc br.c  cdp@cdp:~/pratise$ ls a.out  br.c  dayscalc.c cdp@cdp:~/pratise$ ./a.out  Brazil,Russia,India,China. Brazil,Russia. India,China. cdp@cdp:~/pratise$    #include<stdio.h>  void br(); void ic();  int main(void) {    	printf("Brazil,Russia,India,China.\n"); 	br(); 	ic(); 	return 0; }  void br()  { 	printf("Brazil,Russia.\n"); }  void ic() { 	printf("India,China.\n"); }    UBUNTU16， gcc5.4， 编译运行正常。  同学，以后别再用vc6了。都2019年了，建议换个新一点的开发环境，vs2015也行啊。 已正解！同意。

user: user-2
content: cdp@cdp:~/pratise$ gcc br.c  cdp@cdp:~/pratise$ ls a.out  br.c  dayscalc.c cdp@cdp:~/pratise$ ./a.out  Brazil,Russia,India,China. Brazil,Russia. India,China. cdp@cdp:~/pratise$    #include<stdio.h>  void br(); void ic();  int main(void) {    	printf("Brazil,Russia,India,China.\n"); 	br(); 	ic(); 	return 0; }  void br()  { 	printf("Brazil,Russia.\n"); }  void ic() { 	printf("India,China.\n"); }    UBUNTU16， gcc5.4， 编译运行正常。  同学，以后别再用vc6了。都2019年了，建议换个新一点的开发环境，vs2015也行啊。
user-0 提问: 单片机125k门禁卡ID程序

回复:
user: user-0
content: 好的，我想问一下，RFID怎么判断有卡进入或者没卡，然后有卡就开启读卡程序，这样可以节省电。  思路有，程序弄不来

user: user-1
content: 额，谢邀,看了半天不知道你要问个啥， 具体描述下行不？    另外格式化一下你的代码嘛
user-0 提问: break被调函数

回复:
user: user-1
content: for循环后多了分号,break需要在循环体中~~

user: user-2
content: 引用 2 楼 自信男孩 的回复:for循环后多个;分号，break需要在循环体里，加了分号就属于在循环体外了。所以提示错误。

user: user-0
content: 引用 楼主 spoil666的回复:被调函数中break非法 解决了谢谢

user: user-3
content: for循环后多个;分号，break需要在循环体里，加了分号就属于在循环体外了。所以提示错误。
user-0 提问: 为什么输入负数后结果是错的

回复:
user: user-1
content: mint19  设计没啥问题，就是	if (0<=x&&x<10 && (x!=2&&x!=3))   这里应该是这样的吧，不然输入只要大于0，，都是x*x-5+6.。 0<=x<10    0<=x只要大于等于0，结果就是1，1<10肯定是存在的，并且还不等于2和3.输入11， 后面的x!=2 || x!=3,,,这里，等于不参与判断，，你等于2的时候为真，等于3也为真，   应该是&&  ，，不等于2也不等于3 。

user: user-2
content: 单步调试　　　。

user: user-3
content: 引用 3 楼 拥抱Linux 的回复:（1）main里定义的变量x 、y 是 long int 型， 而 fun 的参数表里，传入参数是 Int 型， 那么 向 fun 传入 实参的时候， long int 型的的数据被截断了。但是，按道理 main 里面的 x 本身是没有被改变的呀，而你的输出里， main 里面的 x 的值也变了，这就奇怪了。 （2）在 C语言里没有连续不等式，也就是说，没有「0 <= x < 10」这样的表达式。——嗯，其实也可以这样写，但是这样写的意思和 连续不等式的意思 不是同一个意思， 而是 把 前半部分的不等式表达式的结果（返回值） 与 后面的值进行比较，具体比如， x 的值是 11， 那么 前半部分的 「 0  <= x 」的结果是真， 也就是 1 ， 然后 再用 这个 1 去和后面的 10 比较 ，就是 「 1 < 10 」，那么总的结果还是真， 但是这就和 真正的连续不等式 「 0 <= 11 < 10 」 的结果是完全不同的了。 （3）你先把 变量类型 对应好，然后再测试运行吧。不等式 可以 后面 再 修正。  补充一下，刚刚试运行了你的代码，没有出现你那样的输出结果，俺也纠正一下上面说的「把 long int 截断成 int 」的情况——在数值处于 int 的范围的时候，是没关系的，当数值 大于 int 的范围的时候 才有差异。所以，现在对于你的输出就觉得更加奇怪了！？不会是把代码和可执行程序搞岔了吧？

user: user-3
content: （1）main里定义的变量x 、y 是 long int 型， 而 fun 的参数表里，传入参数是 Int 型， 那么 向 fun 传入 实参的时候， long int 型的的数据被截断了。但是，按道理 main 里面的 x 本身是没有被改变的呀，而你的输出里， main 里面的 x 的值也变了，这就奇怪了。 （2）在 C语言里没有连续不等式，也就是说，没有「0 <= x < 10」这样的表达式。——嗯，其实也可以这样写，但是这样写的意思和 连续不等式的意思 不是同一个意思， 而是 把 前半部分的不等式表达式的结果（返回值） 与 后面的值进行比较，具体比如， x 的值是 11， 那么 前半部分的 「 0  <= x 」的结果是真， 也就是 1 ， 然后 再用 这个 1 去和后面的 10 比较 ，就是 「 1 < 10 」，那么总的结果还是真， 但是这就和 真正的连续不等式 「 0 <= 11 < 10 」 的结果是完全不同的了。 （3）你先把 变量类型 对应好，然后再测试运行吧。不等式 可以 后面 再 修正。
user-0 提问: c语言(初学者)问题

回复:
user: user-1
content: 按顺序执行的、先执行先获得的值就不一样、t-值不一样，直到这个括号里的执行完成、才会再来一次循环

user: user-2
content: 第一个先给s加上t，再给t重新赋值，第二个是先给t重新赋值后s再加上的赋值后的t，两次t不一样。

user: user-3
content: 如果会调试，去调试一下，这样容易学习理解

user: user-4
content: 本来就不会一样啊，把前后顺序换了怎么还会一样呢？

user: user-5
content: t被重新赋值了，s的式子里有t

user: user-6
content: 程序的运行是从上往下依次的，所以算法的顺序对整个程序的运行结果有着很大的影响，所以要注意这些问题

user: user-7
content: 一个在结束循环时加的是上一个循环中的t，一个加的是本次循环中的t

user: user-8
content: 你记住c语言执行顺序是由上到下的，你前后移动位置，值已经发生了改变

user: user-9
content: 因为它在for循环里面和for循环外边是不一样的

user: user-10
content: 不分外面里面，都在循环内，答案不一样是因为s=s+t放在后面，t的值变了

user: user-11
content: 楼主你好，因为s和t计算的顺序不同，所以第二种情况下，t的值会对s的值有影响。楼主可以打断点，或者带入一些简单的例子过一遍程序就知道了。祝楼主更上一层楼

user: user-12
content: S  放前面   T等于你输入的那个d     当时s等于0   运行后  s等于d       S放后面时，是先给t赋值，t等于10×t＋d，然后赋值给s Ps s在前面时    s＝0+d s在后面时    s＝d*10＋d

user: user-13
content: 引用 11 楼 weixin_44858350 的回复:[quote=引用 10 楼 636f6c696e的回复:]真心想学，手机的时间可以读读编程书籍。 [quote=引用 9 楼 weixin_44858350 的回复:] [quote=引用 4 楼 636f6c696e的回复:]没理解为啥这么多用手机编程的，手机这输入速度，能靠谱么？ 因为电脑不可能每时每刻都带在身边，有时候无聊就用手机编呗，手机大部分还是可以编的，只有小部分编不了[/quote][/quote] 初学嘛，看了一些基础步骤，再动手实践，我感觉这样比较容易记住[/quote] 拿纸笔写都比手机强。写完用脑子跑跑。

user: user-14
content: t值发生了变化，语句加在前面，s=s+t里的t是原始的t，即未经本次循环处理的t，而加在后面，则是经过本次循环处理的t，发生了变化，因此会出现不同的结果！

user: user-15
content: 什么手机软件啊

user: user-0
content: 引用 10 楼 636f6c696e的回复:真心想学，手机的时间可以读读编程书籍。 [quote=引用 9 楼 weixin_44858350 的回复:] [quote=引用 4 楼 636f6c696e的回复:]没理解为啥这么多用手机编程的，手机这输入速度，能靠谱么？ 因为电脑不可能每时每刻都带在身边，有时候无聊就用手机编呗，手机大部分还是可以编的，只有小部分编不了[/quote][/quote] 初学嘛，看了一些基础步骤，再动手实践，我感觉这样比较容易记住

user: user-16
content: 真心想学，手机的时间可以读读编程书籍。 引用 9 楼 weixin_44858350 的回复:[quote=引用 4 楼 636f6c696e的回复:]没理解为啥这么多用手机编程的，手机这输入速度，能靠谱么？ 因为电脑不可能每时每刻都带在身边，有时候无聊就用手机编呗，手机大部分还是可以编的，只有小部分编不了[/quote]

user: user-0
content: 引用 4 楼 636f6c696e的回复:没理解为啥这么多用手机编程的，手机这输入速度，能靠谱么？ 因为电脑不可能每时每刻都带在身边，有时候无聊就用手机编呗，手机大部分还是可以编的，只有小部分编不了

user: user-17
content: 因为t是变量s=s+t，那么s的值自然会随着t的值变化而变化。在程序中执行加载代码段到内存里进行运算跟你的代码先后顺序有一定的联系。

user: user-18
content: t的值不一样，放前面t的值是经过运算的，放后面t的值是初始的两个不同的值赋给s肯定不一样了
user-0 提问: 萌新求助

回复:
user: user-0
content: 我试试看，谢谢

user: user-1
content: 不清楚，在Linux下用gcc和clang编译、运行的结果都是0。 按理说，fscanf没有读取到%d格式（int型）的值，返回值应该是0，只有发生输入/读取错误 或者 读取到文件末尾的时候返回值才是-1。 另外，建议你试着用比较纯粹的文本编辑器或者就用代码编辑器重新把文本文件的内容复制、粘贴过去保存文件，不要用windows自带的记事本。
user-0 提问: 一行字符串可能含有多个正的浮点数, 请找出这些浮点数, 并输出它们的准确和.

回复:
user: user-1
content: 引用 5 楼 KarivV 的回复: #include <stdio.h> #include <string.h> #include <malloc.h> #include <stdlib.h>  #define MAXLEN 50 #define MAXCOUNT 100  int main() { 	int flag = 0; 	int count = 0, stamp = 0; 	char float_tem[MAXLEN] = ""; 	char **numArr = (char **)malloc(MAXCOUNT * sizeof(char *)); 	for (int i = 0; i < MAXCOUNT; ++i)         { 		numArr[i] = (char *)malloc(MAXLEN * sizeof(char)); 		memset(numArr[i], 0, MAXLEN); 	}     char buff[MAXLEN * MAXCOUNT] = ""; 	fgets(buff, sizeof(buff), stdin);          for (int j = 0; buff[j] != '\n'; ++j)  	{ 		if (buff[j] < '0' || buff[j] > '9') 			continue; 		else 		{ 			memset(float_tem, 0, MAXLEN); 			stamp = 0; 			flag = 0; 			while (1) 			{ 				if (buff[j] == '.') 				{ 					if (flag == 1) 						break; 					else 						flag = 1; 				} 				else if (buff[j] < '0' || buff[j] > '9') 					break; 				float_tem[stamp] = buff[j]; 				++j; 				++stamp; 			} 			memcpy(numArr[count], float_tem, strlen(float_tem)); 			++count; 			--j; 		} 	}  	for (int k = 0; k < count; ++k) 	{ 		printf("%f\n", atof(numArr[k])); 	}  	for (int p = 0; p < MAXCOUNT; ++p) 		free(numArr[p]); 	free(numArr);  	return 0; }   或许我是真的闲吧... 忽略丑陋的排版和拙劣的语法  反正能跑  没试。但是按楼主的描述你的代码估计不行 "123.123.123.123.132.132.132.13.132.123.132"

user: user-2
content: #include <stdio.h> #include <string.h> #include <malloc.h> #include <stdlib.h>  #define MAXLEN 50 #define MAXCOUNT 100  int main() { 	int flag = 0; 	int count = 0, stamp = 0; 	char float_tem[MAXLEN] = ""; 	char **numArr = (char **)malloc(MAXCOUNT * sizeof(char *)); 	for (int i = 0; i < MAXCOUNT; ++i)         { 		numArr[i] = (char *)malloc(MAXLEN * sizeof(char)); 		memset(numArr[i], 0, MAXLEN); 	}     char buff[MAXLEN * MAXCOUNT] = ""; 	fgets(buff, sizeof(buff), stdin);          for (int j = 0; buff[j] != '\n'; ++j)  	{ 		if (buff[j] < '0' || buff[j] > '9') 			continue; 		else 		{ 			memset(float_tem, 0, MAXLEN); 			stamp = 0; 			flag = 0; 			while (1) 			{ 				if (buff[j] == '.') 				{ 					if (flag == 1) 						break; 					else 						flag = 1; 				} 				else if (buff[j] < '0' || buff[j] > '9') 					break; 				float_tem[stamp] = buff[j]; 				++j; 				++stamp; 			} 			memcpy(numArr[count], float_tem, strlen(float_tem)); 			++count; 			--j; 		} 	}  	for (int k = 0; k < count; ++k) 	{ 		printf("%f\n", atof(numArr[k])); 	}  	for (int p = 0; p < MAXCOUNT; ++p) 		free(numArr[p]); 	free(numArr);  	return 0; }   或许我是真的闲吧... 忽略丑陋的排版和拙劣的语法  反正能跑

user: user-3
content: 引用 2 楼 Relongera 的回复:[quote=引用 1 楼 提及的回复:]一行字符串可能含有多个正数, 请找出这些数, 并输出它们的和. ccc语言 emmmmmm，这也太那个了吧[/quote]  那个？？    问心自问，别人为什么要帮你？

user: user-4
content: 一行字符串可能含有多个整数, 请找出这些数, 并输出它们的乘积. ccc语言

user: user-0
content: 引用 1 楼 提及的回复:一行字符串可能含有多个正数, 请找出这些数, 并输出它们的和. ccc语言 emmmmmm，这也太那个了吧

user: user-3
content: 一行字符串可能含有多个正数, 请找出这些数, 并输出它们的和. ccc语言
user-0 提问: C语言疑惑

回复:
user: user-1
content: count = 0; while (count < 3) {     data = get_data();     if (!IsOk(data))             continue;     count++; }

user: user-2
content: 设置一个计数器变量，循环查找，每找到一个就给计数器累加一，检查计数器的值，等于3了就退跳出循环。

user: user-2
content: 设置一个计数器变量，循环查找，每找到一个就给计数器累加一，检查计数器的值，等于3了就退跳出循环。
user-0 提问: 求答

回复:
user: user-0
content: 引用 2 楼 qybao的回复:int i=1, s=0; for (; s<=500; i+=2) s+=i; printf(“n=%d\n”, i); 谢谢你，我是c语言的菜鸟，以后可以经常请教您吗？

user: user-1
content: int i=1, s=0; for (; s<=500; i+=2) s+=i; printf(“n=%d\n”, i);

user: user-2
content: 你会结贴吗？最近被不结贴的小学生搞怕了。
user-0 提问: 帮我看看哪里错了啊

回复:
user: user-0
content: 123456

user: user-1
content: 兄弟你main函数输出了一遍，在函数内又输出了一遍啊 引用 3 楼 Glissip 的回复:[quote=引用 1 楼 user-2 的回复：]两个函数的循环里 a[i] != '\0'  另外 main里加密解密函数,不是写反了吗,虽然这个关系不是很大加密解密结果后面有两行一摸一样的结果，这是什么原因呢？[/quote]

user: user-0
content: 引用 1 楼 user-2 的回复：两个函数的循环里 a[i] != '\0'  另外 main里加密解密函数,不是写反了吗,虽然这个关系不是很大加密解密结果后面有两行一摸一样的结果，这是什么原因呢？

user: user-0
content: 引用 1 楼 user-2 的回复：两个函数的循环里 a[i] != '\0'  另外 main里加密解密函数,不是写反了吗,虽然这个关系不是很大然后现在结果它重复了两个

user: user-2
content: 两个函数的循环里 a[i] != '\0'  另外 main里加密解密函数,不是写反了吗,虽然这个关系不是很大
user-0 提问: 指针咋哪哪不对劲

回复:
user: user-1
content: 这书哪里卖的，你可以把它丢了。根本就是不懂C语言的人写的书。

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

user: user-0
content: 引用 7 楼 636f6c696e的回复:都告诉你了ch不是字符，就没有'ch'这种写法，“ch”表示字符串，如果要找字符串，string库有现成的接口 引用 5 楼 涤 的回复:那我偏要找'ch'这么写呢 我没有说要'ch'这样写啊

user: user-3
content: 都告诉你了ch不是字符，就没有'ch'这种写法，“ch”表示字符串，如果要找字符串，string库有现成的接口 引用 5 楼 涤 的回复:那我偏要找'ch'这么写呢

user: user-4
content: 主要问题： 1、把函数的局部变量作为引用返回，显然不对。可以返回静态的引用 2、比较运算里没有i参与，始终比较的是前两个。 3、一些下标泄露的小问题，比如要判断 i+1是不是0，而不是i，因为你判断2个字符 原始修改：  #include <stdio.h> #include <string.h> int * count( char *p ); int * count2( char *p ); int main() {     char p[]="abch2384784chch1cchh22";     printf("'ch' %d \n",*(count(p)));     printf("'ch' %d \n",*(count2(p))); }   int *count( char *p) {     static int cnt=0;     int i=0;     while(*(p+i+1))     {         if(*(p+i)=='c'&&*(p+i+1)=='h')             cnt++;         i++;     }      return  &cnt; }   int *count2( char *p) {     static int cnt=0;     int i=0;     while(*(p+i))     {         if(strncmp(p+i,"ch",2)==0)             cnt++;         i++;     }      return  &cnt; }    简化：  #include <stdio.h> int count( const char *p ); int main() {     const char p[]="abch2384784chch1cchh22";     printf("'ch' %d \n",count(p)); }  int count( const char *p) {     int cnt=0;     while(*(p+1))     {         if(*p=='c' && *(p+1)=='h')             ++cnt;         ++p;     }     return  cnt; }

user: user-0
content: 那我偏要找'ch'这么写呢

user: user-5
content: 'ch'不是字符，*p = 'ch'; 书上不应该出现这个低级错误吧

user: user-3
content: 哥，ch特指一个字符，是函数的入参，而不是'ch'两个字符，

user: user-0
content: 并且理解错了意思

user: user-0
content: 哇，这个程序不对，刚试了其他数据
user-0 提问: C语言求π/4=1-1/3+1/5-1/7+…编程π的近似值直到最后一项的绝对值小于10的_4次方为止，输出π的值并统计累加的项数

回复:
user: user-1
content: #include<stdio.h> #include<math.h> int main() { 	int i, q; 	float n, p, sum=1; 	i = 1; 	p = pow(10, -4); 	do { 		q = pow(-1, i); 		sum += 1.0 / (2 * i + 1)*q; 		i++; 	} while (1.0 / (2 * i + 1) >= p); 	n = sum * 4; 	printf("%f,%d\n", n, i); 	return 0; }  change：  #include<stdio.h> #include<math.h> int main() { 	int i, q; 	float PI, tmp, sum = 0, end; 	i = 0; 	end = pow(10, -4); 	do { 		tmp = 1.0 / (2 * i + 1); 		sum += tmp* pow(-1, i); 		i++; 	} while (tmp >= end); 	PI = sum * 4; 	printf("%f,%d\n", PI, i - 1); 	return 0; }

user: user-0
content: 引用 1 楼 user-1的回复:错误1：sum也应该是浮点型 错误2：q的赋值，即确定符号，应该放在循环内部 错误3：因为i为int，故1/(2*i-1)得到的也只能是整型，且舍弃后都是为0，比较简单的方法是把被除数改为1.0，注意改两个地方，sum求和，dowhile判断 那那那正确的应该怎么改

user: user-1
content: 错误1：sum也应该是浮点型 错误2：q的赋值，即确定符号，应该放在循环内部 错误3：因为i为int，故1/(2*i-1)得到的也只能是整型，且舍弃后都是为0，比较简单的方法是把被除数改为1.0，注意改两个地方，sum求和，dowhile判断
user-0 提问: 简单弹性摁键控制问题。为什么摁下下摁键，灯就一直亮，不会因为弹起而灭？

回复:
user: user-0
content: 上面程序少写了while(1) include<reg52.h> #define unsigned int uint; sbit key=P2^1; sbit led=P2^2; void delayms( ) void main() {key=1; led=0; while(1) {  if(key== 0) { 	delayms(10);  if(key== 0)								//摁下摁键 		{ 				led=1; //灯亮  } }} void delayms(uint xms)			     {uint i,j;   for(i=xms;i>0;i--)    for(j=110;j>0;j--)
user-0 提问: 求大佬帮忙解一下这道题

回复:
user: user-1
content: 有别的方式吗😭😭😭😭这个好像不适用c语言

user: user-2
content: #include <stdio.h> #include <stdlib.h> #include <string.h>  //定义一个函数完成这些操作 void Change(char a[])   //传入一个字符数组 { 	int n; 	n = strlen(a);       //字符个数 	for (int i = 0; i < n; i++) 	{ 		switch (a[i]) 		{ 		case 'c': 		case 'C': 			printf("BEIJING OLYMPIC GAMES\n"); break; 		case 'j': 		case 'J': 			printf("JAPAN WORLD CUP\n"); break; 		case 'k': 		case 'K': 			printf("KOREA WORLD CUP\n"); break; 		default: 			printf("%c\n", a[i]); 			break; 		} 	} }  int main() { 	char str[100]; 	gets(str);      //输入字符串（字符数组） 	Change(str);    //调用定义好的操作函数 	system("pause"); }
user-0 提问: 大佬们帮忙看一下c的文件读入哪里错了

回复:
user: user-1
content: 现象是什么？可以通过添加printf输出信息，看一下执行到哪里出的问题。

user: user-0
content: 救救孩子啊啊啊啊啊啊啊啊啊啊啊啊啊

user: user-0
content: 来个大神吧拜托了啊啊

user: user-0
content: 就差一个文件读取了 实在找不出哪里错了
user-0 提问: 输出两个正整数之间的所有素数

回复:
user: user-1
content: #include <stdio.h> int main() {     int m, n, i, j;     int k;     printf("输入两个整数：");     scanf("%d%d", &m, &n);      // 这里是做一个循环，遍历你输入的两个整数之间的所有整数     for(i = m; i <= n; i++)     {         // k用来判断是否为素数， 如果 k > 0，说明当前的整数不是素数         k = 0;          // 这个循环是判断当前整数是否为素数，从2开始一直到小于当前数的最大整数         // 我想什么是素数你应该知道的吧         for(j = 2; j < i; j++)         {             // 这里是将当前判断的数分别比它小的整数取余数，如果正好整除，             //说明当前判断的整数不是素数             if(i%j == 0)             {                 k++;                 // 这里最好是添加一个break，这样的话，如果不是素数，当前循环终止，                 //判断下一个数书否为素数                 break;             }          }          // 如果k == 0 说明当前整数数个素数，然后输出         if(k == 0)         {             printf("%d\n", i);         }     }      return 0; }

user: user-2
content: 首先明白素数的定义，第二个for循环是来检验这个数除自身以外是否有其它整除，如果有k＋＋，到循环结束，如果k＝＝0，说明除自身以外没有其它整除的数，这个数是素数，否则就不是
user-0 提问: 大一学生，请教各位大佬，为什么此程序输出时总是-1IND00，该怎么解决？

回复:
user: user-0
content: 已经发现问题了，一个是第一个for语句t的范围弄错，还有一个就是您所说的赋值的问题。

user: user-0
content: 引用 1 楼 jsx_SEVEN的回复:t应该给个初始值，我这边显示：使用了未初始化的局部变量。写点注释 其实我是想编一个用泰勒公式求sin(x)的程序，除了初始赋值出了点问题，估计还有其它问题我没有看出来

user: user-1
content: t应该给个初始值，我这边显示：使用了未初始化的局部变量。写点注释
user-0 提问: 大佬们看一看，为啥我运行之后啥也没有

回复:
user: user-1
content: 死循环了，while (1 <= 100)，改成while (i <= 100)再试试～

user: user-2
content: 函数 hhh 里面的 while 是死循环吧 ？ 这图片里面的条纹太亮瞎眼了，看得视神经疼！ while(1 <= 100){} 的循环判断条件是 圆括号里的 「 （数字 1 ）1 <= 100」，这个条件永远成立，所以 while 循环一直执行。  程序一直在执行这个 while 循环 ，当然没有输出了。 你的初衷应该是写成 字母 i <= 100 吧？ 改一下再运行。