Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 定长顺序串操作

回复:
user: user-1
content: #include<stdio.h> #include<stdlib.h> #include<string.h>  #define MAXSTRLEN 255 #define  ERROR 0 #define  OK 1  typedef int Status; typedef char SString[MAXSTRLEN+1];  //1.构建顺序串 Status StrAssign(SString T, char *chars) {     int i;     if(strlen(chars) > MAXSTRLEN)         return ERROR;     //else     //{     T[0]=strlen(chars);     for(i=1;i<=T[0];i++)         T[i]=chars[i-1];     return OK;     //} }  //2.复制串 Status StrCopy(SString T,SString S) {     int i;     //for(i=0;i<=S[0];i++)     //这个地方i是要从0开始吗？     for(i=1;i<=S[0];i++)     //这个地方i是要从0开始吗？         T[i]=S[i];     T[0] = S[0];    //赋值串的长度     return OK; } //3.是否空串 Status StrEmpty(SString S) {     if(S[0]==0)         return 1;     else         return 0; } //4.比较顺序串 int  StrCompare(SString S,SString T) {     int i;     for(i=1;i<=S[0] &&  i<=T[0];i++)     {         if(S[i] != T[i])             return S[i]-T[i];     }     return S[0]-T[0]; } //5.求串的长度 int StrLength(SString S) {     return S[0]; } //6.清空串 Status ClearString(SString S) {     S[0]=0;     return OK; } //7.联接串 Status Concat(SString T,SString S1,SString S2) {     int i;     if(S1[0]+S2[0]<=MAXSTRLEN)     {         for(i=1;i<=S1[0];i++)         {             T[i]=S1[i];         }         for(i=1;i<=S2[0];i++)         {             T[i+S1[0]]=S2[i];         }         T[0]=S1[0]+S2[0];         return OK;     }     else     {         for(i=1;i<=S1[0];i++)         {             T[i]=S1[i];         }         for(i=1;i<=MAXSTRLEN-S1[0];i++)         {             T[i+S1[0]]=S2[i];         }         //T[0]=StrLength(T);         T[0]= MAXSTRLEN;         return ERROR;     }  } //8.取子串 Status SubString(SString sub,SString S,int pos,int len) {     int i;     if(pos<1 || pos>S[0] ||len<0 ||len>S[0]-pos+1)         return ERROR;     for(i=1;i<=len;i++)         sub[i]=S[pos+i-1];     sub[0]=len;     return OK;  } //9.删除字串 Status StrDelete(SString S,int pos,int len) {     int i;     if(pos<1 || pos>S[0]-len+1 ||len<0 )///* 初始条件: 串S存在,1≤pos≤StrLength(S)-len+1         return ERROR;     for(i=pos+len;i<=S[0];i++)         S[i-len]=S[i];     S[0]=S[0]-len;     return OK;  } //10.打印顺序串 void StrPrint(SString T) {     int i;     for(i=1;i<=T[0];i++)         printf("%c",T[i]);     printf("\n"); }  供参考！  没有测试程序呢，  修改了StrCopy，StrAssign，Concat等函数，建议对比看一下
user-0 提问: 有两个字符串s，t判断t是否是s的子串，如果是输出子串的位置，如果不是输出0，再删除子串并且输出删除后的串。

回复:
user: user-0
content: 我刚才试了一下，可以，谢谢了大神

user: user-0
content: 我刚才试了一下，可以，谢谢了大神

user: user-0
content: 我刚才试了一下，可以，谢谢了大神

user: user-1
content: 引用 3 楼 weixin_44990738 的回复:运行了没有啊，大神，回复我 啥意思？你自己没试试吗？

user: user-0
content: 运行了没有啊，大神，回复我

user: user-1
content: #include <stdio.h> #include <string.h>  int find_pos_str(const char *str, const char *substr); char *del_substr(char *str, int pos, int sub_len);  int main(void) {     char str[64], substr[32];     int pos;      scanf("%s", str);     scanf("%s", substr);      pos = find_pos_str(str, substr);     printf("%d\n", pos);     if (pos >= 0)         printf("%s\n", del_substr(str, pos, strlen(substr)));      return 0; }   int find_pos_str(const char *str, const char *substr) {     const char *tmp_str = str;     int len = strlen(substr), pos = 0;      while (*tmp_str) {         if (strncmp(tmp_str, substr, len) == 0)             break;         pos++;         tmp_str++;     }      if (!*tmp_str)         return -1;      return pos; }  //pos： the position of substr char *del_substr(char *str, int pos, int sub_len) {     int len = strlen(str);      if (pos + sub_len >= len ) {         *(str + pos) = 0;         return str;     }      strcpy(str + pos, str + pos + sub_len);      return str; }  供参考～

user: user-0
content: 求解答啊，急，急，急，大神们
user-0 提问: 用自定义函数求n个正整数的最大值

回复:
user: user-0
content: 谢谢您！！！我懂了！

user: user-1
content: 1、如果没有学过动态分配，可以采用另一种方法，直接定义一个比题目中正数个数范围大的数组，假如个数不超过100，可以直接定义为a[110]，只要维度比100大就可以。 2、其次你的swot函数有逻辑问题，你是直接把相邻的两个数来进行比较从而得到max，这个是不对的，例如：3  5  2  4四个数，你得到的最大值是4。注意这里应该是数组中的每个元素依次和最新的max进行比较大小，然后再更新max的值。有什么其他问题可以多问！ 直接上代码：  #include<stdio.h> int swot(int c,int a[]){ 	for(int i=0;i<c;i++) 	scanf("%d",&a[i]); 	int max=0;//最好初始化 	for(int i=0;i<c;i++){ 		if(max<a[i]) 		max=a[i]; 	} 	printf("%d",max);  }  main(void){ 	int c,a[1000];//只需要保证a的维度比c大即可，这样既不需要动态申请空间 	scanf("%d",&c); 	swot(c,a);  }

user: user-0
content: 引用 2 楼 mozhju的回复:动态申请内存 void main() { 	int c; 	int *b; 	scanf("%d", c); 	b = (int *)malloc(c * sizeof(int)); 	swot(c, b); 	free(b) } 请问还有别的办法吗？这个我还没学过。有点超纲了

user: user-2
content: 引用 2 楼 mozhju 的回复:动态申请内存 void main() { 	int c; 	int *b; 	scanf("%d", c); 	b = (int *)malloc(c * sizeof(int)); 	swot(c, b); 	free(b) }  scanf("%d", &c);注意加上&

user: user-3
content: 动态申请内存 void main() { 	int c; 	int *b; 	scanf("%d", c); 	b = (int *)malloc(c * sizeof(int)); 	swot(c, b); 	free(b) }

user: user-4
content: b[c]是数组的第c+1个元素，b才是数组名（首地址）
user-0 提问: Linux下不能在线程创建后设置优先级

回复:
user: user-1
content: 打印返回值和errno看看 引用 2 楼 qq_38543601 的回复:[quote=引用 1 楼 赵4老师 的回复:] 优先级是相对而不是绝对的。 主线程pthread_setschedparam后，我在创建出的线程里用 pthread_getschedparam 打印线程状态和优先级，发现还是SCHED_OTHER，优先级为0，说明没有设置成功啊，为什么呢[/quote]

user: user-0
content: 引用 1 楼 赵4老师 的回复:优先级是相对而不是绝对的。 主线程pthread_setschedparam后，我在创建出的线程里用 pthread_getschedparam 打印线程状态和优先级，发现还是SCHED_OTHER，优先级为0，说明没有设置成功啊，为什么呢

user: user-2
content: 优先级是相对而不是绝对的。
user-0 提问: 求大佬帮解决这个c语言问题，为什么这个程序一运行到scanf就会崩溃

回复:
user: user-1
content: 如果在VS中   csanf换成  casnf_s

user: user-2
content: name的类型改成char数组就好了

user: user-3
content: printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方，而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。

user: user-4
content: printf("%s %d %d\n",array[i].name,array[i].Arrive_Time,array[i].Serve_Time); name是char类型，这里用%s，那么很可能会出现程序崩溃，出现段错误（因为可能越界）。

user: user-4
content: &array[i].name，这个用%s，但是你的name是char类型哦。是不是应该用%c，或者把name定义成数组，然后再去掉&呢

user: user-5
content: 单步调试是个很重要的技能！ 我测试了下，错误不是在scanf("%s %d %d",&array[i].name,&array[i].Arrive_Time,&array[i].Serve_Time); 而是在它下一行的：printf("%s %d %d\n",array[i].name,array[i].Arrive_Time,array[i].Serve_Time); 具体的原因是：PCB.name 是个 char 类型，你输出时用了%s，应该是%c。 但是我的理解，应该是你的name类型用错了，你的本意应该是想用字符串。那可以定义为 char name[20];  // 长度根据你的需要调整 这样name就是一个字符串，而不是单个字符。如果name用字符串数组的话，就可以用%s输出。
user-0 提问: .\Obj\Template.axf: Error: L6218E: Undefined symbol SysTick_CLKSourceConfig (ref

回复:
user: user-1
content: 引用 1 楼 user-2 的回复:出现这个错误的原因是未定义SysTick_CLKSourceConfig ，因为SysTick是嵌在内核里的，定义在misc.c/h文件里，所以别忘记添加这个文件。 万分感谢！！！！！

user: user-2
content: 先在目录里添加misc.c这个文件

user: user-2
content: 出现这个错误的原因是未定义SysTick_CLKSourceConfig ，因为SysTick是嵌在内核里的，定义在misc.c/h文件里，所以别忘记添加这个文件。
user-0 提问: 小白求教c语言干簧管问题

回复:
user: user-0
content: 引用 1 楼 user-1 的回复：先搞清楚你的输入是什么，输出又是什么谢谢，问题已解决

user: user-1
content: 先搞清楚你的输入是什么，输出又是什么
user-0 提问: open62541 OPC UA客户端如何遍历服务端所有结点

回复:
user: user-1
content: https://github.com/open62541/open62541/issues/3081

user: user-0
content: UA_Client_Service_browse+UA_Client_readDataTypeAttribute+UA_Client_readValueAttribute，根据nodeclass区分类别，如果是UA_NODECLASS_OBJECT、UA_NODECLASS_VARIABLETYPE则递归调用，如果是UA_NODECLASS_VARIABLE则获取数据类型与值，接口封装为递归接口。可遍历所有节点。   具体处理需要依据实际需要进行调整不同的类型。

user: user-0
content: 然后呢？

user: user-2
content: 大佬会这个嘛 	学生基本信息管理系统应包括4个部分： 1、	学生基本信息的增加 2、	学生基本信息的修改 3、	学生基本信息的删除 4、	学生基本信息的查询 提示：4个部分分别设计4个函数来实现 要求：学生基本信息字段包括： 学号、姓名、性别、电话号码、出生日期、籍贯、所读专业
user-0 提问: swith语句中 case后面的表达式如果一致的话，可以叠在一起写吗？

回复:
user: user-1
content: 引用 6 楼 whizer 的回复:[quote=引用 4 楼 lin5161678 的回复:] [quote=引用 3 楼 whizer 的回复:] 数字少的话：  case 1: case 2:     printf("A");     break;   数字多且连续的话：例如（1到9）  case 1 ... 9:     printf("A");     break; C/C++不行[/quote]运行一下，下面的看看行不行？  #include <stdio.h>  int main (void) {        int i;     for (i = 1; i < 10; i++) {         switch (i) {             case 1 ... 9:                 printf ("case test %d\n", i);                 break;             default:                 printf ("defalt\n");         }        }        return 0; } [/quote]不用试就知道不行了 这不是很简单吗 又是一个拿编译器扩展当普世语法用的人?

user: user-2
content: 引用 4 楼 lin5161678 的回复:[quote=引用 3 楼 whizer 的回复:] 数字少的话：  case 1: case 2:     printf("A");     break;   数字多且连续的话：例如（1到9）  case 1 ... 9:     printf("A");     break; C/C++不行[/quote]运行一下，下面的看看行不行？  #include <stdio.h>  int main (void) {        int i;     for (i = 1; i < 10; i++) {         switch (i) {             case 1 ... 9:                 printf ("case test %d\n", i);                 break;             default:                 printf ("defalt\n");         }        }        return 0; }

user: user-3
content: 可以叠在一起。而且case后面的常量标识符的先后顺序也不影响执行结果。  case 1: case 2:         printf("A");         break;  和  case 2: case 1:         printf("A");         break;  是一样的。  另外，你发的最上面的帖子了，没有把 case 关键字 和 后面的 常量标识符 分开 ，这样是不对的。 请注意一定要把 case 和后面的 常量标识符用空格分开，用tab也行，总之是要分开。  欢迎及时结帖、给分。：）

user: user-1
content: 引用 3 楼 whizer 的回复:数字少的话：  case 1: case 2:     printf("A");     break;   数字多且连续的话：例如（1到9）  case 1 ... 9:     printf("A");     break; C/C++不行

user: user-4
content: 可以，第一个case后不加break就行。 满足case条件后，程序一直执行到break为止。

user: user-2
content: 数字少的话：  case 1: case 2:     printf("A");     break;   数字多且连续的话：例如（1到9）  case 1 ... 9:     printf("A");     break;

user: user-5
content: case 1: case 2:         printf("A")        break;
user-0 提问: 这道题用指针怎么做啊？求指导

回复:
user: user-1
content: 一个使用字符来处理的小代码，供参考。  #include <stdio.h>  #define LEN 100  int main(int argc, char const *argv[]) { 	// 因为题目要求用指针，所以下面的代码使用了一个数组a； 	// 如果不要求用指针的话，连数组也可以省略，只要一个char变量即可， 	// 在输入过程中输出结果数字。  	// 只处理了0和正整数，没有处理负整数。或者说，忽略了负号。  	char a[LEN], *b; 	b = a; 	int i = 0; 	int count = 0; // 有效数字的位数 	while ((*(b + i) = getchar()) != '\n' && i < LEN) { 		if (*(b + i) >= '0' && *(b + i) <= '9') { 			if (count == 0 && *(b + i) == '0') { 			} else { 				putchar(*(b + i)); 				count++; 			} 		} 		i++; 	} 	if (count == 0) { 		putchar('0'); 	} 	putchar('\n');  	return 0; }   欢迎讨论、以及及时结帖、给分。：）

user: user-1
content: 引用 1 楼 自信男孩 的回复:#include <stdio.h> #include <ctype.h>  int rt_number(const char *str);  int main(void) {      char str[128];      scanf("%s", str);      printf("%d\n", rt_number(str));      return 0; }  int rt_number(const char *str) {     int num = 0;      while (*str) {         if (isdigit(*str))             num = num * 10 + *str - '0';         str++;     }      return num; }  供参考！  一个小小的建议：即使考虑输入数据在字符数组的长度范围内，但如果 数值结果超出 int 取值范围的话，结果也会因为被截断而失准。

user: user-2
content: #include <stdio.h> #include <ctype.h>  int rt_number(const char *str);  int main(void) {      char str[128];      scanf("%s", str);      printf("%d\n", rt_number(str));      return 0; }  int rt_number(const char *str) {     int num = 0;      while (*str) {         if (isdigit(*str))             num = num * 10 + *str - '0';         str++;     }      return num; }  供参考！
user-0 提问: 设计一个算法RepChar(s,x,y)，将顺序串s中所有字符x替换成字符y。要求空间复杂度为O(1)。

回复:
user: user-1
content: 这个不是很难吧，遍历并替换嘛

user: user-2
content: void RepChar(char s[], char x, char y) {   for (; *s; s++) *s == x ? *s = y : 0; }
user-0 提问: 想调试一下，但是dev没反应

回复:
user: user-1
content: 你需要将你输入得整数转换成你需要得精度范围，并且将输出得值也要进行转换得。比如你输入N，你需要将N*1.0来将其转换成浮点数，然后再去计算，这样才不会去掉精度，打印也是需要改得

user: user-2
content: 卡了吧，而且double是使用%lf

user: user-3
content: 用%lf输出一下试试，因为double是浮点数，浮点数和整型数在内存里的存放方式是不一样的。 所以，double类型的数据还需要用%lf输出

user: user-4
content: Visual C++ 2010 Express简体中文版http://pan.baidu.com/s/1bnwRVLt
user-0 提问: 求大神详解

回复:
user: user-0
content: 引用 2 楼 tongshou的回复:你这个主要是算法问题。不容易，到网上查查看，看是否有类似例子。 我在网上找到了这个：DP一定会超时，需要贪心。贪心的策略就是先选一个最小值，然后把这个最小值缩点。怎么缩呢？举个例子，-4 -5 -4；三个数，先取-5，然后把这个点变成-4+（-4）-（-5），然后把这个点-3放进去，再一次如果取到了-3，就相当于取了-8，即-4+（-4），相当于就是取了两边没取中间。这个咋理解呀

user: user-0
content: 引用 8 楼 user-4的回复:说白点，DP就是把递归的参数存起来，不用堆栈 这个代码想好久  #include<iostream> #include<vector> #include<map> using namespace std; vector<int> vc{ 1,2,4,8,5,6,7 }; int n = 3; int find(int count, int index) { 	if (count == n) 		return 0; 	int min = 0; 	for (int j = index + 2; j < vc.size() - (n - count - 1) * 2; j++) { 		int t= vc[j] + find( count + 1,j); 		if (min == 0 || t < min) 			min = t; 	} 	return min; } int main() { 	cout <<"暴力:"<< find(0, -2) << endl; 	map<int, map<int, int>> dp;		//出现了负坐标，用map直观一点，但效率不高，你可以自己进行一个坐标转换 	for (int i = 1; i <= n; i++) { 		for (int j = -2; j<0||j < vc.size(); j++) { 			for (int k = j + 2; k < vc.size() - (i-1) * 2; k++) { 				int m = vc[k] + dp[i-1][k]; 				if ((dp[i][j] == 0 || dp[i][j] > m)) 					dp[i][j] = m; 			} 		} 	} 	cout <<"DP:"<< dp[n][-2] << endl; 	return 0; }   我在网上找到了这个：DP一定会超时，需要贪心。贪心的策略就是先选一个最小值，然后把这个最小值缩点。怎么缩呢？举个例子，-4 -5 -4；三个数，先取-5，然后把这个点变成-4+（-4）-（-5），然后把这个点-3放进去，再一次如果取到了-3，就相当于取了-8，即-4+（-4），相当于就是取了两边没取中间。这个咋理解呀

user: user-0
content: 我在网上找到了这个：DP一定会超时，需要贪心。贪心的策略就是先选一个最小值，然后把这个最小值缩点。怎么缩呢？举个例子，-4 -5 -4；三个数，先取-5，然后把这个点变成-4+（-4）-（-5），然后把这个点-3放进去，再一次如果取到了-3，就相当于取了-8，即-4+（-4），相当于就是取了两边没取中间。这个咋理解呀

user: user-1
content: 你这个主要是算法问题。不容易，到网上查查看，看是否有类似例子。

user: user-0
content: 引用 3 楼 user-4的回复:暴力的话用深搜回溯就可以了 要性能的话动态规划dp算法 如果还没想到办法，我中午可以把代码给你 这道题有时间限制，可以给我讲讲那个dp算法的思想吗，感谢！

user: user-0
content: 引用 3 楼 user-4的回复:暴力的话用深搜回溯就可以了 要性能的话动态规划dp算法 如果还没想到办法，我中午可以把代码给你 这道题有时间限制，可以给我讲讲那个dp算法的思想吗，感谢！

user: user-2
content: 引用 4 楼 636f6c696e 的回复:没那么难吧，排序后分组，把相邻的数字放在一个组里 一个一个组取数字就行，暂时没想到有啥算法问题 排序之后是不是可能已经影响了之前的数据之间的位置关系？！

user: user-3
content: 没那么难吧，排序后分组，把相邻的数字放在一个组里 一个一个组取数字就行，暂时没想到有啥算法问题

user: user-4
content: 暴力的话用深搜回溯就可以了 要性能的话动态规划dp算法 如果还没想到办法，我中午可以把代码给你

user: user-4
content: 说白点，DP就是把递归的参数存起来，不用堆栈 这个代码想好久  #include<iostream> #include<vector> #include<map> using namespace std; vector<int> vc{ 1,2,4,8,5,6,7 }; int n = 3; int find(int count, int index) { 	if (count == n) 		return 0; 	int min = 0; 	for (int j = index + 2; j < vc.size() - (n - count - 1) * 2; j++) { 		int t= vc[j] + find( count + 1,j); 		if (min == 0 || t < min) 			min = t; 	} 	return min; } int main() { 	cout <<"暴力:"<< find(0, -2) << endl; 	map<int, map<int, int>> dp;		//出现了负坐标，用map直观一点，但效率不高，你可以自己进行一个坐标转换 	for (int i = 1; i <= n; i++) { 		for (int j = -2; j<0||j < vc.size(); j++) { 			for (int k = j + 2; k < vc.size() - (i-1) * 2; k++) { 				int m = vc[k] + dp[i-1][k]; 				if ((dp[i][j] == 0 || dp[i][j] > m)) 					dp[i][j] = m; 			} 		} 	} 	cout <<"DP:"<< dp[n][-2] << endl; 	return 0; }

user: user-0
content: 是分数太少了吗
user-0 提问: 急求大佬win10中C语言怎么读取控制台鼠标点击

回复:
user: user-0
content: 找到问题了，这个函数不能和system指令混用

user: user-1
content: 换旧版控制台模式再试试？

user: user-0
content: 并没有开快速编辑模式
user-0 提问: 请问哪里错了？

回复:
user: user-1
content: 在scanf后面加一条语句getchar()试试。

user: user-2
content: Message里name的数据类型定义错误。你用的是char，但是从你的输入里“bjk”来看，是字符串。建议用数组。比如，char name[20]。如果用数组的话，输入就要用%s了，不能用%c
user-0 提问: 求助关于类似旅行商问题

回复:
user: user-0
content: 请输入顶总数3请输入坐标1 1 5 6  2 3 1061109567.00000 5.000000 2.000000 5. 000000 1061109567. 00000  3.000000 2.000000 3. 000000 1061 109567. 000000 访问顺序为:  021 总距离为: 5. 00000 代码输出，忘贴图了
user-0 提问: 链表的深度排序是怎么把他的i-1和i+1怎么想的，想不出来

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

user: user-2
content: 加打印自己调试下就好理解了

user: user-0
content: 引用 3 楼 user-3的回复:什么是深度排序。。。。。 插入排序。。。。。。。

user: user-3
content: 什么是深度排序。。。。。
user-0 提问: 这段代码错在哪

回复:
user: user-1
content: 所以你的问题到底是什么？有报错？还是结果不对？  如果没问题了，请结贴给分。

user: user-0
content: 引用 3 楼 user-2的回复:代码都贴不全无力吐槽了 那是一个申请空间和赋值的函数。 void charu_list(pnext**head,pnext**till) { 	pnext*p = *head; 	pnext*s = NULL; 	 	pnext*new_list = pode(); 	 	if(!*head) 	{ 		*head = new_list; 		*till = new_list; 		printf("q"); 	} 	else if(new_list->data.id<(*head)->data.id) 	{ 		new_list->next = *head; 		*head = new_list; 		printf("w"); 	} 	else 	{ 		while(p) 		{ 			if(p->data.id<new_list->data.id) 			{ 				s->next = new_list; 				new_list->next = p; 				printf("e"); 				break; 			} 			s = p; 			p = p->next; 		} 		if(p==*till) 		{ 			(*till)->next = new_list; 			*till = new_list; 			printf("r"); 		} 	} }

user: user-0
content: 引用 2 楼 jiamianshiye_16_com的回复: pnext*new_cet = (pnext*)malloc(sizeof(pnext)); new_cet = next();  先分配空间，然后再赋值？？ 分配空间干嘛? void charu_list(pnext**head,pnext**till) { 	pnext*p = *head; 	pnext*s = NULL; 	 	pnext*new_list = pode(); 	 	if(!*head) 	{ 		*head = new_list; 		*till = new_list; 		printf("q"); 	} 	else if(new_list->data.id<(*head)->data.id) 	{ 		new_list->next = *head; 		*head = new_list; 		printf("w"); 	} 	else 	{ 		while(p) 		{ 			if(p->data.id<new_list->data.id) 			{ 				s->next = new_list; 				new_list->next = p; 				printf("e"); 				break; 			} 			s = p; 			p = p->next; 		} 		if(p==*till) 		{ 			(*till)->next = new_list; 			*till = new_list; 			printf("r"); 		} 	} }

user: user-2
content: 代码都贴不全无力吐槽了

user: user-1
content: pnext*new_cet = (pnext*)malloc(sizeof(pnext)); new_cet = next();  先分配空间，然后再赋值？？ 分配空间干嘛?

user: user-0
content: 引用 楼主 M_lty63的回复:void charu(pnext**head,pnext**till) { 	pnext*p = *head; 	pnext*d=NULL; 	 	pnext*new_cet = (pnext*)malloc(sizeof(pnext)); 	new_cet = next(); 	 	if(!*head) 	{ 		*head = new_cet; 		*till = new_cet; 	} 	else if((*head)->data.id<new_cet->data.id) 	{ 		new_cet->next = p; 		p = new_cet; 	} 	else 	{ 		while(p) 		{ 			if(p->data.id<new_cet->data.id) 			{ 				d->next = new_cet; 				new_cet->next = p; 				break; 			} 			d = p; 			p = p->next; 		} 		if(p==*till) 		{ 			(*till)->next = new_cet; 			 			*till = new_cet; 		} 	} } void charu(pnext**head,pnext**till) { 	pnext*p = *head; 	pnext*d=NULL; 	 	pnext*new_cet = (pnext*)malloc(sizeof(pnext)); 	new_cet = next(); 	 	if(!*head) 	{ 		*head = new_cet; 		*till = new_cet; 	} 	else if((*head)->data.id>new_cet->data.id) 	{ 		new_cet->next = *head; 		*head = new_cet; 	} 	else 	{ 		while(p) 		{ 			if(p->data.id>new_cet->data.id) 			{ 				d->next = new_cet; 				new_cet->next = p; 				break; 			} 			d = p; 			p = p->next; 		} 		if(p==*till) 		{ 			(*till)->next = new_cet; 			 			*till = new_cet; 		} 	} }
user-0 提问: 关于c语言赋值的问题，麻烦大佬给指点下

回复:
user: user-0
content: 引用 11 楼 拥抱Linux 的回复:[quote=引用 10 楼 Primit_ 的回复:] 我试了下，还是不行，应该是我的编译器有问题吧，我用的code::blocks V16.01，不过还是万分感谢  不客气。随便百度一个在线编译器，把代码粘贴进去，也可以马上得到验证结果的。[/quote] 奥，这样啊，我去看看

user: user-1
content: 引用 10 楼 Primit_ 的回复:我试了下，还是不行，应该是我的编译器有问题吧，我用的code::blocks V16.01，不过还是万分感谢  还有个事，光顾着直接跑你的代码了，没想到 头文件 的事情。 你把 malloc.h 加到代码最上面，再试试。 #include <malloc.h>

user: user-1
content: 引用 10 楼 Primit_ 的回复:我试了下，还是不行，应该是我的编译器有问题吧，我用的code::blocks V16.01，不过还是万分感谢  不客气。随便百度一个在线编译器，把代码粘贴进去，也可以马上得到验证结果的。

user: user-0
content: 引用 7 楼 拥抱Linux 的回复:[quote=引用 6 楼 Primit_ 的回复:] [quote=引用 5 楼 拥抱Linux 的回复:] [quote=引用 3 楼 Primit_ 的回复:] 那这个ch1怎么赋值给ch？我想要里面的每个值都进行赋值  不应该全是0啊！ 赋值的语句没问题，输出的时候，最后一句把指针的名字写错了，就按 1 楼 的改正过来就好了。[/quote] 是啊我也是这样想的可是我把输出格式改正后，还是一样，ch1是被成功赋值了，但ch还是没有[/quote]  下面的截图是在vscode里的输出结果，   该不会是，你电脑上，IDE窗口的输出结果里，最左边的整数部分的数字被挡住了吧？  要么调整一下输出格式，把输出结果往右边挪一个tab的位置： printf("\n\t%lf\t", ch[i]); [/quote] 我试了下，还是不行，应该是我的编译器有问题吧，我用的code::blocks V16.01，不过还是万分感谢

user: user-2
content: 贴出你的调试结果，我本地能够转换正确输出的 引用 8 楼 Primit_ 的回复:[quote=引用 6 楼 Primit_ 的回复:] [quote=引用 5 楼 拥抱Linux 的回复:] [quote=引用 3 楼 Primit_ 的回复:] 那这个ch1怎么赋值给ch？我想要里面的每个值都进行赋值  不应该全是0啊！ 赋值的语句没问题，输出的时候，最后一句把指针的名字写错了，就按 1 楼 的改正过来就好了。[/quote] 是啊我也是这样想的可是我把输出格式改正后，还是一样，ch1是被成功赋值了，但ch还是没有[/quote] 我试了下发现int类型的指针给double类型的指针赋值不了，我后来把ch换成了int类型的数就好了，但我还是不明白为什么不知能这样赋值，是因为int类型的指针声明时的空间和double声明时所占用的空间不同所以才造成了这样的吗？我想输出的时候保留小数点，但是如果这样的话，那我之前声明的就必须使用浮点类型才可以[/quote]

user: user-0
content: 引用 6 楼 Primit_ 的回复:[quote=引用 5 楼 拥抱Linux 的回复:] [quote=引用 3 楼 Primit_ 的回复:] 那这个ch1怎么赋值给ch？我想要里面的每个值都进行赋值  不应该全是0啊！ 赋值的语句没问题，输出的时候，最后一句把指针的名字写错了，就按 1 楼 的改正过来就好了。[/quote] 是啊我也是这样想的可是我把输出格式改正后，还是一样，ch1是被成功赋值了，但ch还是没有[/quote] 我试了下发现int类型的指针给double类型的指针赋值不了，我后来把ch换成了int类型的数就好了，但我还是不明白为什么不知能这样赋值，是因为int类型的指针声明时的空间和double声明时所占用的空间不同所以才造成了这样的吗？我想输出的时候保留小数点，但是如果这样的话，那我之前声明的就必须使用浮点类型才可以

user: user-1
content: 引用 6 楼 Primit_ 的回复:[quote=引用 5 楼 拥抱Linux 的回复:] [quote=引用 3 楼 Primit_ 的回复:] 那这个ch1怎么赋值给ch？我想要里面的每个值都进行赋值  不应该全是0啊！ 赋值的语句没问题，输出的时候，最后一句把指针的名字写错了，就按 1 楼 的改正过来就好了。[/quote] 是啊我也是这样想的可是我把输出格式改正后，还是一样，ch1是被成功赋值了，但ch还是没有[/quote]  下面的截图是在vscode里的输出结果，   该不会是，你电脑上，IDE窗口的输出结果里，最左边的整数部分的数字被挡住了吧？  要么调整一下输出格式，把输出结果往右边挪一个tab的位置： printf("\n\t%lf\t", ch[i]);

user: user-0
content: 引用 5 楼 拥抱Linux 的回复:[quote=引用 3 楼 Primit_ 的回复:] 那这个ch1怎么赋值给ch？我想要里面的每个值都进行赋值  不应该全是0啊！ 赋值的语句没问题，输出的时候，最后一句把指针的名字写错了，就按 1 楼 的改正过来就好了。[/quote] 是啊我也是这样想的可是我把输出格式改正后，还是一样，ch1是被成功赋值了，但ch还是没有

user: user-1
content: 引用 3 楼 Primit_ 的回复:那这个ch1怎么赋值给ch？我想要里面的每个值都进行赋值  不应该全是0啊！ 赋值的语句没问题，输出的时候，最后一句把指针的名字写错了，就按 1 楼 的改正过来就好了。

user: user-0
content: 引用 2 楼 自信男孩 的回复:楼主是什么问题？输出时用%d输出double类型的数据了，是这个问题导致的吗？ 不是，我向想问用int类型指针里的值赋给double类型指针里的值，是怎么实现的，而且我这个ch拿不到ch1里的值？

user: user-0
content: 那这个ch1怎么赋值给ch？我想要里面的每个值都进行赋值

user: user-3
content: 楼主是什么问题？输出时用%d输出double类型的数据了，是这个问题导致的吗？

user: user-2
content: 用%d打印double类型当然不对了，你下面想打印的是ch1吧？ printf("\n%lf\t", ch[i]); printf("%d\t", ch1[i]);
user-0 提问: 16×16点阵从右往左最多能显示几个汉字。。

回复:
user: user-1
content: 贴代码鸭

user: user-2
content: 估计是平移8个汉字以后代码没有执行循环吧……

user: user-3
content: 16x16你能显示8个汉字？？？？？？？？256个像素点可以显示8个汉字？？？
user-0 提问: 求解大佬

回复:
user: user-1
content: 双引号用的有问题，我想编译器起码会给你一个警告，建议看一下警告，并把警告去掉。

user: user-2
content: 应该是这种形式scanf("%d,%d"&a,&b)。

user: user-3
content: 第八行，scanf的格式用错了。
user-0 提问: 求助这两个程序该怎么写，萌新一个

回复:
user: user-1
content: 引用 2 楼 自信男孩 的回复:if(q < &buf[2000]) 这句没问题吗？是不是数组已经越界（或者内存越界了）  [quote=引用 1 楼 自学半天的大一麦克 的回复:] 逆置(另一题 应该差不多） int main(int argc, char**argv) {      int array[1000] = {0};     int arrayNum;     scanf("%u\n", &arrayNum);      char * buf = (char *)malloc(2000);     memset(buf, 0, 2000);     fgets(buf, 2000, stdin);      char *p = buf, *q = NULL;     int i;     for(i = 0; i < arrayNum; i++) {         array[i] = (int)strtol(p, &q, 10);         if(q < &buf[2000])             p = q + 1;     }      int *pp, *qq;     pp = &array[0]; qq = &array[arrayNum-1];     while(pp < qq) {         int tmp = *pp;         *pp = *qq;         *qq = tmp;         pp++;         qq--;     }      for(i = 0; i < arrayNum; i++) {         printf("%d ", array[i]);     }     printf("\n"); }  代码写的很随意，空间申请这么大，建议根据需要申请。[/quote]  你说越界了。越界在哪里呢？

user: user-1
content: 引用 3 楼 自信男孩 的回复: scanf("%u\n", &arrayNum); 这句代码有问题，建议给楼主的代码，自己先测试一遍，没问题再发出来。 有问题请指出问题， 当然是测过才给楼主的。 另外你说申请空间这么大， 楼主题目说要1000个，麻烦提出意见前先审题

user: user-2
content: scanf("%u\n", &arrayNum); 这句代码有问题，建议给楼主的代码，自己先测试一遍，没问题再发出来。

user: user-2
content: if(q < &buf[2000]) 这句没问题吗？是不是数组已经越界（或者内存越界了）  引用 1 楼 自学半天的大一麦克 的回复:逆置(另一题 应该差不多） int main(int argc, char**argv) {      int array[1000] = {0};     int arrayNum;     scanf("%u\n", &arrayNum);      char * buf = (char *)malloc(2000);     memset(buf, 0, 2000);     fgets(buf, 2000, stdin);      char *p = buf, *q = NULL;     int i;     for(i = 0; i < arrayNum; i++) {         array[i] = (int)strtol(p, &q, 10);         if(q < &buf[2000])             p = q + 1;     }      int *pp, *qq;     pp = &array[0]; qq = &array[arrayNum-1];     while(pp < qq) {         int tmp = *pp;         *pp = *qq;         *qq = tmp;         pp++;         qq--;     }      for(i = 0; i < arrayNum; i++) {         printf("%d ", array[i]);     }     printf("\n"); }  代码写的很随意，空间申请这么大，建议根据需要申请。

user: user-1
content: 逆置(另一题 应该差不多） int main(int argc, char**argv) {      int array[1000] = {0};     int arrayNum;     scanf("%u\n", &arrayNum);      char * buf = (char *)malloc(2000);     memset(buf, 0, 2000);     fgets(buf, 2000, stdin);      char *p = buf, *q = NULL;     int i;     for(i = 0; i < arrayNum; i++) {         array[i] = (int)strtol(p, &q, 10);         if(q < &buf[2000])             p = q + 1;     }      int *pp, *qq;     pp = &array[0]; qq = &array[arrayNum-1];     while(pp < qq) {         int tmp = *pp;         *pp = *qq;         *qq = tmp;         pp++;         qq--;     }      for(i = 0; i < arrayNum; i++) {         printf("%d ", array[i]);     }     printf("\n"); }
user-0 提问: 怎么变成64？

回复:
user: user-1
content: 电脑内存或文件内容或传输内容只是一个一维二进制字节数组及其对应的二进制地址； 人脑才将电脑内存或文件内容或传输内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……

user: user-2

user: user-3
content: char是单字节 320取低八位就是64

user: user-4
content: char类型最大值是255，指针类型强转后 320转成二进制101000000保留低8位，就是1000000，64

user: user-5
content: 引用 楼主 sweetswing的回复:what is the output of this  code? int a=320; char *ptr; ptr =(char*)&a; printf("%d",*ptr);   A 30 B 60 C 64 D 320  正确答案是C   我就郁闷了，难道不该是320么？ 注意一下类型转换，int是4个byte的，char是一个byte的，你只取了4个byte的其中一部分，这一部分具体是什么内容，跟cpu大小端模式相关
user-0 提问: C语言指针编写程序

回复:
user: user-1
content: 引用 2 楼 yyy9lang 的回复:[quote=引用 1 楼 user-5的回复:]作业请自己动脑做，否则取消成绩。 我错了老师但是我头快秃了[/quote] 写出来这个程序，也不会让你变得更糟。

user: user-2
content: 让我发现是谁在帮学生做作业  我就把学生许配给他

user: user-3
content: 再让我发现我班上的同学不肯好好做作业的，你们这门考试别想过了

user: user-4
content: 作业请自己动脑做，否则取消成绩。

user: user-0
content: 引用 1 楼 user-5的回复:作业请自己动脑做，否则取消成绩。 我错了老师🙊🙊但是我头快秃了

user: user-5
content: 作业请自己动脑做，否则取消成绩。
user-0 提问: 运行C语言出现异常

回复:
user: user-1
content: 引用 2 楼 ping527963401 的回复:[quote=引用 1 楼 636f6c696e的回复:]直接贴代码不要贴图 代码没问题，编译通过了，运行时就出现了设置异常，下面显示引发时中断[/quote] 图片看不清楚，代码看不清怎么能理解你的描述

user: user-2
content: 代码没问题怎么会出现异常？ 引用 2 楼 ping527963401 的回复:[quote=引用 1 楼 636f6c696e的回复:]直接贴代码不要贴图 代码没问题，编译通过了，运行时就出现了设置异常，下面显示引发时中断[/quote]

user: user-3
content: 代码没问题怎么可能触发中断，那你觉得是上面有问题 电脑有问题还是IDE有问题 编译通过只能说明没有明显的语法错误

user: user-0
content: 引用 1 楼 636f6c696e的回复:直接贴代码不要贴图 代码没问题，编译通过了，运行时就出现了设置异常，下面显示引发时中断

user: user-2
content: 直接贴代码不要贴图
user-0 提问: 如何创建C语言.h头文件啊！

回复:
user: user-1
content: delay();

user: user-2
content: 这类代码文件，只要新建文本文档，然后将文件名后缀改成想要的类型即可

user: user-3
content: 不管是.c还是.h，就是就是个txt文件，改了后缀而已。 #include "xxx.h" 本质上就是把xxx.h这个文本里的文字拷贝进来，不信你换成.txt后缀也一样 你可以在.c文件的同目录下新建个1.h，然后#include "1.h" 就可以包含了 或者你得把.h文件放到编译器的默认搜索路径 如果要放在其他地方的话，比如 放到E:\ 目录下，那么可以写为 #include "E:\\1.h"

user: user-0
content: 这个我已经弄出来了，谢谢啦！

user: user-0
content: 文件.h怎么创建啊，是文档吗?

user: user-4
content: 创个文件.h的 main.c 里面包含这个.h就行了
user-0 提问: 求大佬们那一点点时间帮助一下C语言初学者

回复:
user: user-1
content: 最基本的排序啊。。

user: user-2
content: 冒泡法找出最大值MAX和最小值MIN，最后用MAX-MIN即可

user: user-3
content: 比较简单的做法： 1）设最小值min和最大值max都为第一个值。 2）然后遍历后面的数，如果大于max，就更新max值。如果小于min，就更新min的值。 3）遍历结束，max-min等于差值。

user: user-4
content: 引用 1 楼 user-6 的回复:你就不能先搞啥排序法求最大值最小值，再算差值吗 也可以不用排序，直接遍历一遍找到最大值和最小值。

user: user-5
content: 查一下冒泡法，把前后两个数弄出来相减就好了

user: user-6
content: 你就不能先搞啥排序法求最大值最小值，再算差值吗
user-0 提问: why do we need typedef for enum  in c compiler?

回复:
user: user-1
content: 使用typedef从某种角度上看有助于代码的阅读，提高代码的可读性

user: user-2
content: 引用 8 楼 lin5161678 的回复:[quote=引用 7 楼 jiht594 的回复:] 新版c编译器应该也不需要了吧。 旧版如果不typedef 声明时需要加 enum day 现在应该不需要了吧、直接day就可以了吧都要[/quote] 受教了

user: user-3
content: 引用 7 楼 jiht594 的回复:新版c编译器应该也不需要了吧。 旧版如果不typedef 声明时需要加 enum day 现在应该不需要了吧、直接day就可以了吧都要

user: user-2
content: 新版c编译器应该也不需要了吧。 旧版如果不typedef 声明时需要加 enum day 现在应该不需要了吧、直接day就可以了吧

user: user-4
content: 别名只是使用上的方便，不然每次使用枚举都需要enum xxx

user: user-5
content: 楼上的英文。。。。 不用typedef也没关系的吧。typedef跟#define一样，起个别名罢了

user: user-6
content: 楼上的英文都很骚

user: user-7
content: This is only a code style for enum types. There are some similar styles, such as   typedef struct { ....  } MYSTRUCT;  These styles were often (only?) employed for classical C compilers. Prefix "struct/enum/union“ before variable definition has been made as redundancy in modern C/C++. Normal C++ grammar can be applied , so that we can directly know raw type name from variable definitions.

user: user-8
content: In C compiler?  Are you writing C code in compiler ? OK, leave it go. Maybe your question is ( why need typedef for enum ? ) , do you agree? As you can see,  it is convenient.  Enough or not ?
user-0 提问: 求大佬给个思路

回复:
user: user-1
content: using namespace std; map<string, list<YourType> > cache;  对整个List索引，还是对LIst的元素索引？ 如果是对整个List索引，则可以用一些手段，从整个List里计算出一个体现List唯一性的Key，作为cache的key。 如果是对List里的元素索引，则新建map:  map<string, vector<YourType *> > lidx;  选好key,把认为同样类型的指针放在一起。

user: user-2
content: 可以学习一下C++的STL库，自己实现集合的话可以通过哈希或者构建一种搜索树

user: user-3
content: 用一个链表的数组，每个元素都是各自链表的头。

user: user-4
content: 只是索引的话，你可以创建一个指针数组，每个数组元素都是一条链表的头，这样元素个数就是链表条数，通过每个数组元素也可以访问链表里的每个元素。麻烦点的话，你可以把链表头连成一个链表，这样也有两种方式，第一种修改结构体，增加一个指针，这个指针只有链表头才会用到，通过这个指针一个链表头可以到达另一个链表头；或者不修改结构体，而是创造一个新的结构体，这个结构体有链表头变量或者指向链表头的指针，你可以通过新链表找到每个链表头，然后通过链表头进入每个链表。
user-0 提问: 逆序  要求程序每次读入一个正三位数，然后输出逆序的数字。注意，当输入的数字含有结尾的0时，输出不应带有前导的0。比如输入700，输出应该是7。  哥哥们看一下

回复:
user: user-1
content: #include<stdio.h> int main() { int a,b,c,d,e;  scanf("%d",&a); b=a/100; e=a%100; c=e/10; d=a%10; if (c>0 && d>0) { printf("%d%d%d\n",d,c,b); } if (c>0 && d==0) { printf("%d%d\n",c,b); } if (c==0 && d==0) { printf("%d\n",b); }  return 0; } 我修改了下楼主的代码，实测可行

user: user-2
content: 两种方法  int main() { 	int a, b, c, d, e; 	scanf("%d", &a); 	////注释掉的代码可以，不限制数的大小，得到的y值即倒序后的数值 	//int x, y = 0; 	//while (a) { 	//	x = a % 10; 	//	y = y * 10 + x; 	//	a /= 10; 	//} 	b = a / 100;			//百位 	c = a  % 100 / 10;		//十位 	d = a % 10;				//各位 	printf("%d\n", d * 100 + c * 10 + b);  	return 0; }

user: user-0
content: 能帮忙改一下吗，，，，不会我

user: user-3
content: b、c只有1个0的情况没考虑，比如405这种

user: user-4
content: #include<stdio.h>  int reverse_order_num(int num);  int main() {     int a,b,c,d,e;      scanf("%d",&a);     #if 0     b=a/100;     e=a%100;     c=e/10;     d=a%10;     if (c>0 && b>0)     {         printf("%d%d%d\n",d,c,b);     }     else     {         printf("%d\n",d);     } #endif     printf("%d\n", reverse_order_num(a));     return 0; }  int reverse_order_num(int num) {     int tmp = 0;      while (num) {         tmp = tmp * 10 + num % 10;         num /= 10;     }      return tmp; }  供参考！  满足小于2^31 - 1的数据
user-0 提问: C语言

回复:
user: user-1
content: 建议用fscanf，因为你的文件是格式化的，   fscanf(fp, "%s %d %d\n", stud[i].name, &stud[i].num, &stud[i].age);

user: user-2
content: 1、 首先 结构体里 name 应该是 char name[10] 而不是int 数组 2、 fread 不能这样读到结构体里， 先读到一个 char buf[30] 中（大小自己定义）, 然后 sscanf到结构体里

user: user-3
user-0 提问: 窗口类样式的CS_BYTEALIGNWINDOW是啥意思？

回复:
user: user-1
content: 让窗口在显存中按字节对齐。

user: user-2
content: 开发效率低。繁琐。不够美观。

user: user-0
content: 引用 9 楼 真相重于对错 的回复:你的具体水平如何？我不可能知道，我只是就一般的win32如何入门泛泛而谈。主要是我觉得你纠缠这些东西有些浪费精力，因为现在很少有公司不用现成的gui库而直接用win32写界面。这些东西知道就可以，太过深入不值当。 win32 API是不好用还是？

user: user-2
content: 引用 6 楼 六道佩恩 的回复:[quote=引用 5 楼 真相重于对错 的回复:] [quote=引用 4 楼 六道佩恩 的回复:] [quote=引用 1 楼 真相重于对错 的回复:] 个人感觉你路走偏了。 请问能具体说说吗？我也觉得有点走偏的感觉[/quote] 个人经历，不一定是正确。 看了你的几个帖子，似乎在专研c++ win32编程。且不说目前c++ win32是不是流行。就说你所问的那些问题，几乎都是那种“捅破窗户纸”的问题。具体我不知道如何用语言描述，就好比word,execl的操作，不看说明书，让你去试，那可能试半天也试不出来。但是如果有做过的一句话你就明白。 win32 api 有几千个，你要一个个去详细了解，我觉得太费时间。一个人的精力有限，扣这些细节，事倍功半。 我觉要学win32编程，先找本能够让你入门的书，写出第一个helloworld,然后msdn里面有很多例子。把他们能够运行起来，并知道来龙去脉。才是正道。至于一些旁枝末节不必太在意。完全可以网上去查。如果查不到，大概率是一般不会使用的。 [/quote] “说明书”我看了呀，就是MSDN上的嘛，就是那上面说“字节对齐”，搞不清楚什么意思，搜出来的结果有的说为了效率，有的说像素点对齐，搜到的结果本来就少，所以我只能自己试以及来问了呀。。。至于入门的书，我也想啊，可是不知道有什么书，貌似这方面的书不多，《windows核心编程》我实在看不下去，也没讲消息和窗口，没有我想要的，《windows程序设计第五版》看过几十页，感觉翻译得不好，，效率太低，还不如直接看MSDN。 我感觉我还不至于是helloworld的程度吧，学习过一些API诸如鼠标、键盘、控制台等，基本的框架大致了解了吧（也许），比如创建窗口也消息机制、回调函数，通过在窗口过程中判断消息然后进行相应的处理，，但还是有很多疑点不了解，这些地方是我查阅MSDN、百度后仍然不懂的（也可能是方法不对或翻译不好），就那么一个小知识点，，，它阻碍了我贯通这条知识线，所以很苦恼，的确如你所说，它对于老实而言就是那么一句话的事情。[/quote] 你的具体水平如何？我不可能知道，我只是就一般的win32如何入门泛泛而谈。主要是我觉得你纠缠这些东西有些浪费精力，因为现在很少有公司不用现成的gui库而直接用win32写界面。这些东西知道就可以，太过深入不值当。

user: user-0
content: 引用 7 楼 赵4老师 的回复:遥想公瑾当年，显存一个字节对应两个16色像素的年代，…… 你懂的。 所以一个像素点占用几个完整字节的现在已经用不着了吗？

user: user-1
content: 遥想公瑾当年，显存一个字节对应两个16色像素的年代，…… 你懂的。

user: user-0
content: 引用 5 楼 真相重于对错 的回复:[quote=引用 4 楼 六道佩恩 的回复:] [quote=引用 1 楼 真相重于对错 的回复:] 个人感觉你路走偏了。 请问能具体说说吗？我也觉得有点走偏的感觉[/quote] 个人经历，不一定是正确。 看了你的几个帖子，似乎在专研c++ win32编程。且不说目前c++ win32是不是流行。就说你所问的那些问题，几乎都是那种“捅破窗户纸”的问题。具体我不知道如何用语言描述，就好比word,execl的操作，不看说明书，让你去试，那可能试半天也试不出来。但是如果有做过的一句话你就明白。 win32 api 有几千个，你要一个个去详细了解，我觉得太费时间。一个人的精力有限，扣这些细节，事倍功半。 我觉要学win32编程，先找本能够让你入门的书，写出第一个helloworld,然后msdn里面有很多例子。把他们能够运行起来，并知道来龙去脉。才是正道。至于一些旁枝末节不必太在意。完全可以网上去查。如果查不到，大概率是一般不会使用的。 [/quote] “说明书”我看了呀，就是MSDN上的嘛，就是那上面说“字节对齐”，搞不清楚什么意思，搜出来的结果有的说为了效率，有的说像素点对齐，搜到的结果本来就少，所以我只能自己试以及来问了呀。。。至于入门的书，我也想啊，可是不知道有什么书，貌似这方面的书不多，《windows核心编程》我实在看不下去，也没讲消息和窗口，没有我想要的，《windows程序设计第五版》看过几十页，感觉翻译得不好，，效率太低，还不如直接看MSDN。 我感觉我还不至于是helloworld的程度吧，学习过一些API诸如鼠标、键盘、控制台等，基本的框架大致了解了吧（也许），比如创建窗口也消息机制、回调函数，通过在窗口过程中判断消息然后进行相应的处理，，但还是有很多疑点不了解，这些地方是我查阅MSDN、百度后仍然不懂的（也可能是方法不对或翻译不好），就那么一个小知识点，，，它阻碍了我贯通这条知识线，所以很苦恼，的确如你所说，它对于老实而言就是那么一句话的事情。

user: user-2
content: 引用 4 楼 六道佩恩 的回复:[quote=引用 1 楼 真相重于对错 的回复:] 个人感觉你路走偏了。 请问能具体说说吗？我也觉得有点走偏的感觉[/quote] 个人经历，不一定是正确。 看了你的几个帖子，似乎在专研c++ win32编程。且不说目前c++ win32是不是流行。就说你所问的那些问题，几乎都是那种“捅破窗户纸”的问题。具体我不知道如何用语言描述，就好比word,execl的操作，不看说明书，让你去试，那可能试半天也试不出来。但是如果有做过的一句话你就明白。 win32 api 有几千个，你要一个个去详细了解，我觉得太费时间。一个人的精力有限，扣这些细节，事倍功半。 我觉要学win32编程，先找本能够让你入门的书，写出第一个helloworld,然后msdn里面有很多例子。把他们能够运行起来，并知道来龙去脉。才是正道。至于一些旁枝末节不必太在意。完全可以网上去查。如果查不到，大概率是一般不会使用的。

user: user-0
content: 引用 1 楼 真相重于对错 的回复:个人感觉你路走偏了。 请问能具体说说吗？我也觉得有点走偏的感觉

user: user-0
content: 引用 2 楼 赵4老师 的回复:让窗口在显存中按字节对齐。 我知道翻译是写的按字节对齐，我问题中打错了，，，但具体不明白这是什么意思，求赵老师指点

user: user-2
content: 个人感觉你路走偏了。
user-0 提问: 萌新指针求问

回复:
user: user-1
content: 引用 8 楼 zyx6680599 的回复:哦.....那么大佬，"%c"对应的是什么呢？麻烦了。  在 printf 里 使用 %c ，意思 就是 以 单个 字符 的格式 输出 字符。

user: user-0
content: 引用 7 楼 拥抱Linux 的回复:[quote=引用 6 楼 zyx6680599 的回复:] [quote=引用 5 楼 拥抱Linux 的回复:] [quote=引用 4 楼 zyx6680599 的回复:]  大佬我还是有些不明白，假设我输入的是汉字，显然不在ASCII 0-127之间，为什么还是一样的情况呢。。。。。  因为你定义的变量 p 是 char 型的指针啊，那它读取内存地址上的值的时候，就是按一个 char 的内存大小，也就是一个字节来读取的呀。 即使输入的是汉字，它最终在内存里面不还是得一个字节一个字节地存储吗？（当然了，真正是一个位一个位地存储的，但是这不影响分析问题原因。）[/quote] 大佬，那也就是说。。。存储时汉字拆分成GB2312编码，在对应到ASCII编码上吗？（我百度了一下。。。不明就里。。。）[/quote]  别纠结到底是汉字还是英文还是什么语言，也别纠结是什么编码，总而言之、言而总之，char 类型就是 字符类型， 在内存里面 一个 char 就是只占 一个字节（Byte）， 也就是 8 个字(bit)， 而 char *p 就只是 字符指针 ，  *p 就是去读取一个字符的值，说来说去只读 一个字节的数据而已，那不就是 一个字节（8个字）的 数值范围么？ [/quote] 哦.....那么大佬，"%c"对应的是什么呢？麻烦了。

user: user-1
content: 引用 6 楼 zyx6680599 的回复:[quote=引用 5 楼 拥抱Linux 的回复:] [quote=引用 4 楼 zyx6680599 的回复:]  大佬我还是有些不明白，假设我输入的是汉字，显然不在ASCII 0-127之间，为什么还是一样的情况呢。。。。。  因为你定义的变量 p 是 char 型的指针啊，那它读取内存地址上的值的时候，就是按一个 char 的内存大小，也就是一个字节来读取的呀。 即使输入的是汉字，它最终在内存里面不还是得一个字节一个字节地存储吗？（当然了，真正是一个位一个位地存储的，但是这不影响分析问题原因。）[/quote] 大佬，那也就是说。。。存储时汉字拆分成GB2312编码，在对应到ASCII编码上吗？（我百度了一下。。。不明就里。。。）[/quote]  别纠结到底是汉字还是英文还是什么语言，也别纠结是什么编码，总而言之、言而总之，char 类型就是 字符类型， 在内存里面 一个 char 就是只占 一个字节（Byte）， 也就是 8 个字(bit)， 而 char *p 就只是 字符指针 ，  *p 就是去读取一个字符的值，说来说去只读 一个字节的数据而已，那不就是 一个字节（8个字）的 数值范围么？

user: user-0
content: 引用 5 楼 拥抱Linux 的回复:[quote=引用 4 楼 zyx6680599 的回复:]  大佬我还是有些不明白，假设我输入的是汉字，显然不在ASCII 0-127之间，为什么还是一样的情况呢。。。。。  因为你定义的变量 p 是 char 型的指针啊，那它读取内存地址上的值的时候，就是按一个 char 的内存大小，也就是一个字节来读取的呀。 即使输入的是汉字，它最终在内存里面不还是得一个字节一个字节地存储吗？（当然了，真正是一个位一个位地存储的，但是这不影响分析问题原因。）[/quote] 大佬，那也就是说。。。存储时汉字拆分成GB2312编码，在对应到ASCII编码上吗？（我百度了一下。。。不明就里。。。）

user: user-2
content: printf("%s",*p++); 去掉*或者把%s改成%c

user: user-1
content: 引用 4 楼 zyx6680599 的回复:大佬我还是有些不明白，假设我输入的是汉字，显然不在ASCII 0-127之间，为什么还是一样的情况呢。。。。。  因为你定义的变量 p 是 char 型的指针啊，那它读取内存地址上的值的时候，就是按一个 char 的内存大小，也就是一个字节来读取的呀。 即使输入的是汉字，它最终在内存里面不还是得一个字节一个字节地存储吗？（当然了，真正是一个位一个位地存储的，但是这不影响分析问题原因。）

user: user-0
content: 引用 2 楼 拥抱Linux 的回复:把 printf("%s",*p++); 里的 * （星号）去掉，  把 printf("%s",as[i]); 里的 [i] （下标）去掉， 就可以正常运行了。  printf里，格式符是 %s 的话，对应的是一个字符串的首地址，反过来说，任何一个对应于 %s 的变量或常量，都会被当作是一个存储着内存地址的量来看待。  于是 第一个代码里， *p++ 的结果其实就是 *p ，也就是 某一个字符， 因为很明显这个字符的「数值」是在 ASCII 码表里面的，它的取值范围在 0 ～ 127 之间， 而 内存地址 在 0 ～ 127 之间的 内存空间 是 禁止 代码去读取访问的 ，所以就会出现错误了。 大佬我还是有些不明白，假设我输入的是汉字，显然不在ASCII 0-127之间，为什么还是一样的情况呢。。。。。

user: user-1
content: 把 printf("%s",*p++); 里的 * （星号）去掉，  把 printf("%s",as[i]); 里的 [i] （下标）去掉， 就可以正常运行了。  printf里，格式符是 %s 的话，对应的是一个字符串的首地址，反过来说，任何一个对应于 %s 的变量或常量，都会被当作是一个存储着内存地址的量来看待。  于是 第一个代码里， *p++ 的结果其实就是 *p ，也就是 某一个字符， 因为很明显这个字符的「数值」是在 ASCII 码表里面的，它的取值范围在 0 ～ 127 之间， 而 内存地址 在 0 ～ 127 之间的 内存空间 是 禁止 代码去读取访问的 ，所以就会出现错误了。

user: user-3
content: 把循环都去掉，这里你都用了%s了
user-0 提问: 怎么回事

回复:
user: user-1
content: 数学公式和编程语言不可以直接划等号的。  未定义Log吧

user: user-2
content: 辛苦你了，居然能把那个符号搞来的=.=，厉害，但是没必要，函数log10，就是键盘输入 l o g
user-0 提问: 写入位置0xCCCCCCCC时发生访问冲突。

回复:
user: user-1
content: %d后面应该加&.不过后面的第三参数是8，前后有点矛盾。建议把结构体定义贴出来。

user: user-2
content: 你的student指针没有分配内存吧

user: user-3
content: 数字类型当scanf_s参数应该在前面加&,因为必须传地址
user-0 提问: 请问出现这样错误应该怎么改?求大神指点

回复:
user: user-1
content: 复合语句，写错了

user: user-1
content: 只有预处理命令不需要分号，因为那是写给编译器看的，告诉他编译前做这些处理，预处理命令不完全算C语法，这样看的话，C语法都是需要分号的，符合语句{}就当做另一种形式的分号。

user: user-2
content: 全局变量也是需要分号;的

user: user-3
content: ①第五行，最后面加分号 ②指针类型，在*之前加空格，比如Mgrap *p

user: user-4
content: 先在第 5 行 的末尾 增加 一个 分号 再说。

user: user-5
content: int visted[MAXEX] 后面没有分号;
user-0 提问: 队列的基本程序操作

回复:
user: user-1
content: void EnterQueue(SeqQueue* SQ,DataType data) {     if (IsFull(SQ))     {         printf("队列已满\n");         //return 0;         return;     }     SQ->Queue[SQ->rear] = data;  //在队尾插入元素data     SQ->rear = SQ->rear + 1;     //队尾指针后移一位 } 这个地方需要改一下，不然编译不过

user: user-1
content: 楼主是什么问题，建议贴出代码之后再把问题描述一下。不是大家都愿意去猜的。
user-0 提问: 请求哪位大哥看看，十分急啊啊啊！为什么我的m没有初始化？？？

回复:
user: user-1
content: int Query_a_record(Bookinfo dictList[],int n) {     int i;     Bookinfo *m;      m = (Bookinfo *)malloc(sizeof(Bookinfo));     if (!m)         exit(0);     gets((*m).book);     if((i=Query(dictList,n,m))>0)         printf("Up to %d record(s)\n",i);     else         printf("No records\n");     free(m); }  供参考！  m是野指针，不能直接使用。可以考虑用malloc或者直接定义结构体变量。

user: user-2
content: Bookinfo *m; 这个语句并没有初始化，m指向一个野指针，要么new一个堆上的对象，要么就声明一个栈上创建对象Bookinfo m。
user-0 提问: 使用C如何获取windows当前运行的应用程序(而非所有进程)

回复:
user: user-1
content: 搜类似任务管理器的开源项目。

user: user-2
content: 用现成的API或是当前系统的进程快照，进而获取每个进程的名称

user: user-3
content: cmd的tasklist命令不知道可不可以帮到你
user-0 提问: 大神帮我看看问题出现在哪里？？

回复:
user: user-0
content: 引用 4 楼 weixin_44702971 的回复:[quote=引用 3 楼 weixin_44702971的回复:]我想知道这个程序为什么输入非数字就会结束循环 哪个大佬帮忙解释一下 求回复 求回复 求回复[/quote]   scanf（） 所要获取得时 %d 也就是整数，输入错误自然会结束啦

user: user-1
content: 引用 3 楼 weixin_44702971的回复:我想知道这个程序为什么输入非数字就会结束循环 哪个大佬帮忙解释一下 求回复 求回复 求回复

user: user-1
content: 我想知道这个程序为什么输入非数字就会结束循环 哪个大佬帮忙解释一下

user: user-2
content: %ld和%1d的区别。如果是自己手动输入的代码，那么需要注意下是l而不是1

user: user-3
content: 你两个scanf里是“%ld”写成了“%1d”，字母l变成了数字1，导致的后果是，你每次输入只取了1位数字，那么没读取完的下次循环时就会自动读取，所以你输入121，第一次只读取百位的1，剩下“21”没读，所以又自动循环了两次，所以你倒数第二行有出现3次。而最后是结果其实就是每个位的数相加：4+4+3+3+8+8+1+2+1=34。
user-0 提问: c语言如何后台起个服务偷偷倒计时，时间一到自动关机呢？

回复:
user: user-1
content: 哇，100分，非常感谢呀

user: user-0
content: 引用 7 楼 六道佩恩的回复:我给你写三个例子。 第一个例子是bat脚本，也就是你新建一个txt文本，写如下代码，然后保存，修改后缀为.bat，双击运行即可。  set /p time=分钟数： set /a t=%time%*60 shutdown -t %t% -s   第二个例子是C语言使用shutdown自己的延时功能：  #include "stdio.h" int main( void ) { 	char cmd[200]={0}; 	int t=0; 	printf("多少分钟后关机:"); 	scanf("%d",&t); 	sprintf( cmd, "shutdown -t %d -s", t*60 );  	system(cmd); 	return 0; }   第三个例子是用C语言延时：  #include "stdio.h" #include "windows.h" int main( void ) { 	int t=0; 	printf("多少分钟后关机:"); 	scanf("%d",&t); 	Sleep(t*60*1000); 	system("shutdown /s");	//前面说错了，/s才是关机，/a是取消关机  	return 0; }  好的，谢谢，晚点我试一下

user: user-2
content: 引用 4 楼 636f6c696e 的回复:bat文件写个服务shutdown -s就好了 windows下当然用bat啊

user: user-3
content: 引用 7 楼 六道佩恩 的回复:我给你写三个例子。 第一个例子是bat脚本，也就是你新建一个txt文本，写如下代码，然后保存，修改后缀为.bat，双击运行即可。  set /p time=分钟数： set /a t=%time%*60 shutdown -t %t% -s   第二个例子是C语言使用shutdown自己的延时功能：  #include "stdio.h" int main( void ) { 	char cmd[200]={0}; 	int t=0; 	printf("多少分钟后关机:"); 	scanf("%d",&t); 	sprintf( cmd, "shutdown -t %d -s", t*60 );  	system(cmd); 	return 0; }   第三个例子是用C语言延时：  #include "stdio.h" #include "windows.h" int main( void ) { 	int t=0; 	printf("多少分钟后关机:"); 	scanf("%d",&t); 	Sleep(t*60*1000); 	system("shutdown /s");	//前面说错了，/s才是关机，/a是取消关机  	return 0; }  我感觉还是第一个例子好一点

user: user-4
content: https://baijiahao.baidu.com/s?id=1610647687331441438&wfr=spider&for=pc 定时任务+shutdown就好了

user: user-4
content: bat文件写个服务shutdown -s就好了

user: user-5
content: sleep+shutdown?

user: user-6
content: 要自己写？现在很多软件不都有家长控制的功能吗？

user: user-7
content: 不如装个家长控制类的软件，类似的太多了

user: user-1
content: 我给你写三个例子。 第一个例子是bat脚本，也就是你新建一个txt文本，写如下代码，然后保存，修改后缀为.bat，双击运行即可。  set /p time=分钟数： set /a t=%time%*60 shutdown -t %t% -s   第二个例子是C语言使用shutdown自己的延时功能：  #include "stdio.h" int main( void ) { 	char cmd[200]={0}; 	int t=0; 	printf("多少分钟后关机:"); 	scanf("%d",&t); 	sprintf( cmd, "shutdown -t %d -s", t*60 );  	system(cmd); 	return 0; }   第三个例子是用C语言延时：  #include "stdio.h" #include "windows.h" int main( void ) { 	int t=0; 	printf("多少分钟后关机:"); 	scanf("%d",&t); 	Sleep(t*60*1000); 	system("shutdown /s");	//前面说错了，/s才是关机，/a是取消关机  	return 0; }

user: user-1
content: C语言的话，用system函数调用shutdown命令，如system("shutdown /a")      至于延时，shutdown本身就是设定多久后关机的功能，你也可以通过Sleep函数来延时，头文件windows.h，单位为毫秒，如Sleep(100)表示延时100毫秒
user-0 提问: 应该是42啊

回复:
user: user-1
content: printf("%d",41);又不是printf("%d",*p); 楼主赶紧别做这些题了，一堆垃圾题目，就像微博上很火的猴子+香蕉等于多少，有啥意义？

user: user-2
content: printf直接打印的41，没有用到p，玩的文字游戏而已
user-0 提问: 我咋就找不到正确候选项呢？

回复:
user: user-1
content: 可以结贴了，楼上说的很明确。

user: user-2
content: 楼上已经把过程说的很清楚了，arr[1]能++为啥a不能++了么？脑子要转得快一点哈

user: user-3
content: 第一句：arr[1]自增后赋值给a，a是2，arr[1]成了2； 第二句：arr[1]赋值给b后自增，b是2，arr[1]成了3； 第三句：arr[a]赋值给c后，a自增，c是9，a成了3.  补充： ++x：先给x加一， x++：先计算x，然后给x加一
user-0 提问: 为什么不是world？

回复:
user: user-1
content: printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方，而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。

user: user-2
content: printf("%s %s", str1, str2); 这样才能打出hello world。 话说这种题目也是蛋疼，参数和格式化字符串不匹配是很容易出现问题的写法

user: user-3
content: 只有一个%s，那么打印前面的str1，后面的str2被忽略了

user: user-4
content: 因为只给了一个%s，而且匹配是从左往右

user: user-5
content: 因为参数是从左边开始匹配不是从右边啊
user-0 提问: 程序运行两次，GetModuleHandle获取的实例句柄是哪一个的？

回复:
user: user-1
content: 引用 7 楼 陆寻禹 的回复:[quote=引用 4 楼 棉猴 的回复:] Retrieves a module handle for the specified module. The module must have been loaded by the calling process. 这个模块必须是被调用进程所导入的模块。那如果存在不同路径的同名模块呢[/quote]完整路径相同才算同一模块，不同路径当然是不同模块了，此时还谈什么同名，没有意义。

user: user-2
content: 引用 4 楼 棉猴 的回复:Retrieves a module handle for the specified module. The module must have been loaded by the calling process. 这个模块必须是被调用进程所导入的模块。那如果存在不同路径的同名模块呢

user: user-1
content: 引用 3 楼 六道佩恩 的回复:这里并没有答案 资料均来自微软同一页面。两句话表达类似的意思，说法不同而已： https://technet.microsoft.com/en-us/ms683199.aspx引用The module must have been loaded by the calling process. 必须是调用进程已加载的模块引用The name is compared (case independently) to the names of modules currently mapped into the address space of the calling process. 该名称好比是映射到调用进程空间的模块名称（不区分大小写） 虽然这里的 compared to 有些难理解，不过能明白想表达的意思是说必须是当前进程的模块名。 多查 MSDN 就都知道了。

user: user-0
content: 引用 4 楼 棉猴 的回复:Retrieves a module handle for the specified module. The module must have been loaded by the calling process. 这个模块必须是被调用进程所导入的模块。 哦哦，谢谢，你的回答很给力。

user: user-3
content: Retrieves a module handle for the specified module. The module must have been loaded by the calling process. 这个模块必须是被调用进程所导入的模块。

user: user-0
content: 引用 2 楼 贾可 的回复:SyntaxHMODULE WINAPI GetModuleHandle(   __in_opt  LPCTSTR lpModuleName );Parameters lpModuleName The name of the loaded module (either a .dll or .exe file). If the file name extension is omitted, the default library extension .dll is appended. The file name string can include a trailing point character (.) to indicate that the module name has no extension. The string does not have to specify a path. When specifying a path, be sure to use backslashes (\), not forward slashes (/). The name is compared (case independently) to the names of modules currently mapped into the address space of the calling process. If this parameter is NULL, GetModuleHandle returns a handle to the file used to create the calling process (.exe file). 这里并没有答案

user: user-1
content: SyntaxHMODULE WINAPI GetModuleHandle(   __in_opt  LPCTSTR lpModuleName );Parameters lpModuleName The name of the loaded module (either a .dll or .exe file). If the file name extension is omitted, the default library extension .dll is appended. The file name string can include a trailing point character (.) to indicate that the module name has no extension. The string does not have to specify a path. When specifying a path, be sure to use backslashes (\), not forward slashes (/). The name is compared (case independently) to the names of modules currently mapped into the address space of the calling process. If this parameter is NULL, GetModuleHandle returns a handle to the file used to create the calling process (.exe file).

user: user-4
content: 最后运行的那个，我猜。
user-0 提问: C语言编写程序加注释

回复:
user: user-1
content: C 语言里可以有两种注释方式：/* */ 和//。 注意：/*…*/这种形式的注释不能嵌套。

user: user-0
content: 引用 1 楼 jsx_SEVEN的回复:我觉得程序就是把人做的过程写出来，先想一下人做的时候会怎么做，先写人的做法(注释)，再写代码。 比如第二题，首先肯定需要两个字符数组，然后是给数组s2赋值，然后复制到s1，然后打印一下s1. 文件名应该做到见名知义，可以起个Copy.c，想让第一次看到代码的人就能知道代码的功能，可以在前面加上题目。头文件、主函数这些的注释可以省略。   //编写程序，将字符数组s2中的全部字符复制到字符数组s1中。  //头文件 #include <stdio.h>  //主函数 int main() { 	//声明两个字符数组s2,s1 	char s2[100], s1[100];  	//给s2赋值 	gets(s2); 	 	//复制到s1 	strcpy(s1, s2);  	//打印s1 	puts(s1); 	 }  感谢🙏我会好好学习的

user: user-2
content: 伸手党别吹牛逼了，从没听说只会写程序不会加注释的。 你如果真心不会加注释，把你的代码发出来，我们来帮你们加注释。

user: user-3
content: 我觉得程序就是把人做的过程写出来，先想一下人做的时候会怎么做，先写人的做法(注释)，再写代码。 比如第二题，首先肯定需要两个字符数组，然后是给数组s2赋值，然后复制到s1，然后打印一下s1. 文件名应该做到见名知义，可以起个Copy.c，想让第一次看到代码的人就能知道代码的功能，可以在前面加上题目。头文件、主函数这些的注释可以省略。   //编写程序，将字符数组s2中的全部字符复制到字符数组s1中。  //头文件 #include <stdio.h>  //主函数 int main() { 	//声明两个字符数组s2,s1 	char s2[100], s1[100];  	//给s2赋值 	gets(s2); 	 	//复制到s1 	strcpy(s1, s2);  	//打印s1 	puts(s1); 	 }
user-0 提问: 能麻烦你们帮我看眼为啥运行结果不对吗

回复:
user: user-1
content: 引用 2 楼 北言净 的回复:嗯嗯好的，你们平时写程序是直接写还是在草稿纸上拟好思路再上机调试  像这种题目，边看题目就可以一边写代码了，写完运行一下，错了加断点调试马上就能找出，没必要打草稿，如果稍微比较复杂的问题，就需要首先有一个全局的思路，是需要提前拟好思路的，再难一点的，就需要问专业人士了

user: user-0
content: 嗯嗯好的，你们平时写程序是直接写还是在草稿纸上拟好思路再上机调试

user: user-2
content: 问题在于faHeight,moHeight是float类型，scanf时用%d接收 而且你的程序逻辑错误不少，好好检查下吧，比如M是代表男性，你的程序搞反了
user-0 提问: 小白求助

回复:
user: user-1
content: 引用 2 楼 雨过丶天阴 的回复:[quote=引用 1 楼 user-1的回复:]最简单的，遍历一下就可以了呀 萌新刚学c语言数据结构，求源码[/quote] 就用一个循环，然后循环里面判断是x就换成y这样子，没有具体的题目还真不知道怎么编合适如果对循环也不太熟悉的话，建议先学一下C语言

user: user-0
content: 引用 1 楼 user-1的回复:最简单的，遍历一下就可以了呀 萌新刚学c语言数据结构，求源码

user: user-1
content: 最简单的，遍历一下就可以了呀
user-0 提问: VS2015下C语言如何导出动态链接库

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

user: user-2
content: 应该没有问题 那些是c++运行库,depends找不到它们路径而已 你可以创建个exe调用这个dll看看
user-0 提问: 简单的电梯模拟系统，哪位大佬能给提示啊？

回复:
user: user-0
content: C语言怎么创建.h文件啊，在线等

user: user-1
content: 先自己写下状态机图 输入：电梯内按键、电梯外按键 状态：电梯运行状态（停止/开门/关门/上升/下降） 输出：当前所在楼层

user: user-0
content: 引用 5 楼 636f6c696e的回复:先自己写下状态机图 输入：电梯内按键、电梯外按键 状态：电梯运行状态（停止/开门/关门/上升/下降） 输出：当前所在楼层 我的C其实不好

user: user-2
content: 引用 3 楼 傲梅虚竹 的回复:[quote=引用 1 楼 六道佩恩的回复:]电梯上升下降用输出文字来表示吧，关键在于在任何时候都有可能被按下电梯按钮，然后就看你怎么处理了。像电梯上升下降过程都不用管，到了楼层后，开启和关闭电梯门（显示文字）就不用说了，再开始运行时这时再判断一下按钮状态应该就差不多了，管它中间有没有新增或取消，判断这个时候的按钮状态就行了，按钮就用个数组表示吧。 怎么考虑捎带呢？比如第一次按的按钮是15楼，但是在上升的过程中，又加了一个新楼层10楼，怎样让电梯在10楼停了又继续向上[/quote] 你要考虑下减速过程大概有多长距离，比如从开始减速到完全停止需要1.5楼的距离，那么在8楼时检测到10楼被按就可以设定在10楼停，如果在8楼时检测到10楼没被按下，继续上升，而到9楼时发现10楼被按下了，那么就不管，因为现在刹车也来不及了，10楼就在下降过程中再停了。     简单点的话，你就可以像我说的这样每到一个楼层了再判断按钮的状态（每次循环一遍接收一次输入然后判断），，，，如果要写得好点的话，可以模拟个速度、加速度、高度，然后没0.1秒判断一次，，，大概这样

user: user-0
content: 引用 1 楼 六道佩恩的回复:电梯上升下降用输出文字来表示吧，关键在于在任何时候都有可能被按下电梯按钮，然后就看你怎么处理了。像电梯上升下降过程都不用管，到了楼层后，开启和关闭电梯门（显示文字）就不用说了，再开始运行时这时再判断一下按钮状态应该就差不多了，管它中间有没有新增或取消，判断这个时候的按钮状态就行了，按钮就用个数组表示吧。 怎么考虑捎带呢？比如第一次按的按钮是15楼，但是在上升的过程中，又加了一个新楼层10楼，怎样让电梯在10楼停了又继续向上

user: user-3
content: int a   //电梯当前位置  input int b   //电梯外人按钮的位置 input int c  //想要去的楼层  a<b  那么  一个一个加1往上跳，到达位置，显示停止，当输入C的时候，由C和B比较，再跳数字。

user: user-2
content: 电梯上升下降用输出文字来表示吧，关键在于在任何时候都有可能被按下电梯按钮，然后就看你怎么处理了。像电梯上升下降过程都不用管，到了楼层后，开启和关闭电梯门（显示文字）就不用说了，再开始运行时这时再判断一下按钮状态应该就差不多了，管它中间有没有新增或取消，判断这个时候的按钮状态就行了，按钮就用个数组表示吧。
user-0 提问: 编写简单的Arduino接收串口命令的函数，在PC端分别发送字符”A”,”B”,”C”能够控制LED显示三种不同亮度。

回复:
user: user-1
content: C和C++完整教程:https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++算法完整教程:https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 需要对abc进行清空

user: user-3
content: 根据LED这种东西的伏安特性，惯例都是使用PWM调整亮度的，而不是调整电压。

user: user-4
content: 打断点看下判断有没有进啊，实在不行printf 或者cout点信息也行啊。

user: user-5
content: 不是字符，是字符对应的ASCII，a=97，b=98，c=99；abc=这三个值
user-0 提问: 大佬们，这个代码哪里有错，为啥生成不了

回复:
user: user-1
content: 你这人怎么可以这么恶毒，居然噌我家坤坤热度，哇好恶心，goto这个关键字最好不要用吧，不安全，最好还是老老实实写成函数调用

user: user-2
content: 我用的是VS2017，运行成功了，还把每个选项挨个输了一次，。

user: user-3
content: 多定义几个变量吧，一个a不够用。。而且一堆goto真的晕。

user: user-4
content: 报错信息是什么。。。你只给代码我怎么都知道，还有别用这么一大堆的goto跳来跳去

user: user-5
content: 小心人家给你寄律师函。哈哈哈哈。

user: user-0
content: 求大佬们帮帮，在线等
user-0 提问: C语言求最大值，哪里错了。急

回复:
user: user-0
content: 引用 1 楼 weixin_45007129的回复:scanf的里面的格式化字符串是什么样子，输入的时候就怎么输入。 你应该输入的是【1,2】，框起来的内容，别漏掉了代码里的英文半角逗号。 好了＾０＾~，谢谢大佬。一直没发现这个错误

user: user-1
content: scanf的里面的格式化字符串是什么样子，输入的时候就怎么输入。 你应该输入的是【1,2】，框起来的内容，别漏掉了代码里的英文半角逗号。
user-0 提问: 对十个整数按从大到小顺序进行选择法排序为什么结果会出现-858993460

回复:
user: user-1
content: if(i!=Pos) tmp=Num[i],Num[i]=Num[Pos];Num[Pos]=tmp;   第二个 表达式的后面 应该是 「逗号」 ， 写成了「 分号」， 那么 第三个 表达式 就不是 if 底下的 语句块的一部分了。   「强烈建议」还是 用 通常的 花括号 来 包括 语句块， 语句也写成用 分号 来 分隔的形式， 避免 这种 使用 逗号 取巧 反而 让人 看不清 代码的情况。  如有帮助，烦请及时 结帖 、 给分 ！ ：）

user: user-2
content: 没有理解选择排序，下面漏了一个花括号，两个if应该是并列的  for (i = 0; i < SIZE - 1; i++) 	{ 		Pos = i; 		for (j = i + 1; j < SIZE; j++) { 			if (Num[j] < Num[Pos]) 				Pos = j; 			if (i != Pos) 				tmp = Num[i], Num[i] = Num[Pos]; Num[Pos] = tmp; 		} 	}
user-0 提问: 问一个C语言数组问题

回复:
user: user-1
content: 最粗暴的方法，第一位和最后一位已经确定，嵌套6层for循环可以找到这样的数字，另外可以用搜索算法（回溯深搜）求解，但你得把你的题目再描述清楚一点
user-0 提问: 关于c语言 base64编码问题，求大佬们帮忙看看

回复:
user: user-1
content: Znh4a3lvdWJhc2U2N 是解不出来fxxkyoubase64,因为最后少了一个字符 至少也要Znh4a3lvdWJhc2U2NA 最后的==是填位用的,没有实际作用 你需要明白base64原理,就是把3字节的任何字节流,转化为4字节的可打印字符(256->64的映射,8位对应6位) 如果编码后,长度不是4字节的倍数,就用=填充
user-0 提问: 小白求助，多元不等式整数解求发

回复:
user: user-1
content: 由于数据量不是很大（21^4），可以用暴力法  #include<stdio.h> int main() { 	int a, b, c, d; 	for (a = 120; a <= 140; a++) { 		for (b = 120; b <= 140; b++) { 			for (c = 120; c <= 140; c++)			{ 				for (d = 120; d <= 140; d++) 					if (a + b + c + d >= 550) { 						printf("a=%d b=%d c=%d d=%d\n", a, b, c, d); 					} 			} 		} 	} 	return 0; }