Question: 指针

引用 38 楼 liups 的回复:[quote=引用 37 楼 自信男孩 的回复:] [quote=引用 3 楼 bsnow 的回复:] 想到一种方法，但是 强烈不推荐用以下方式写代码。   #include <stdlib.h>  int *min(int x, int y) {     int *re = (int *)malloc(sizeof(int));     re = x < y ? &x : &y;     return re;  }  这样做还是可以的，或者用static静态变量。返回静态变量的地址也是可以的。[/quote] 这样做还是可以的？我就问你申请的内存去哪里了？[/quote] 哈哈，从re = x < y ? &x : &y;开始就被覆盖了。内存泄漏 这个函数如果返回后立马取值的话。虽然结果上确实是对的，但严格说取的也是垃圾数据。毕竟返回的终究是局部变量地址。

引用 79 楼 千梦一生 的回复:[quote=引用 78 楼 千梦一生 的回复:]  //假设题没有出错是自己理解偏了，那么强行理解 int*min(int x,int y) { return *((int*)x)>*((int*)y)?(int*)x:(int*)y; }  虽然给的是int参数，但也没明确表示x、y的值不是地址。可以这么理解[/quote]不能  既然是 int 参数  就明确 x y不是地址

这个神题，惹来这么多讨论。如果严格响应该题的要求，下面这个方案似乎靠得上一点边： #include <stdio.h>  int i; int j;  int* TestMin(int x, int y) {     return x < y ? &i : &j; }  int main(void) {     printf("请输入两个整：");     scanf("%d%d", &i, &j);     printf("小值为：%d\n", *(TestMin(i, j)));      return 0; } 可是写下这样的代码，自己都觉得羞耻，如果为自己写出这种东西，赶紧找快豆腐碰死算了。 另外，楼上有写带参数的宏的，个人认为不能算是该题目的答案，因为中明确有“...返回两个整数中...”。程序中的宏在程序编译前会进行宏替换，所以带参数的宏，形式上像函数，但却不是函数，这种“函数”也不会有调用与返回过程。 总之，如果严格遵照题目要求，这题真神——大神出的题。

引用 81 楼 liups 的回复:[quote=引用 79 楼 千梦一生 的回复:] [quote=引用 78 楼 千梦一生 的回复:]  //假设题没有出错是自己理解偏了，那么强行理解 int*min(int x,int y) { return *((int*)x)>*((int*)y)?(int*)x:(int*)y; }  虽然给的是int参数，但也没明确表示x、y的值不是地址。可以这么理解[/quote] 这个不行！因为函数返回时x和y不再有效，强行访问会出问题的[/quote] 他的意思是把传进来的int数据当做指针来操作，传址运算可以的

有一个说话还是需要纠正一下，不是不能返回局部变量的地址，是原则上不要返回非静态局部变量的地址。静态局部变量的地址是可以返回的，在非常非常特殊的情况下，也可以返回非静态局部变量的地址（绝不推荐），所以，VS对返回非静态局部变量的地址也只是报警告： warning C4172: 返回局部变量或临时变量的地址 而不是报错。至于返回静态局部变量的地址，本身就是合理合法的，VS就不会报任警告/错误了。

首先我也如楼上各位一样，觉得这个题目出得不怎么样。如果实在是要做，下面这个程序勉强应付一下。 #include<stdio.h>  int* TestMin(int x, int y) {     static int tmin = 0;     if (x < y)         tmin = x;     else         tmin = y;      return &tmin; }  int main() {     int i = 100;     int j = 25;      printf("%d", *TestMin(i, j));      return 0; } 通过将局部变量设为静态，返回它的地址没有问题，但是这个地址其实和原来要比较的两个值是没什么关系的。这种情况下，函数返回一个地址和直接返回小值相比，本质上没有意义，还容易造成混乱。 但真的觉得这种题目出得...找最小值，要返回最小值的指针 #include<stdio.h>  int* TestMin(int* px, int* py) {     if (*px < *py)         return px;     else         return py; }  int main() {     int i = 100;     int j = 25;      printf("%d", *TestMin(&i, &j));      return 0; } 如果形参变一下，就没那么多问题了

引用 79 楼 千梦一生 的回复:[quote=引用 78 楼 千梦一生 的回复:]  //假设题没有出错是自己理解偏了，那么强行理解 int*min(int x,int y) { return *((int*)x)>*((int*)y)?(int*)x:(int*)y; }  虽然给的是int参数，但也没明确表示x、y的值不是地址。可以这么理解[/quote] 这个不行！因为函数返回时x和y不再有效，强行访问会出问题的

引用 79 楼 千梦一生 的回复:[quote=引用 78 楼 千梦一生 的回复:]  //假设题没有出错是自己理解偏了，那么强行理解 int*min(int x,int y) { return *((int*)x)>*((int*)y)?(int*)x:(int*)y; }  虽然给的是int参数，但也没明确表示x、y的值不是地址。可以这么理解[/quote] 这么理解没问题，就是调用这个函数的时候还要把指针强制转换为int型哈哈

引用 78 楼 千梦一生 的回复: //假设题没有出错是自己理解偏了，那么强行理解 int*min(int x,int y) { return *((int*)x)>*((int*)y)?(int*)x:(int*)y; }  虽然给的是int参数，但也没明确表示x、y的值不是地址。可以这么理解

#include <stdlib.h> #include <stdio.h> int result; int* mymin(int x,int y){     result = x < y ? x : y;     return &result;  }  int main(int argc,char **argv) {     int z;      z = *(mymin(3,6));     printf("z = %d\n",z);      exit(0); }

哈哈有意思，大神不少啊

题目错的，不能返回局部变量的地址

直接传地址不好么？为什么把值传进来。

引用 60 楼 ytfhwfnh 的回复:我的解决方案： #define min(x,y) ((x)<=(y)?&(x):&(y))  理由： 1. 凡是调用min(x,y)的地方无需做任何更改，便可达到楼主目的。 2. 不用malloc，不怕野指针。  如果要坚持题目没错的话，我觉得这个最可行

题目出的有问题，返回一个临时变量地址给你有毛线用，就算真返回，返回值也应该是int,而不是int*. 真的是毛病

同问根本不知道这是什么

引用 58 楼 早打大打打核战争 的回复:如果题目确实是这样的，那只能理解为返回一个有效地址包含小值即可  int *min(int x, int y) {   static int p = x < y ? x : y;   return &p;  } 静态变量，这个思路不错！


Question: 用c语言实现

你的提问我看了，因为太笼统，无法回答。另外，我们也不太愿意帮你写作业。你可以自己试着完成，遇到问题再来提问。 类似于scanf("%d",n)这种题目，我们是非常娴熟的。

需求不明确。  CSDN论坛新手指南

帮帮忙兄弟萌，刚入门，还不太熟，而且很急用

不，是因为会的在忙，闲的不会，我恰巧就是后者

都是机器人吗这软件。。。。


Question: 不知道哪里错了 求大佬！！！

希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

引用 3 楼 棉猴的回复:定义数组时，数组的维度必须是常量表达式。因为m和n是变量，所以 int arr[m][n]; 代码需要修改。使用new关键字进行动态分配。 #include <stdio.h> int main() { 	int m, n; 	printf("需要输入m行的值："); 	scanf("%d", &m); 	printf("需要输入n列的值："); 	scanf("%d", &n);  	//int arr[m][n]; //----------------以下代码为动态分配，指向指针的指针，可以看成是二维数组----------------- 	int** arr = new int*[m]; 	int i, j; 	for (i = 0; i < m; i++) 	{ 		arr[i] = new int[n]; 	} 	//循环输入；  	for (i = 0; i<m; i++) 	{ 		for (j = 0; j<n; j++) 		{ 			printf("请输入第%d行第%d列的值：", i + 1, j + 1); 			scanf("%d", &arr[i][j]); 		} 	} 	//循环输出；  	for (i = 0; i<m; i++) 	{ 		for (j = 0; j<n; j++) 		{ 			printf("%d\t", arr[i][j]); 		} 		printf("\n"); 	}  	int b[100]; 	for (i = 0; i<n; i++)//----m改为n------ 	{ 		for (j = 0; j<m; j++)//------n改为m------ 		{ 			printf("%d\t", arr[j][i]);//-----添加\t----------- 		} 		printf("\n");//-------------添加换行----------- 	} //------------以下代码为释放动态分配的空间------------- 	delete[] *arr; 	delete[] arr; 	return 0; } VS2015调试结果如下所示  对于二维数组的使用，请参考《C++中二维数组的使用》和《C++二维数组》 希望能够帮到你！ 谢谢谢谢谢谢谢谢谢谢谢谢

/******************************************************************** 	description: 动态申请二维数组 	author: wowpH 	csdnid: pfdvnah 	date  : 2019-11-9 15:38:25 ********************************************************************/ #include <stdio.h> #include <stdlib.h> int main(void) { 	int row, col; 	printf("输入行数和列数："); 	scanf_s("%d %d", &row, &col); 	 	int** matrix = NULL;// 初始化为NULL  	// 消除C6085和C6086警告 	if (row <= 0 || col <= 0) { 		printf("行数或列数不合法！\n"); 		exit(-1); 	}  	// 动态申请内存 	matrix = (int**)malloc(row * sizeof(int*)); 	 	// 消除C6011警告 	if (NULL == matrix) { 		printf("无法动态申请内存！\n"); 		exit(-1); 	}  	for (int i = 0; i < row; ++i) { 		matrix[i] = (int*)malloc(col * sizeof(int));  		// 消除C6011警告 		if (NULL == matrix[i]) { 			printf("无法动态申请内存！\n"); 			exit(-1); 		} 	}  	// 给二维数组赋值 	for (int i = 0; i < row; ++i) { 		for (int j = 0; j < col; ++j) { 			matrix[i][j] = i * col + j; 		} 	}  	// 输出二维数组 	for (int i = 0; i < row; ++i) { 		for (int j = 0; j < col; ++j) { 			printf("%2d", matrix[i][j]); 			putchar((j < col - 1) ? ' ' : '\n'); 		} 	} 	 	// 释放内存 	for (int i = 0; i < row; ++i) { 		free(matrix[i]); 	} 	free(matrix); 	return 0; }

释放空间用下面的代码 for (i = 0; i < m; ++i) 	{ 		delete[] arr[i]; 	} 	delete[] arr;

最后输出的那个循环错了，内外层循环换一下就好了

int m,n; printf("需要输入m行的值："); scanf("%d",&m);  printf("需要输入n列的值："); scanf("%d",&n);   int arr[m][n]; int i,j; //循环输入；  for(i=0;i<m;i++) { for(j=0;j<n;j++) { printf("请输入第%d行第%d列的值：",i+1,j+1); scanf("%d",&arr[i][j]); } } //循环输出；  for(i=0;i<m;i++) { for(j=0;j<n;j++) { printf("%d\t",arr[i][j]); } printf("\n"); }  int b[100]; for(j=0;j<n;j++) { for(i=0;i<m;i++) { printf("%d ",arr[j][i]); } }


Question: C语言成绩标准差 附上自己的代码

引用 7 楼 Programmer_Shaw的回复:[quote=引用 6 楼 不闻窗外事的回复:]最后应该是除以n吧，为什么是n-1 公式是n-1  除n答案也不对[/quote] 那你实际上算一算到底是多少，每一步该是什么，把每一步都打印出来，看看与你算的结果有没有区别

引用 6 楼 不闻窗外事的回复:最后应该是除以n吧，为什么是n-1 公式是n-1  除n答案也不对

最后应该是除以n吧，为什么是n-1

求助  求大佬帮忙看下

引用 3 楼 Programmer_Shaw 的回复:[quote=引用 2 楼 user-3的回复:]我还以为是楼主C语言成绩差 哈哈  我成绩是很差[/quote] 但是没有到考试呢

引用 2 楼 user-3的回复:我还以为是楼主C语言成绩差 哈哈  我成绩是很差

我还以为是楼主C语言成绩差

出啥问题了 答案不对  我感觉思路没问题


Question: 哪里有内存泄露？

引用 3 楼 羅昇 的回复:buff = strchr(ipts, ' ');修改了 buff free buff不能正确释放内存 会造成堆破坏  谢谢，我的解决方法是：取消动态分配，在while循环外定义了char *buff = NULL。[/quote]  44行，改成 i < SCANF_LEN - 1， 要不然52行会数组越界[/quote] 恩，这个我改了，谢谢^_^

引用 2 楼 weixin_36124480 的回复:[quote=引用 1 楼 user-2 的回复:] buff = strchr(ipts, ' ');修改了 buff free buff不能正确释放内存 会造成堆破坏  谢谢，我的解决方法是：取消动态分配，在while循环外定义了char *buff = NULL。[/quote]  44行，改成 i < SCANF_LEN - 1， 要不然52行会数组越界

引用 1 楼 user-2 的回复:buff = strchr(ipts, ' ');修改了 buff free buff不能正确释放内存 会造成堆破坏  谢谢，我的解决方法是：取消动态分配，在while循环外定义了char *buff = NULL。


Question: C11的线程库发现很多IDE都没有支持啊，请问去哪里下载它的库啊

引用 2 楼 六道佩恩 的回复:[quote=引用 1 楼 user-1 的回复:] https://stackoverflow.com/questions/22875545/c11-gcc-threads-h-not-found glibc能找到C11线程的实现，请问如何编译成Windows下的.a库？[/quote]找到对应版本 mingw代码 编译

引用 1 楼 user-1 的回复:https://stackoverflow.com/questions/22875545/c11-gcc-threads-h-not-found glibc能找到C11线程的实现，请问如何编译成Windows下的.a库？


Question: c语言编写程序

#include<stdio.h> int main(void) { 	int i, j, ch; 	printf("输入输出行数:"); 	scanf("%d", &ch); 	for (i = 1; i <= ch/2+1; i++) 	{ 		for (j = 1; j <= i; j++)  			printf("*"); 		printf("\n"); 	} 	return 0; }

⑴判断输入是否符合要求 ⑵for 从1到n ⑶显示一行星号

我看不出来┐（─__─）┌

自己先尝试打出自己思路吧


Question: 求助！！

😷这个字符串该怎么输入啊

ASCII表中'A'的值，确实比'a'小。 因此求字符串中最小值就可以了。

数字怎么比较的，字母就怎么比较。  CSDN论坛新手指南


Question: POSIX C有lib和dll吗？

可以找到动态库.so结尾的（有的后面会带数字，表示版本），windows下应该是.dll结尾的

引用 5 楼 六道佩恩 的回复:[quote=引用 2 楼 lin5161678 的回复:] 这种东西平台相关的 在win下链接库才是 lib 和 dll后缀  当然 你非要把 .a库重命名 .lib  那也是可以的 怎么可能重命名。。。。。 需要移植的好吧。 POSIX的线程库我只找到.a版本，没有lib和dll[/quote]你需要一份win下的posix线程库的代码 然后编译成lib dll 直接找unix的链接库 是缘木求鱼  这是不同的操作系统

引用 2 楼 lin5161678 的回复:这种东西平台相关的 在win下链接库才是 lib 和 dll后缀  当然 你非要把 .a库重命名 .lib  那也是可以的 怎么可能重命名。。。。。 需要移植的好吧。 POSIX的线程库我只找到.a版本，没有lib和dll

引用 1 楼 不闻窗外事 的回复:什么叫lib库，你说的是动态库吧，肯定有啊，一般都是动态库，我不知道你说的posix c指的是哪些内容，但是都是有的，例如在我的linux系统上，/lib下就有libpthread线程动态库 lib库是Windows平台的静态库啊。。。 dll才是Windows平台的动态库 a是Linux、Unix等平台的静态库 so是Linux、Unix等平台的动态库


Question: C语言使用goto出现这种情况怎么解决呀。

问题已经解决，，，，，，，

代码呢？不能只说问题，不贴代码呢

跟goto没关系吧，应该你代码有问题

别用就完事了


Question: 小白求教

希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html


Question: 求解错误原因

int类型可能不够存储，溢出了吧？改成long long试试看

#include <stdio.h>  int main() {     int t,i,n,m=1,s=0;      scanf("%d",&n);     for(t=1;t<=n;t++)     {         for(i=1;i<=t;i++)         {             m=m*i;         }         s=s+m;         m = 1;    //重新赋值为1     }     printf("%d\n",s);      return 0; }  供参考～

#include <stdio.h> int main(void) { 	int n, sum = 0, m = 1; 	scanf_s("%d", &n); 	for (int i = 1; i <= n; ++i) { 		m *= i; 		sum += m; 	} 	printf("%d\n", sum); 	return 0; } /* 12 522956313 请按任意键继续. . . */

for (t = 1; t <= n; t++) {     m = m * t;     s = s + m; }

要不要include  maths啊   是不是漏了这个呢


Question: 写这种代码是疯了么

可读性差的代码  C/C++语言环境下不知道有没有毕要，什么运行效率问题、编译优化问题…… 但是在Java/C#里，这种写法除了拿来装B，没毛用，遇到脾气不好的，可能被打死

啊哈哈哈哈哈哈哈哈哈哈

&&遇到0就不再运算 =从右往左运算

由于b++为0 所以++c就不做了 所以c还是0

多学习，多交流

最好的方法是，编译出. exe后 扔到ida里面反汇编，看一下汇编指令是怎么做的

这题是搞人的。我以前也学习过这个还不是给忘记了。一般情况达不到这样细致程度的需求。也就是说这样写的几乎就是炫技，坑下家。真有这个需要我现在也能写，需要调试一会儿才能写改出来。

代码风格吧，要让多数人都能看懂为准

引用 94 楼 yiyefangzhou24 的回复:[quote=引用 90 楼 ggglivw 的回复:] 我呆过的公司明文要求，一行一个++,--, 一行一个=. 你定义变量int a = 0, b = 0; 都不允许，必须定义成两行，这种一行定义多个变量更加没有歧义对吧，但是别个就是有这种代码规范要求。   [quote=引用 85 楼 liups 的回复:] [quote=引用 84 楼 yiyefangzhou24 的回复:] 看着头晕，团队里你这么写会被人打死 这个代码头晕的话，就别写程序了，干点别的更好[/quote][/quote]项目是按照代码行数算钱的吧？[/quote]  想多了，编程规范，越简单越清晰越好，不准为了炫技而炫技

引用 93 楼 yiyefangzhou24 的回复:[quote=引用 92 楼 liups 的回复:] [quote=引用 90 楼 ggglivw 的回复:] 我呆过的公司明文要求，一行一个++,--, 一行一个=. 你定义变量int a = 0, b = 0; 都不允许，必须定义成两行，这种一行定义多个变量更加没有歧义对吧，但是别个就是有这种代码规范要求。   [quote=引用 85 楼 liups 的回复:] [quote=引用 84 楼 yiyefangzhou24 的回复:] 看着头晕，团队里你这么写会被人打死 这个代码头晕的话，就别写程序了，干点别的更好[/quote][/quote] 没说让这样写，但是这种写法看不懂的话，只能说基础太差，基本语法都没有掌握[/quote]兄弟，不要持否定一切的眼光看待所有人，这种写法虽然看起来有点费劲，但真的看不懂得没几个人，C的设计思路？面试题？到了项目组都是扯犊子，你不按照团队的代码行文规范，写点类似大神的代码，看起来是高大上了，当一个项目里面100万行的代码，有1万行的神级别代码，项目经理就要找你喝茶了。在这里你可以理论，想想你一个月租房子的钱，你还会找项目经理，找团队规范理论？[/quote] 这只是一道习题或考题，同时也是经过了精心设计的，考查了几个知识点，没有技术缺陷，难度也不太大。你们这些专业程序员敢说自己看不懂吗？有脸说看不懂吗？

引用 90 楼 ggglivw 的回复:我呆过的公司明文要求，一行一个++,--, 一行一个=. 你定义变量int a = 0, b = 0; 都不允许，必须定义成两行，这种一行定义多个变量更加没有歧义对吧，但是别个就是有这种代码规范要求。   [quote=引用 85 楼 liups 的回复:] [quote=引用 84 楼 yiyefangzhou24 的回复:] 看着头晕，团队里你这么写会被人打死 这个代码头晕的话，就别写程序了，干点别的更好[/quote][/quote]项目是按照代码行数算钱的吧？

引用 92 楼 liups 的回复:[quote=引用 90 楼 ggglivw 的回复:] 我呆过的公司明文要求，一行一个++,--, 一行一个=. 你定义变量int a = 0, b = 0; 都不允许，必须定义成两行，这种一行定义多个变量更加没有歧义对吧，但是别个就是有这种代码规范要求。   [quote=引用 85 楼 liups 的回复:] [quote=引用 84 楼 yiyefangzhou24 的回复:] 看着头晕，团队里你这么写会被人打死 这个代码头晕的话，就别写程序了，干点别的更好[/quote][/quote] 没说让这样写，但是这种写法看不懂的话，只能说基础太差，基本语法都没有掌握[/quote]兄弟，不要持否定一切的眼光看待所有人，这种写法虽然看起来有点费劲，但真的看不懂得没几个人，C的设计思路？面试题？到了项目组都是扯犊子，你不按照团队的代码行文规范，写点类似大神的代码，看起来是高大上了，当一个项目里面100万行的代码，有1万行的神级别代码，项目经理就要找你喝茶了。在这里你可以理论，想想你一个月租房子的钱，你还会找项目经理，找团队规范理论？

引用 90 楼 ggglivw 的回复:我呆过的公司明文要求，一行一个++,--, 一行一个=. 你定义变量int a = 0, b = 0; 都不允许，必须定义成两行，这种一行定义多个变量更加没有歧义对吧，但是别个就是有这种代码规范要求。   [quote=引用 85 楼 liups 的回复:] [quote=引用 84 楼 yiyefangzhou24 的回复:] 看着头晕，团队里你这么写会被人打死 这个代码头晕的话，就别写程序了，干点别的更好[/quote][/quote] 没说让这样写，但是这种写法看不懂的话，只能说基础太差，基本语法都没有掌握

引用 88 楼 yiyefangzhou24 的回复:[quote=引用 85 楼 liups 的回复:] [quote=引用 84 楼 yiyefangzhou24 的回复:] 看着头晕，团队里你这么写会被人打死 这个代码头晕的话，就别写程序了，干点别的更好[/quote]大神，膜拜一下，我已经板砖好多年了[/quote] 偶非大神  楼上那些持否定态度的人应该去看一下K&R的那本C语言程序设计，仔细了解一下C的设计思路，这样写才是C的本质。况且这个做为一个示例或习题、考题完全没有毛病，确实是一个精心设计的程序或题目，也不存在技术的争议，更重要的是其实也不太难，只要基础扎实就一定能轻松解决的

我呆过的公司明文要求，一行一个++,--, 一行一个=. 你定义变量int a = 0, b = 0; 都不允许，必须定义成两行，这种一行定义多个变量更加没有歧义对吧，但是别个就是有这种代码规范要求。   引用 85 楼 liups 的回复:[quote=引用 84 楼 yiyefangzhou24 的回复:] 看着头晕，团队里你这么写会被人打死 这个代码头晕的话，就别写程序了，干点别的更好[/quote]

引用 85 楼 liups 的回复:[quote=引用 84 楼 yiyefangzhou24 的回复:] 看着头晕，团队里你这么写会被人打死 这个代码头晕的话，就别写程序了，干点别的更好[/quote]  虽然那种写法符合C的规范，除了嵌入外，其他很多公司那样写是不允许的。

引用 85 楼 liups 的回复:[quote=引用 84 楼 yiyefangzhou24 的回复:] 看着头晕，团队里你这么写会被人打死 这个代码头晕的话，就别写程序了，干点别的更好[/quote]大神，膜拜一下，我已经板砖好多年了

第一行中++a&&b++结果为0吧&&c++截断了，也就是c++根本没有执行，所以第一行c还是0

多写几个括号不行吗，太坑了

谢谢啊，学习到了！很久没有看C相关的东西，感觉很有用！！！！！


Question: 那位大佬来看看这个程序是怎么输出的啊？

k=1,i=5,所以k>i结果为假，用0表示 k>i<j就变成了0<j j=10，所以0<j结果为真，用1表示

这个有请@wowpH来回答！

（k>i）<j,如果这个还不理解看看下面 bool b = k>i; bool b2 = b < j; printf("%d",b2); 如果还不理解，那么复习下数据类型中关于bool和整型的章节。

表达式从左向右运算；  但是不建议在程序里这么写


Question: 求助

#include c #include stdio #include maths  main() { int shu,i,n scanf("%d",&shu); scanf("%d",&n);  for (n<shu,shu%n=i,n++) {       if i=0     { printf("shi sushu")     } else           { printf("bu shi sushu")          }  } getch(); }

有点麻烦哦   怎么用那么多变量呢  变量越少越好啊

n没有赋值啊。 N没有变化，那当然死循环了啊

while（b != 0） b=n/10 n都不会变，你怎么退出去

引用 5 楼 lqxzb 的回复:[quote=引用 1 楼 與蘤舊縐的回复:]while（b != 0） b=n/10 n都不会变，你怎么退出去 我不是从键盘上输入n了吗[/quote] 你是循环套循环，里面的循环没有改n，b要么永远不等于0，无限循环，要么直接等于0不进入循环

引用 1 楼 與蘤舊縐的回复:while（b != 0） b=n/10 n都不会变，你怎么退出去 我不是从键盘上输入n了吗


Question: 在VS中编译c，新手求大神解答

引用 1 楼 proorck2019的回复:是不是num.txt里的内容不对啊？ 不是，代码和文件在codeblock中可以正常运行

不会吧，代码在codeblock中可以正常运行

是不是num.txt里的内容不对啊？


Question: 求各位大佬解答

希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html


Question: 计算机导论


Question: 用C语言编写：求100到200的所有素数，并输出

//#include <studio.h> #include <stdio.h> #include <math.h>  int main() {     int a,b,c;     //scarf ("%d,a");     scanf ("%d", &a);     //b=(int)sqrt(a);     for(a=100;a<=200;a++) {         b=(int)sqrt(a);         for(c=2;c<=b;c++)             //if(c>b)             if(a % c == 0) {                 break;             }         if (c > b)             printf("%d\t",a);     }     printf("\n");     return 0; } 供参考～  代码编译不过的，逻辑也是有问题的。建议对比找一下自己的问题～

为了代码结构清晰，先编写一个函数，判断一个数是不是素数，再从100到200循环，调用这个函数。

scarf ("%d,a"); scanf("%d", &a);


Question: 0x509FE63C (ucrtbased.dll)处(位于 实验.exe 中)引发的异常: 0xC0000005: 写入位置 0x00542000 时访问冲突

应该是scanf_s("%s", a, sizeof(a));

scanf_s("%s", &a[n]);// 错误写法 scanf_s("%s", a, n);// 正确写法  CSDN论坛新手指南

楼主要输入一个学生的名字和成绩吗？还是输入多个学生的名字和成绩。 我看楼主是第二个情况，那么就要定义二维数组


Question: 二进制如何转化十进制

看不懂啊大佬们   刚入门  能不能有C语言的

给你一个别的语言版的参考  func main() { 	var num string; 	fmt.Scanf("%s", &num) 	var number []byte = []byte(num) 	var result float64 	for i, v := range number { 		result += (float64(v - '0')) * math.Pow(2, float64(len(number)-i-1)) 	} 	fmt.Print(int64(result)) }

手动如何计算，那么编程也可以用这个计算方法。比如1111:从右向左分别乘2^0, 2^1...

每一位上的数字乘以2的（位数-1）次方


Question: C·请教阶乘输出错误的问题

试着用unsigned long long，都是用8个字节表示（32位系统）的。

不要贴图，贴代码

为什么要一开始用double型，一开始用long int，最后输出s的时候(double)s强制转化一下


Question: 笔记

while(表达式) 零为假，非零为真。

记得结贴给分数啊，，，


Question: C语言中关于宏定义的使用

上面最后一句引用字体标错了。  如果新增加个符号改为#define Test_Demo(x) Test]##_Demo(x) ，Test宏展开了就多了个新增加的符号。

如果使用用法3 #define Test_Demo(x) Test]##_Demo(x) 展开后就是iRetCode = Test1]_Demo(0); 其实就需要将]去掉，或者有没有在宏定义中不影响展开的符号， 如果直接写成#define Test_Demo(x) Test##_Demo(x)，此时Test宏就没有展开， 如果新增加个符号改为#define Test_Demo(x) Test#]#_Demo(x) ，Test宏展开了就多了个新增加的符号。

有哪位大神说可以做到的？

有点基本概念  宏展开是一个预编译期的事情  i 取值是一个运行期的行为  宏展开的时候 无论如何也无法获取到 i 的值是多少  所以不可能实现你的想法

做不到


Question: C语言笔记


Question: 这个注释对不对，帮我看看（主要指针部分）


Question: c语言初学者求帮忙解决问题

建议贴代码（不要图片）

引用 7 楼 weixin_45849801 的回复:引用 6 楼 jdjsdkjbkb 的回复：我也是新手，代码图发下，应该没引用头文件吧代码就是hello world 那个代码 你写的程序发图看下啊

我也是新手，代码图发下，应该没引用头文件吧

引用 3 楼 jdjsdkjbkb 的回复：helloworld吗对的 但是就是出现错误呢

新建空项目。CSDN论坛新手指南

helloworld吗

引用 1 楼 與蘤舊縐 的回复：看下面错误信息 看他给你讲了什么 第三行末在查找预编译头时遇到意外的文件，是否忘记了向源中添加#include pch.h ，我在网上搜索 说不使用预编译头 我也设置了，但是还是出现这种错误

看下面错误信息 看他给你讲了什么 第三行末


Question: 如何用C语言实现提取网页邮箱的代码？

引用 4 楼 liups 的回复:[quote=引用 3 楼 1东风1 的回复:] 能否给出具体的代码？ 不想给你。但是有建议： 1、你得想办法取得网页的html代码，这个是单纯的C或其他语言很难办到的，你得考虑某一个体系，比如VC，然后通过类似IE内核什么的来完成（或者其他方法都可以）。这一步方法很多的，请仔细选择方案，如果非要让我建议的话，建议使用c++ builder，这个可是RAD，如果不知道什么是RAD，可以百度一下； 2、html代码有了，通过正则表达式就可以很轻松地实现，这一点应该可以找到现成的，最多稍微修改一下就行了。[/quote] 2的补充：写得有点匆忙，应该是从正则中提取邮箱地址有太多现成的方法（就是正则表达式了），随便搜索一下就一大堆

引用 3 楼 1东风1 的回复:能否给出具体的代码？ 请看4楼。如果看了还有问题的话，建议放弃这个目标吧

引用 3 楼 1东风1 的回复:能否给出具体的代码？ 不想给你。但是有建议： 1、你得想办法取得网页的html代码，这个是单纯的C或其他语言很难办到的，你得考虑某一个体系，比如VC，然后通过类似IE内核什么的来完成（或者其他方法都可以）。这一步方法很多的，请仔细选择方案，如果非要让我建议的话，建议使用c++ builder，这个可是RAD，如果不知道什么是RAD，可以百度一下； 2、html代码有了，通过正则表达式就可以很轻松地实现，这一点应该可以找到现成的，最多稍微修改一下就行了。

能否给出具体的代码？

引用 1 楼 proorck2019 的回复:好像、似乎、貌似，需要正则表达式。 这是王道

好像、似乎、貌似，需要正则表达式。


Question: 麻烦各位大神帮小白一个忙，万分感谢

引用 5 楼 與蘤舊縐 的回复:[quote=引用 3 楼 轻箬笠 的回复:] max=a[0],min=a[0]这段没意义。a[10]没初始化。 一般就最大值和最小值，max=min=0就可以了。  max=min=0你确定  [/quote] int max, min; max = min = 0; 有正负数的时候就是这么干的

#include <stdio.h>  //void main() int main() {     //int a[10], i,max=a[0],min=a[0],sum=0,m;      int a[10], m, max, min, sum;     int i;      for(i=0;i<10;i++)         scanf("%d",&a[i]);     max = min = a[0];     sum = 0;     for(i=0;i<10;i++)     {         if(max<a[i])             max=a[i];         if(min>a[i])             min=a[i];         sum+=a[i];     }     m = (sum-max-min)/8;      printf("%d",m); } 供参考～ 楼主把max, min赋值太早了，因为此时a[0]还是随机数，而不是你输入的第一个元素值。

int a[10],i,max=a[0],min=a[0],sum=0,m;   a[0]都没有初始化，你怎么给min和max赋值，后面给a键入，不代表min和max 的值也会变啊，最好是在给a键入值之后在将a[0]赋值给min和max

麻烦了，感谢各位了

引用 3 楼 轻箬笠 的回复:max=a[0],min=a[0]这段没意义。a[10]没初始化。 一般就最大值和最小值，max=min=0就可以了。  max=min=0你确定

#include <stdio.h> #include <limits.h> int main(void) { 	int a[10], i, max, min, sum, m; 	for (i = 0; i < 10; i++) { 		scanf_s("%d", &a[i]); 	} 	max = INT_MIN; 	min = INT_MAX; 	sum = 0; 	for (i = 0; i < 10; i++) { 		if (max < a[i]) { 			max = a[i]; 		} 		if (min > a[i]) { 			min = a[i]; 		} 		sum += a[i]; 	} 	m = (sum - max - min) / 8; 	printf("%d\n", m); 	return 0; } /* 1 2 3 4 5 6 7 8 9 0 4 请按任意键继续. . . */

思考一下min和max的初始值是什么

首先不要用void main 其次max=a[0],min=a[0]之前数组没有初始化 最后你可以直接排序，然后取中间8个，省事


Question: C语言新手求以下这道题目的程序，请大家帮帮忙，不胜感激

#include <stdio.h> void main() { printf("请输入首字母:\n"); char x; while ((x = getchar()) != 'y') { switch (x) { case 'S': { printf("请输入次位字母:"); getchar(); if ((x = getchar()) == 'a') { printf("星期六!\n"); } else if (x == 'u') { printf("星期日!\n"); } else { printf("输入错误\n"); } break; } case 'M': printf("星期一!\n"); break; case 'T': { printf("请输入次位字母:"); getchar(); if ((x = getchar()) == 'h') { printf("星期四!\n"); } else if (x == 'u') { printf("星期二!\n"); } break; } case 'F': printf("星期五!\n"); break; case 'W': printf("星期三!\n"); break; } } }

写了就把你代码贴出来再问。 每次都别人替你写，真的进步不了。。 代码必须要自己动手。

引用 1 楼 user-2的回复:先把之前的帖结了。。话说你每次直接求代码，都不自己写一下，调一调。能有啥进步。。 还是要自己动手的。 我一直有在写哦，大家写给我的代码我都有在好好研究，自己标注释，结贴是因为我在手机app上找不到结贴的地方，我中午回去用电脑结哈


Question: 哥哥们，我没法传送我定义的两个分函数。请求指教。谢谢了呀。

#include "stdio.h"  //int fun(int b[50],int r) int fun(char b[50],int r) {     //    {     for(r=1;b[r]!='\0';r++)         ;     //   }      printf("  %d ",r);     return r; }  //int app(int a[50],int o) int app(char a[50],int o) {     for(o=1; a[o]!='\0'; o++)         ;     printf("  %d  ",o);     return o; }    //void main() int main() {     int o,n=0,t=0,r;     char a[50],b[50];      printf("     请输入字符串a\n");     scanf("%s",a);     printf("    请输入字符串b\n");     scanf("%s",b);      int fun(char b[50],int r);     int app(char a[50],int o);   //statement      //fun( b[50],r);     //app(  a[50],o);     r = fun(b, r);     o = app(a, o);      for(;t<r;t++)         a[o++]=b[t];     a[o] =  0;     printf("%s",a);   } 供参考～  注意函数声明和函数调用的区别。 函数传参注意参数的类型要匹配

你的老师是让你手动实现一个strcat

int fun(char b[50]){ 	int r; 	for (r = 0; b[r] != '\0'; r++); 	return r; }  #include <stdio.h> void main() { 	int o, n = 0, t = 0; 	char a[50], b[50]; 	printf("请输入字符串a:\n"); 	scanf("%s", a); 	printf("请输入字符串b:\n"); 	scanf("%s", b); 	int x = fun(a); 	int y = fun(b); 	for (int i = 0;i < y; i++) 		a[i + x - 1] = b[i]; 	a[x + y - 1] = NULL; 	printf("%s", a); }

引用 7 楼 user-4的回复:你这个代码一般人看不懂。CSDN论坛新手指南 同学写的，用我的号问

你这个代码一般人看不懂。CSDN论坛新手指南

引用 5 楼 qq_45798109的回复:你写的这个，错误太多了，你说一下你这个程序想干嘛吧 编写程序，将两个字符串连接起来，不要用strcat函数

你写的这个，错误太多了，你说一下你这个程序想干嘛吧

把int改成char

引用 1 楼 qq_45798109的回复:你scanf 后的 fun(b[50],int r);  app(a[50],int o); 是想干嘛。。。 对了。刚刚错吧分函数首部括号内的int全删了。主要问题是没法传过去。请您看看了呀。

引用分函数啊。分函数是计算输入的两个字符串长度的。我们老师说不能用计算长度的那个strlen，所以我才这样写。


Question: C语言新手求帮忙

希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

引用 3 楼 proorck2019 的回复：[quote=引用 1 楼 weixin_42593366的回复:]因为你定义的预处理里面就少了个) 回答正确[/quote]我也刚学几天

//使用720的费用 #define qfei2 (qfei+qfei1+f3*(qw3-qw2)) 少个右括号～

建议有括号时先把左右括号写上，再在括号里写你的代码，这样不容易漏括号。

引用 1 楼 weixin_42593366的回复:因为你定义的预处理里面就少了个) #define qfei2 那行少一个括号

引用 1 楼 weixin_42593366的回复:因为你定义的预处理里面就少了个) 回答正确

因为你定义的预处理里面就少了个)


Question: 有没有大佬帮忙看看

不要直接用int类型算，要保持精确性必须让10*根号算完再舍去小数（强转整型就行）


Question: 为什么总显示掉了分号？

引用 5 楼 qq_45814010 的回复:#include<stdio.h>  int main() {     int i=2;     while(i<=1000)     {         int j=1,sum=0;         while(j<=i/2)         {             if(i%j==0)             {                 sum+=j;                 j++;             }         }         if(sum==i)          printf("%d",i);            i++;     }     return 0; } 就是这个运行没有结果。。。  你考虑一下 在 j = 2 , i = 5的情况下，你内部的while会是一个什么情况？           while(j<=i/2)         {             if(i%j==0)             {                 sum+=j;                 j++;             }         }   因为这里无法执行if里面的语句，所以程序里的i和j（主要是j）不能++，所以程序就一直死在这里了。

嗯嗯呢，谢谢谢。我说怎么不能显示结果

我求的是2-1000的完美数，为什么运行后没有结果

是的。其实还有个问题if中有的多个语句我没有加花括号。（不过这个是题目你们不知道的原因）

写成While,还以为是函数名呢，函数调用后边应该有分号。

第九行，应该是小写的while。


Question: 二叉树的创建

知道完全二叉树不，你就按照完全二叉树输入，没有的节点使用#号这种替代，从上往下，从左往右输入，你就知道这个树是什么样的了，例如你这个就是ABCDE#F##G#这种


Question: 5！=1*2*3*4*5。引入一种新的阶乘概念，由原来的每个数相乘变为将不大于n的所有偶数相乘，例如：4!!=2*4。求出1!!+2!!......+n!!的值

5!!=2×4=1×2 × 2×2=2!×2^2 6!!=2×4×6=1×2 × 2×2 × 3×2=1×2×3 × 2^3=3! × 2^3

引用 6 楼 qq_45815575 的回复:[quote=引用 4 楼 早打大打打核战争的回复:]这个没有什么新意，n!!=2^(n/2) * (n/2)! 实际上就是(n/2)! 左移n/2位 题目的意思是4！！=2*4   5！！=2*4  6！！=2*4*6[/quote]  有什么问题呢？5!!=2^(5/2) * (5/2)!=4*2!=8

引用 4 楼 早打大打打核战争的回复:这个没有什么新意，n!!=2^(n/2) * (n/2)! 实际上就是(n/2)! 左移n/2位 题目的意思是4！！=2*4   5！！=2*4  6！！=2*4*6

引用 4 楼 早打大打打核战争的回复:这个没有什么新意，n!!=2^(n/2) * (n/2)! 实际上就是(n/2)! 左移n/2位 什么意思？？？？？？？？

引用 1 楼 user-5的回复:从2开始，不需要while  #include<stdio.h> int main(void) { 	int i, a, n, j, m, d, sum; 	scanf("%d", &a); 	while (a--) 	{ 		scanf("%d", &n); 		d = 0; 		for (i = 2; i <= n; i++) 		{ 			sum = 1; 			for (j = 1; j <= i; j++) 			{ 				if(j % 2 == 0) 					sum *= j; 			} 			d = d + sum; 		} 		printf("%d\n", d); 	} 	return 0; }  为什么我运行不出来啊

for(j = 2;j <= i;j+=2) 为什么非要全遍历然后筛出一半？


Question: 求大佬帮助这个题怎么写

希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

定义一个函数，生成随机数，分成六个等区间部分，若随机数在某一区间，则确定点数，再将点数返回 下面的题太水了，排序最好写的就冒泡，就这样


Question: 求救QAQ

把源代码贴出来，看看。

15:==> 1111(二进制） 128:==>1000000-->3bit==>10000即  1111 & 10000 == 0吧


Question: 软件工程1903柳茂

引用 4 楼 weixin_45812340的回复:[quote=引用 2 楼 不闻窗外事的回复:]这么好的笔记不用来烧水可惜了 你给我看你的瞅瞅，行吗[/quote] 哥，我错了  我下次一定改正，再也不乱发了

引用 2 楼 不闻窗外事的回复:这么好的笔记不用来烧水可惜了 你给我看你的瞅瞅，行吗

引用 1 楼 proorck2019的回复:记得结贴给分数啊，，， 哥，我们学长让发的啊  5555

这么好的笔记不用来烧水可惜了

记得结贴给分数啊，，，


Question: C语言fopen函数

D，建议查一下fopen原型；FILE *fopen(const char *path, const char *mode);

应该用双引号。

d，r是单引号，不对


Question: 请教线索二叉树的问题


Question: 一道c语言题（帮帮菜鸟吧救救孩子）

#include<stdio.h> int main(void) { int type[] = {20, 10, 5, 1},num=4; int x,i; printf("please enter a dollar amount:"); scanf("%d",&x);  for (i = 0; i < num; ++i){ 	 printf ("美元%d bills:%d\n", type[i], x/type[i]);         x %= type[i];  } 	return 0; }

引用 14 楼 qq_45836904 的回复:[quote=引用 12 楼 lin5161678的回复:][quote=引用 10 楼 liups 的回复:] [quote=引用 9 楼 ggglivw 的回复:] 做功能你不考虑扩展性吗？来来来，我给你改下需求，+100种面额. 1、多余的功能也有成本的； 2、性能也是要考虑的，举一个极端的例子：有人的单片机程序取消了循环，而是把同样的指令重复了若干次[/quote]考虑扩展性和多余功能没什么关系  扩展性只是方面扩展功能 不等于现在就有没用上的功能  回到这里  #2 的代码略有瑕疵 num不应该硬编码 应该是计算数组大小 #2的代码 如果想加 100 50 只需要数组里面加2个元素 就修改好了 不需要100 50 就删掉  没有你所说的多余的功能  只是 添加删除很方便而已 [/quote] 问下那该怎么改num变nu吗！[/quote]int num = sizeof type / sizeof *type;这样数组大小变化的时候 num同步变化 不需要另外做修改 比如 多加一个元素  int type[] = {50, 20, 10, 5, 1}; int num = sizeof type/sizeof *type; num的值是 5  不需要手动做修改;

引用 12 楼 lin5161678的回复:[quote=引用 10 楼 liups 的回复:] [quote=引用 9 楼 ggglivw 的回复:] 做功能你不考虑扩展性吗？来来来，我给你改下需求，+100种面额. 1、多余的功能也有成本的； 2、性能也是要考虑的，举一个极端的例子：有人的单片机程序取消了循环，而是把同样的指令重复了若干次[/quote]考虑扩展性和多余功能没什么关系  扩展性只是方面扩展功能 不等于现在就有没用上的功能  回到这里  #2 的代码略有瑕疵 num不应该硬编码 应该是计算数组大小 #2的代码 如果想加 100 50 只需要数组里面加2个元素 就修改好了 不需要100 50 就删掉  没有你所说的多余的功能  只是 添加删除很方便而已 [/quote] 问下那该怎么改num变nu吗！

问下那应该怎么改num变nu吗？

引用 10 楼 liups 的回复:[quote=引用 9 楼 ggglivw 的回复:] 做功能你不考虑扩展性吗？来来来，我给你改下需求，+100种面额. 1、多余的功能也有成本的； 2、性能也是要考虑的，举一个极端的例子：有人的单片机程序取消了循环，而是把同样的指令重复了若干次[/quote]考虑扩展性和多余功能没什么关系  扩展性只是方面扩展功能 不等于现在就有没用上的功能  回到这里  #2 的代码略有瑕疵 num不应该硬编码 应该是计算数组大小 #2的代码 如果想加 100 50 只需要数组里面加2个元素 就修改好了 不需要100 50 就删掉  没有你所说的多余的功能  只是 添加删除很方便而已

你的例子都不恰当，我认为for循环比硬编码的好，兼顾了效率和扩展性. 你第二个例子根本就没有举对，直接拷贝代码这个行为会挨打的

引用 9 楼 ggglivw 的回复:做功能你不考虑扩展性吗？来来来，我给你改下需求，+100种面额. 1、多余的功能也有成本的； 2、性能也是要考虑的，举一个极端的例子：有人的单片机程序取消了循环，而是把同样的指令重复了若干次

做功能你不考虑扩展性吗？来来来，我给你改下需求，+100种面额.

引用 7 楼 liups 的回复:引用 5 楼 ggglivw 的回复:1楼的没扩展性  [quote=引用 4 楼 liups 的回复:] 还是1楼的好点，没有必要使用数组和循环 美元面值要什么扩展性？[/quote]加个美分 加个50 100

引用 5 楼 ggglivw 的回复:1楼的没扩展性  引用 4 楼 liups 的回复:还是1楼的好点，没有必要使用数组和循环 美元面值要什么扩展性？

刚刚玩CSDN，刚刚学c语言 #include<stdio.h> #include<math.h> main() { 	int a,b=20,c=1,d,e=1,i; 	scanf("%d",&i); 	for(b=20;b>=5;b=b/2) 	{ 		a=i/b; 		i=i-a*b; 		printf("%d ",a);				 	} 	i=i-a*b; 	d=i/e; 	printf("%d",d); } 多指教

还是1楼的好点，没有必要使用数组和循环

利用除法和取余运算即可

93/20=4 93-20*4=13 13/10=1 13-10*1=3 3/5=0 3-5*0=3 3/1=3 end


Question: malloc空间后free出错（char*类型）

引用 5 楼 proorck2019的回复:结贴给分数，哈哈哈。 给啦给啦！太谢谢了，我头疼了一下午

结贴给分数，哈哈哈。

引用 3 楼 proorck2019 的回复:malloc(...+1) ！！！可以了，谢谢

引用 1 楼 proorck2019 的回复:字符串结尾还有一个0， malloc strlen(...)+1 加了那个+1之后，还是有断点

字符串结尾还有一个0， malloc strlen(...)+1


Question: 用c语言写学生选课系统，怎样将老师和学生的登录名和密码分开

希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

引用 1 楼 user-2的回复:checkPerson_Msg函数第二个参数不就是用来区分的吗 学生的话，你传入1，老师传入2 您能帮我写一下吗？我有点蒙了😂


Question: 有没有大佬指点一下哪里错了

明白了，谢谢，问题已经解决了

引用 3 楼 wfdhua 的回复:[quote=引用 2 楼 datoulaile123的回复:]在第一层循环里第一句加上b=1；不然b会保留上一次的值 为什么会保留啊，不应该是连乘吗[/quote] 你看看你的a，和你的b比较下区别，你的a保留再*两个x，实现指数性功能，你的b保留就没意思了，毕竟你每次都是从1开始来计算阶乘

引用 2 楼 datoulaile123的回复:在第一层循环里第一句加上b=1；不然b会保留上一次的值 为什么会保留啊，不应该是连乘吗

在第一层循环里第一句加上b=1；不然b会保留上一次的值

b乘太多了，要么每次计算之前b赋值1，要么改一下j那个循环


Question: 求大佬帮看代码错误

#include<stdio.h> #include<string.h>  int main() {     int x[5]={4,8,9,1,2}, tmp;     char name[5][80]={"zhang","hei","haha","asas","qwe"};     char copy[80];     int i, j, max_idx;      for(i = 0; i < 5; i++){         printf("input the name:");         scanf("%s", name[i]);         printf("input the score:");         scanf("%d", &x[i]);     }      i = 0;     while(i<5){         max_idx = i;         for(j = i; j < 5; j++)             if (x[max_idx] < x[j])                 max_idx = j;         if (max_idx != i) {             tmp = x[i];             x[i] = x[max_idx];             x[max_idx] = tmp;             strcpy(copy, name[max_idx]);             strcpy(name[max_idx], name[i]);             strcpy(name[i], copy);         }          i++;     }     for(i = 0; i < 5; i++){         printf("%s %d\n",name[i], x[i]);     }     return 0; } 供参考～

#include<stdio.h> #include<string.h>  int main() {     int x[5]={4,8,9,1,2};     char name[5][80]={"zhang","hei","haha","asas","qwe"};     char copy[80];     int i=0;     int n, tmp;     int max;     /*for(i=0;i<5;i++){       printf("input the name:");       scanf("%s",&name[i]);       printf("input the score:");       scanf("%d",&x[i]);       }*/     while(i<5){         max=i;         for(n=i;n<5;n++){             if(x[max] < x[n]){                 max = n;                 /*                    if(x[max]>x[n]){                 //max=max;                 }else{                 max=n;                 }                 */             }             //printf("%d",max);             //             if (max != i) {                 tmp = x[i];                 x[i] = x[max];                 x[max] = tmp;                 strcpy(copy,name[max]);                 strcpy(name[max],name[i]);                 strcpy(name[i],copy);             }         }         i++;     }     for(n=0;n<5;n++){         printf("%s %d\n",name[n],x[n]);     }     return 0; } 供参考～ 楼主的排序有问题～

引用 8 楼 qq_45798109的回复:[quote=引用 7 楼 qq_45850659 的回复:] [quote=引用 6 楼 qq_45798109的回复:][quote=引用 5 楼 qq_45850659的回复:][quote=引用 2 楼 qq_45798109的回复:]抱歉，我看错了，你循环之后，把i重新归为零 好的，谢谢。 请问那应该怎样输入汉字的名字呢[/quote] 中文的话，一个字占两个字符的[/quote] 我不知道应该怎么输入，char类型不是每一个就只有一个字符吗[/quote] 直接输入就好了，我这边运行的出来的[/quote] 谢谢，我也运行出来了。我以前输入的时候它会跳步骤。可能是以前没用#include<string>这个吧

引用 7 楼 qq_45850659 的回复:[quote=引用 6 楼 qq_45798109的回复:][quote=引用 5 楼 qq_45850659的回复:][quote=引用 2 楼 qq_45798109的回复:]抱歉，我看错了，你循环之后，把i重新归为零 好的，谢谢。 请问那应该怎样输入汉字的名字呢[/quote] 中文的话，一个字占两个字符的[/quote] 我不知道应该怎么输入，char类型不是每一个就只有一个字符吗[/quote] 直接输入就好了，我这边运行的出来的

引用 6 楼 qq_45798109的回复:[quote=引用 5 楼 qq_45850659的回复:][quote=引用 2 楼 qq_45798109的回复:]抱歉，我看错了，你循环之后，把i重新归为零 好的，谢谢。 请问那应该怎样输入汉字的名字呢[/quote] 中文的话，一个字占两个字符的[/quote] 我不知道应该怎么输入，char类型不是每一个就只有一个字符吗

引用 5 楼 qq_45850659的回复:[quote=引用 2 楼 qq_45798109的回复:]抱歉，我看错了，你循环之后，把i重新归为零 好的，谢谢。 请问那应该怎样输入汉字的名字呢[/quote] 中文的话，一个字占两个字符的

引用 2 楼 qq_45798109的回复:抱歉，我看错了，你循环之后，把i重新归为零 好的，谢谢。 请问那应该怎样输入汉字的名字呢

name[5][80] name[80][5] 究竟是谁？

for(i=0;i<5;i++){     printf("input the name:");     scanf("%s",&name[i]);     printf("input the score:");     scanf("%d",&x[i]); } 这里i已经是5了，所以下面的循环进不去，重新置为0即可 增加  i = 0;     while(i<5){ ...

抱歉，我看错了，你循环之后，把i重新归为零


Question: Visual studio2019编译c

单文件调试不了，需要添加项目，在项目中添加.c文件才能编译

新建一个项目就可以了

你新建的是.c文件吧，貌似要建项目才能调试。


Question: C语言入门

记得结贴给分数啊，，，

笔记很漂亮，手动点个赞 请跟你们漂亮的老师反映一下，这种东西以后还是发博吧，如果有什么问题的话再发论坛


Question: 笔记


Question: PTA中有关黑洞数的一个问题

引用 19 楼 早打大打打核战争的回复:这题可以简单实现：  #include <stdio.h>  int main() {   for (int a, b, c, n = 1, x = 0, y = scanf("%d", &x); ; x -= y)   {     a = x / 100, b = x % 100 / 10, c = x % 10;     if (a > b) b += a -= b, a = b - a;     if (b > c) c += b -= c, b = c - b;     if (a > b) b += a -= b, a = b - a;     x = c * 100 + b * 10 + a, y = a * 100 + b * 10 + c;     printf("%d: %d - %d = %d\n", n++, x, y, x - y);     if (x - y == 495 || !(x - y)) break;   }    return 0; }  我的天啊，大佬你太有才了，为啥我就想不通呢

引用 17 楼 自信男孩的回复:#include <stdio.h> #include <stdlib.h>  satic int key_list[] = {495, 6174}; void bubble_asc_sort(int *arr, int size); int get_each_bit(int num, int *arr, int size);  int main() {     int num, max, min, key;     int arr[10], len;     int i, cnt = 0;      scanf("%d", &num);      while (1) {         len = get_each_bit(num, arr, 10);         if (len <= 2 || len > 4) {             printf("No kaprekar!\n");             break;         }         bubble_asc_sort(arr, len);          min = 0;         i = 0;         while (i < len) {             min = min * 10 + arr[i];             i++;         }          max = 0;         i = len-1;         while (i >= 0) {             max = max * 10 + arr[i];             i--;         }          if (max == min) {             printf("No kaprekar!\n");             break;         }         num = max - min;          key = key_list[len - 3];         printf("%d: %d - %d = %d\n", ++cnt, max, min, num);         if (num == key)             break;     }       return 0; }  int get_each_bit(int num, int *arr, int size) {     int i = 0;      while (num && i < size) {         arr[i++] = num % 10;         num /= 10;     }      return i; }  void bubble_asc_sort(int *arr, int len) {     int i, j;     int tmp;      for (i = 0; i < len; i++)         for (j = 0; j < len - i -1; j++)             if (arr[j] > arr[j+1]) {                 tmp = arr[j];                 arr[j] = arr[j+1];                 arr[j+1] = tmp;             } } 一起探讨，学习，供参考～ 谢谢大佬，我会再花一个小时来研究的！哎呀，好开心啊

引用 15 楼 wowpH的回复:你之前的帖子都没结，，，你说这话的勇气在哪儿。  CSDN论坛新手指南 大佬啊我今晚上完晚自习回宿舍马上去登录电脑版结贴，我是个有诚信的人，你等着啊

你之前的帖子都没结，，，你说这话的勇气在哪儿。  CSDN论坛新手指南

引用 11 楼 自信男孩的回复:求出每位数字，然后排序，把升序的组成的数减去降序组成的数  #include <stdio.h> #include <stdlib.h>  void bubble_asc_sort(int *arr, int size); int get_each_bit(int num, int *arr, int size); int main() {     int num, max, min;     int arr[10], len;     int i, cnt = 0;      scanf("%d", &num);      while (1) {         len = get_each_bit(num, arr, 10);         bubble_asc_sort(arr, len);          min = 0;         i = 0;         while (i < len) {             min = min * 10 + arr[i];             i++;         }          max = 0;         i = len-1;         while (i >= 0) {             max = max * 10 + arr[i];             i--;         }         num = max - min;         printf("%d: %d - %d = %d\n", ++cnt, max, min, num);         if (num == 495)             break;     }   #if 0     int n,max,min,i,j,k,temp;     int a[3];     scanf("%d",&n);      if(n==495) //强烈注意！一定不能忘记一开始输入495这个情况！不然没法得满分！没错，笔者就是栽在了这里T_T     {         printf("1: 954 - 459 = 495");         return 0;     }      for(i=1;n!=495;i++)     {         a[0]=n/100;         a[1]=n/10%10;         a[2]=n%10;          if(a[0]==a[1]&&a[1]==a[2])         {             printf("%d: %d - %d = 0",i,n,n);             return 0;         }          for(j=0;j<2;j++)         {             for(k=j+1;k<3;k++)             {                 if(a[j]<a[k])//用了一个数组来表示。                 {                     temp=a[j];                     a[j]=a[k];                     a[k]=temp;                 }             }         }          max=a[0]*100+a[1]*10+a[2];         min=a[2]*100+a[1]*10+a[0];         n=max-min;         printf("%d: %d - %d = %d\n",i,max,min,n);     } #endif     return 0; }  int get_each_bit(int num, int *arr, int size) {     int i = 0;      while (num && i < size) {         arr[i++] = num % 10;         num /= 10;     }      return i; }  void bubble_asc_sort(int *arr, int len) {     int i, j;     int tmp;      for (i = 0; i < len; i++)         for (j = 0; j < len - i -1; j++)             if (arr[j] > arr[j+1]) {                 tmp = arr[j];                 arr[j] = arr[j+1];                 arr[j+1] = tmp;             } }  供参考～ 大佬又是你啊，你真是个好人，我会花一个小时把它看完，今晚给你结贴，哈哈哈嗝

大佬又是你啊，你真是个好人，我会花一个小时把它看完，今晚给你结贴，哈哈哈嗝

引用 10 楼 wowpH的回复:[quote=引用 9 楼 乔碧萝大魔王 的回复:] [quote=引用 8 楼 wowpH的回复:]就是个排序。  有点奇怪的排序，既不是选择也不是（典型的）冒泡。 那只能说那位大神的想法有点清奇哈哈哈嗝[/quote]想法清奇有什么用，效率还不如冒泡。。。。[/quote] 哦，说的也是，但是他自己想的我就觉得好厉害哦🙄

引用 9 楼 乔碧萝大魔王 的回复:[quote=引用 8 楼 wowpH的回复:]就是个排序。  有点奇怪的排序，既不是选择也不是（典型的）冒泡。 那只能说那位大神的想法有点清奇哈哈哈嗝[/quote]想法清奇有什么用，效率还不如冒泡。。。。

引用 8 楼 wowpH的回复:就是个排序。  有点奇怪的排序，既不是选择也不是（典型的）冒泡。 那只能说那位大神的想法有点清奇哈哈哈嗝

就是个排序。  有点奇怪的排序，既不是选择也不是（典型的）冒泡。

引用 5 楼 qq_45798109的回复:我觉得他这个排序有点复杂， 他的意思就是：假设i中存的i之后所有数中最大的数，如果不是就交换。 j指向i之后的数 比大小只要和他之后的数比就行，不需要和他自身比 哎呀大神写程序想法都太复杂了吧，瑟瑟发抖，谢谢大佬今晚给你结贴哈 ，我好久不结贴，准备被投诉了哈哈哈哈，其实我是小白

你可以去了解一下排序算法

引用 1 楼 qq_45798109的回复:比如你输入的123 第一个式子321-123是怎么来的？ 不就是把123三个数组从大到小，然后从小到大排序得来的吗 我也知道它是重组的意思，为啥k，比j多了一，我想知道那两个个for语言的处理步骤。


Question: c语言

希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

引用 5 楼 weixin_40290083的回复:int main() 	{ 		int num[20]; 		int numTemp; 		int i; 		printf("请输入一组数字（20个以内），以-1结束:"); 		scanf_s("%d", &numTemp); 		for (i = 0;i < 20 && numTemp != -1;i++) { 			num[i] = numTemp; 			scanf_s("%d", &numTemp); 		} 		if (i == 20) { 			num[19] = -1; 		} 		else { 			num[i] = -1; 		} 		printf("请输入要查找的数："); 		int findNum; 		scanf_s("%d", &findNum); 		bool findMark = 0; 		i = 0; 		while (i < 20 && num[i] != -1) { 			if (num[i] == findNum) { 				printf("%d", i); 				findMark = 1; 				break; 			} 			i++; 		} 		if (!findMark) { 			printf("not found"); 		} 		 	}  输入的数据没有查重，题目没有要求，你可以自己增加代码实现。 好的，回去电脑看看，谢谢！

引用 1 楼 qq_45798109的回复:建一个数组，然后输入，查找 可以打出来吗，我不会啊

引用 2 楼 weixin_40290083的回复:把输入的数据存放在数组中，当要查找输入的数据时，按题的要求对数组进行遍历对比。 可以打出来看看吗，我不会

把输入的数据存放在数组中，当要查找输入的数据时，按题的要求对数组进行遍历对比。

建一个数组，然后输入，查找


Question: C语言

引用 10 楼 qq_45718176 的回复:[quote=引用 9 楼 qq_45718176的回复:][quote=引用 8 楼 datoulaile123的回复:][quote=引用 7 楼 qq_45718176 的回复:] [quote=引用 5 楼 user-4的回复:]while括号中是一个bool类型参数，你如果给其他类型，会有一个隐式的类型转换，int转bool的规则是，非0为true，0为false 有点明白了，也就是当M减小到零的时候循环体就结束了是吗？[/quote] 你代码的逻辑上是这样的，到0就结束循环了，while(x)这个循环,如果是非0，则继续循环，0就跳出循环，[/quote] 这是c语言的什么逻辑吗？[/quote] 为什么M不会往小于零循环[/quote] 因为到0循环就结束了啊，既然是循环，总会有结束的条件吧（死循环什么的除外，死循环也是因为没有写结束的条件或者条件永远不会满足），既然已经满足了跳出循环的条件，那当然要跳出啊，程序是忠诚的，你让它这么做，他就会这么做！！

引用 9 楼 qq_45718176的回复:[quote=引用 8 楼 datoulaile123的回复:][quote=引用 7 楼 qq_45718176 的回复:] [quote=引用 5 楼 user-4的回复:]while括号中是一个bool类型参数，你如果给其他类型，会有一个隐式的类型转换，int转bool的规则是，非0为true，0为false 有点明白了，也就是当M减小到零的时候循环体就结束了是吗？[/quote] 你代码的逻辑上是这样的，到0就结束循环了，while(x)这个循环,如果是非0，则继续循环，0就跳出循环，[/quote] 这是c语言的什么逻辑吗？[/quote] 为什么M不会往小于零循环

引用 8 楼 datoulaile123的回复:[quote=引用 7 楼 qq_45718176 的回复:] [quote=引用 5 楼 user-4的回复:]while括号中是一个bool类型参数，你如果给其他类型，会有一个隐式的类型转换，int转bool的规则是，非0为true，0为false 有点明白了，也就是当M减小到零的时候循环体就结束了是吗？[/quote] 你代码的逻辑上是这样的，到0就结束循环了，while(x)这个循环,如果是非0，则继续循环，0就跳出循环，[/quote] 这是c语言的什么逻辑吗？

引用 7 楼 qq_45718176 的回复:[quote=引用 5 楼 user-4的回复:]while括号中是一个bool类型参数，你如果给其他类型，会有一个隐式的类型转换，int转bool的规则是，非0为true，0为false 有点明白了，也就是当M减小到零的时候循环体就结束了是吗？[/quote] 你代码的逻辑上是这样的，到0就结束循环了，while(x)这个循环,如果是非0，则继续循环，0就跳出循环，

引用 5 楼 user-4的回复:while括号中是一个bool类型参数，你如果给其他类型，会有一个隐式的类型转换，int转bool的规则是，非0为true，0为false 有点明白了，也就是当M减小到零的时候循环体就结束了是吗？

引用 5 楼 user-4 的回复:while括号中是一个bool类型参数，你如果给其他类型，会有一个隐式的类型转换，int转bool的规则是，非0为true，0为falseC 没有这样的规则

引用 3 楼 lin5161678的回复:while(检查这个表达式是不是 0) 是 0 退出循环 不是 0 继续循环 while检查这个条件是不是零？逻辑运算吗？

while(检查这个表达式是不是 0) 是 0 退出循环 不是 0 继续循环

引用 1 楼 user-4的回复:当M等于0时，转化为bool类型为false，此时结束循环 bool类型什么意思？

当M等于0时，转化为bool类型为false，此时结束循环


Question: C语法问题

引用 18 楼 lin5161678 的回复:[quote=引用 17 楼 ggglivw 的回复:] 不习惯这样的写法. 如果要返回数组，我一般用引用的方式，正常的返回值只返回这个函数调用的结果，成功或者那种失败结果返回数组这个想法本身就不切实际 不管是返回 数组指针 还是返回数组引用都一样不好 属于失败的接口设计[/quote] 是的，我是赞同函数传对象的指针过来，函数内部把数据放回调用者的对象里面的。但是BOSS也是搞技术的，BOSS要求必要传指针他用指针来访问需要的数据....... 不用跟BOSS讲道理，BOSS就是道理

引用 17 楼 ggglivw 的回复:不习惯这样的写法. 如果要返回数组，我一般用引用的方式，正常的返回值只返回这个函数调用的结果，成功或者那种失败结果返回数组这个想法本身就不切实际 不管是返回 数组指针 还是返回数组引用都一样不好 属于失败的接口设计

引用 15 楼 weixin_44346860 的回复:*号我感觉应该写在括号外面，就跟形参可以为数组形式一样，实际上传的还是数组首地址，这个[3]我也觉得应该写在前面你仔细的描绘了一个错误的函数头

引用 14 楼 lin5161678 的回复:[quote=引用 13 楼 weixin_44346860 的回复:] [quote=引用 12 楼 lin5161678 的回复:] 顺便鄙视一下 这种写法没什么价值 不会有人写一个这样的函数 但是我遇上了，我猜测返回值是一个数组地址的函数，但这样的话fun前面好像就没必要加个*号了吧?[/quote] 返回数组指针  不加*号是不行的 不存在返回数组这种操作  数组类型不允许作为函数返回值类型  [/quote] *号我感觉应该写在括号外面，就跟形参可以为数组形式一样，实际上传的还是数组首地址，这个[3]我也觉得应该写在前面

引用 13 楼 weixin_44346860 的回复:[quote=引用 12 楼 lin5161678 的回复:] 顺便鄙视一下 这种写法没什么价值 不会有人写一个这样的函数 但是我遇上了，我猜测返回值是一个数组地址的函数，但这样的话fun前面好像就没必要加个*号了吧?[/quote] 返回数组指针  不加*号是不行的 不存在返回数组这种操作  数组类型不允许作为函数返回值类型

引用 12 楼 lin5161678 的回复:顺便鄙视一下 这种写法没什么价值 不会有人写一个这样的函数 但是我遇上了，我猜测返回值是一个数组地址的函数，但这样的话fun前面好像就没必要加个*号了吧?

顺便鄙视一下 这种写法没什么价值 不会有人写一个这样的函数

返回值类型

返回值是数组指针的 函数

int  (*fun(int a,int b,void *p))[3] {   //见过这种函数的写法吗？  int x,y;  x=0;  y=0;  ...... }  能编译过的，

引用 7 楼 SuperDay 的回复:[quote=引用 6 楼 自信男孩的回复:]函数指针数组。指向的是三个参数，参数分别是int, int, void *类型的并且返回值是int 可是下面有花括号是几个意思呢？[/quote] 看来C语言还是很难的，花括号里面是写程序代码的，因为这是定义的一个函数，尽管看起来像是定义的一个数组

引用 6 楼 自信男孩的回复:函数指针数组。指向的是三个参数，参数分别是int, int, void *类型的并且返回值是int 可是下面有花括号是几个意思呢？

引用 4 楼 SuperDay 的回复:没见过，可以编译过去吗？ 当然是可以编译过去的

没见过，可以编译过去吗？

是什么意思?


Question: 这个程序怎么改啊……vc说5 6行有问题

C语言的变量声明必须放在首部，源自汇编语言，因为声明在数据段，后边的在代码段。 C++改进了，放在中间也行。

引用 2 楼 qq_45836904 的回复:[quote=引用 1 楼 user-2的回复:]printf("请输入首字母:\n"); char x; 这两行顺序交换一下 我下课回去看一下！！！改完就ok了吗？[/quote] 因为你这发在C语言区，C程序中必须改，C++中则不需要改。至于其他错误没有看，有没有你自己研究

引用 1 楼 user-2的回复:printf("请输入首字母:\n"); char x; 这两行顺序交换一下 我下课回去看一下！！！改完就ok了吗？

printf("请输入首字母:\n"); char x; 这两行顺序交换一下


Question: 二叉树问题（C/C++）

希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html


Question: 求助如何处理数据溢出信息

各种数值的最大最小值 https://en.cppreference.com/w/c/types/limits

如果直接用unsigned long来存n!的结果，可能不能很好的把控溢出，当然也是可以的，即最后一个n!得到值若是溢出了，可能比(n-1)!的小 为了保险，建议如果用unsigned long来判断是否溢出，可以考虑用unsigned long long存n!的值，然后在与unsigned long的最大值比较，如果比这个最大值大，说明是溢出了。  供参考～

unsigned long i；  i = 0 -1；   就是最大值


Question: “四核八线程”大致上是如何实现一核多线程的？

引用 5 楼 proorck2019 的回复:CPU里边有流水线，把一条指令拆分成多步，由多块电路完成。执行指令2的上半部分的同时，能执行指令1的下半部分，所以，一个核能有两个线程。 哇，厉害了，可这么算的话，岂不是普通核心也能实现双线程？

肯定会有影响的，在CPU级别上实现的线程效率要高一点，但是也是很有限的，双核四线程完全不能跟四核相提并论

引用 1 楼 不闻窗外事 的回复:一个核跑十个线程也没问题的，都是假的，操作系统使用分片实现的，效率肯定八核八线程要高一些，但是也与你写的程序有关，如果你的8个线程都需要加锁，或者进行大量的阻塞等待，可能也差不多 我看别人说使用了超线程技术，总不可能跟普通CPU完全一样吧？真的可以做到一核同时两线程吗？

搜索 CPU虚拟化


Question: c语言中char类型怎么会读入i的值？

因为a的ASCII 等于97 所以 ch1 和 i 在你这个程序里 储存的值都是97


Question: （C语言）猴子选大王

what is your question? 继续删，管理员。有本事就封。CSDN论坛新手指南


Question: 一个获取唯一流水号的函数. 对于一个自增的局部静态变量,多个线程访问这个函数需要加锁吗?

引用 6 楼 baidu_28726667 的回复:每一个线程进去的事情基本就是+1了,意思是这还有可能两个线程同时读取到同一个数值然后++ ？ ++ 至少要分成3个步骤 1. 内存数据 mov到寄存器 2. 寄存器数据 + 1 3. 寄存器数据 mov到内存  第三步完成之前 切换到另一个线程 读取到一样的内存数据 是完全正常的

引用 6 楼 baidu_28726667 的回复:每一个线程进去的事情基本就是+1了,意思是这还有可能两个线程同时读取到同一个数值然后++ ？ 为什么不可能

引用 5 楼 lin5161678 的回复:[quote=引用 3 楼 baidu_28726667 的回复:] [quote=引用 2 楼 自信男孩 的回复:] 需要加的，因为用的是静态变量，每个线程调用该函数，对静态变量操作（写）就会修改其值。如果另一个线程也在调用这个函数， 要读取该静态变量可能读到的值可能是另一个线程写之后的或者写之前的。  修改前和修改后我没所谓的,只要没有线程读出来是一样的就可以了[/quote]不加锁的话 不保证读出来不一样的 有可能得到相同id [/quote]  引用 5 楼 lin5161678 的回复:[quote=引用 3 楼 baidu_28726667 的回复:] [quote=引用 2 楼 自信男孩 的回复:] 需要加的，因为用的是静态变量，每个线程调用该函数，对静态变量操作（写）就会修改其值。如果另一个线程也在调用这个函数， 要读取该静态变量可能读到的值可能是另一个线程写之后的或者写之前的。  修改前和修改后我没所谓的,只要没有线程读出来是一样的就可以了[/quote]不加锁的话 不保证读出来不一样的 有可能得到相同id [/quote]  每一个线程进去的事情基本就是+1了,意思是这还有可能两个线程同时读取到同一个数值然后++ ？

引用 3 楼 baidu_28726667 的回复:[quote=引用 2 楼 自信男孩 的回复:] 需要加的，因为用的是静态变量，每个线程调用该函数，对静态变量操作（写）就会修改其值。如果另一个线程也在调用这个函数， 要读取该静态变量可能读到的值可能是另一个线程写之后的或者写之前的。  修改前和修改后我没所谓的,只要没有线程读出来是一样的就可以了[/quote]不加锁的话 不保证读出来不一样的 有可能得到相同id

可以加锁  但不建议  这种情况 显然 原子操作就足够了

引用 2 楼 自信男孩 的回复:需要加的，因为用的是静态变量，每个线程调用该函数，对静态变量操作（写）就会修改其值。如果另一个线程也在调用这个函数， 要读取该静态变量可能读到的值可能是另一个线程写之后的或者写之前的。  修改前和修改后我没所谓的,只要没有线程读出来是一样的就可以了

理论上是要加的


Question: 把字符串中所有的a变成b，然后输出。我可以正常输出，但是有乱码是为什么？

存储字符串的char需要分配空间，C语言字符串的结尾是\0

s[i]! ='\0'

引用 3 楼 Italink 的回复:char*是定义了一个制作，而不是字符串（数组），你需要定义空间大小，比如100，改为char s[1000]; char*是定义了一个指针，而不是字符串（数组），你需要定义空间大小，比如100，改为char s[1000];

引用 1 楼 ggglivw 的回复:你这样玩居然没崩溃。看看基础语法书再说吧. 请问我哪里有错误？

你这样玩居然没崩溃。看看基础语法书再说吧.

#include<stdio.h> #include<string.h>  int main() {     char s[128];     int i,len=0;     printf("输入：");     scanf("%s", s);      //len = strlen(s);     printf("输出：");     for(i=0;s[i]!='0';i++)     {         if(s[i]=='a')         {             s[i]='b';         }         printf("%c", s[i]);     }      return 0; } 供参考～


Question: C语言基础求助QWQ

希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

#include <stdio.h> void main() { 	int n, he = 0; 	for (n = 1; n <= 200; n++) 		if (n % 2 == 0 && n % 9 == 0) { 			he = he + n; 		} 	printf("%d\n", he); 	return; }

引用 1 楼 user-2的回复:scanf("&d%d", &a, &b); 改为 scanf("%d%d", &a, &b); #include <stdio.h> void main() { 	int n,he=0,i; 	for(n=1;n<=200;n++) 		if(n%2==0&&n%9==0); 		i=n;	 		he=he+i; 	printf("%d\n",he); } 大佬大佬这个呢qwq


Question: 这个free是哪里有问题吗？两天了，没搞懂

//使用动态内存分为三步 //1.定义时，将指针为定义NULL //2.释放内存时，把指针变量重新赋值或者NULL //3.释放内存后，把指针变量赋值为NULL int main02() {     int *p = NULL;     p = (int *)malloc(4);          //这才是正确的写法     if (p != NULL){         free(p);//释放P所指向的内存空间,但指针变量p仍然留在栈中,成为了野指针         p = NULL;//释放野指针     }      return 0; }

if (!(*rear)->data)  //这里应该是  if ((*rear)->data) 吧。你那么写是为空的时候进入条件里。再去free，肯定有问题吧 { free((*rear)); *rear = NULL; }

引用 3 楼 自信男孩 的回复:#include <stdio.h> #include <stdlib.h>  //#pragma once #define OK 1 #define ERROR 0 #define LEN sizeof(Qnode)  typedef struct QNode {     int data;     struct QNode *next; }Qnode, *QueuePtr;  typedef struct Queue {     Qnode *rear; }*LinkQueue;  //caculation.h: //#pragma once int InitQueue(LinkQueue *Q); QueuePtr CreateChain(LinkQueue Q,QueuePtr *rear,QueuePtr *tail); int InsertQueue(LinkQueue *Q); int DeleteElem(LinkQueue *Q); void Print(LinkQueue Q);  //main.c: //#include"stdio.h" //#include"typedef.h" //#include"caculation.h" //void main() int main() {     LinkQueue Q = NULL;     InitQueue(&Q);     printf("The Queue before operation:\n");     Print(Q);     InsertQueue(&Q);     printf("The Queue after Insert:\n");     Print(Q);     DeleteElem(&Q);     printf("The Queue after delete:\n");     Print(Q);     return 0; }  //caculation.c: //#include"stdio.h" //#include"stdlib.h" //#include"malloc.h" //#include"typedef.h" //#include"caculation.h" int InitQueue(LinkQueue *Q) {     QueuePtr tail = NULL;     *Q = (LinkQueue)malloc(sizeof(struct Queue));     CreateChain((*Q), &(*Q)->rear,&tail);     (*Q)->rear = tail;     return OK; } QueuePtr CreateChain(LinkQueue Q, QueuePtr *rear, QueuePtr *tail) {     *rear = (Qnode *)malloc(sizeof(LEN));     printf("Enter the data:");     scanf("%d", &(*rear)->data);     if (!(*rear)->data)     {         free((*rear));         *rear = NULL;     }     if (*rear)     {         if (!CreateChain(Q, &(*rear)->next, &(*tail)))         {             (*rear)->next = Q->rear;             (*tail) = (*rear);         }         return *tail;     }     else         return *rear; } int InsertQueue(LinkQueue *Q) {     int x = 0;     QueuePtr Position = NULL;     printf("Enter the data you wan insert the end:");     scanf("%d", &x);     Position = (Qnode *)malloc(sizeof(Qnode));     Position->data = x;     Position->next = (*Q)->rear->next;     (*Q)->rear->next = Position;     (*Q)->rear = Position;     return OK; } int DeleteElem(LinkQueue *Q) {     int data = 0;     QueuePtr pre = NULL, Position = NULL;     pre = (*Q)->rear;     Position = pre->next;     printf("Enter the elem you wan delete:");     scanf("%d", &data);      while (pre&&Position)     {         if (Position->data == data)         {             pre->next = Position->next;             if (Position == (*Q)->rear)                 (*Q)->rear = pre;             free(Position);             pre = Position = NULL;             continue;         }         Position = Position->next;         pre = pre->next;     }     return OK; } void Print(LinkQueue Q) {     QueuePtr Position = NULL;     Position = Q->rear->next;      while (1)     {         printf("%d\t", Position->data);         if (Position == Q->rear)             break;         Position = Position->next;     }     printf("\n");     return; } 亲测没发现问题～我用VC试了一下，发现删除的时候会报错，错误是DAMAGE:after normal block(#53)

你的可以删除结点吗？   引用 6 楼 自信男孩 的回复:[quote=引用 5 楼 自信男孩 的回复:] [quote=引用 4 楼 D___H 的回复:] 删除结点功能的函数不能free 为什么不能free？[/quote] 我这边测试好像没发现问题，对比一下我发的代码～[/quote]

引用 5 楼 自信男孩 的回复:[quote=引用 4 楼 D___H 的回复:] 删除结点功能的函数不能free 为什么不能free？[/quote] 我这边测试好像没发现问题，对比一下我发的代码～

引用 4 楼 D___H 的回复:删除结点功能的函数不能free 为什么不能free？

删除结点功能的函数不能free


Question: 从键盘输入一个字符，然后再从键盘输入一个字符串，查找该字符是否存在于字符串中。为啥我程序崩溃了？

应该是if (i == len-1)

if (i == len)  两个等号

引用 3 楼 不闻窗外事 的回复:char s1,*s2；改为 char s1, s2[100]; 可当我输入e skelsckde时，输出字符不存在，是不是我代码还有错误？

char s1,*s2；改为 char s1, s2[100];

引用 1 楼 不闻窗外事 的回复:因为你的s2没有申请空间，要么定义成数组，要么malloc 请问那怎么修改呢？

因为你的s2没有申请空间，要么定义成数组，要么malloc

#include<stdio.h> #include<string.h> int main() {     char s1, s2[128];     int i,len=0;     printf("输入字符和字符串：");     scanf("%c%s",&s1,s2);     len=strlen(s2);     for(i=0;i<len;i++)     {         if(s1==s2[i])         {             printf("字符存在\n");             break;         }     }     if(i==len)         printf("字符不存在\n");      return 0; } 供参考～


Question: 将第一个字符串的前5个字符与第二个字符串的前5个字符串的组成一个新的字符串，并输出这个字符串。为啥我程序崩溃了？

9楼高人！！ 楼主不应该在 指针和数组 间纠缠，大部分情况下，能数组不指针。这样，写的那个不乱，读的那个也不乱，项目后期做维护的兄弟也不会爆粗口

#include<stdio.h> #include<string.h>  #define MAX_ARR_SIZE    32 int main() {     //char *s1,*s2,s3;     char s1[MAX_ARR_SIZE], s2[MAX_ARR_SIZE], s3[MAX_ARR_SIZE];     int i, j;     printf("输入：");     scanf("%s%s", s1,s2);     printf("输出：");      for(i=0;i<5 && s1[i];i++)     {         //s3=s3+s1[i];         s3[i] = s1[i];     }     //for(i=0;i<5;i++)     for(j = 0; j < 5 && s2[j]; j++)     {         s3[i++] = s2[j];     }     s3[i] = 0;     //printf("输出：%c\n",s3);     printf("%s\n",s3);      return 0; } 供参考～

引用 3 楼 ljn20010724 的回复:[quote=引用 2 楼 fireyou的回复:]char *s1,*s2,s3; 要用指针，在使用之前需要先 malloc分配内存，使用完毕后用 free 释放内存 请问不用指针应该怎么改这段代码呢？[/quote] 不用指针就用字符数组～

参考楼上 引用 5 楼 ljn20010724 的回复:[quote=引用 4 楼 fireyou的回复:]1楼不是告诉你了吗，用数组啊  [quote=引用 3 楼 ljn20010724 的回复:] [quote=引用 2 楼 fireyou的回复:]char *s1,*s2,s3; 要用指针，在使用之前需要先 malloc分配内存，使用完毕后用 free 释放内存 请问不用指针应该怎么改这段代码呢？[/quote][/quote] 可是我输入进去还是错误的。。[/quote]

#include<string.h> #include<stdio.h> #define STR_LENGTH 20 int main() {     char s1[STR_LENGTH], s2[STR_LENGTH], s3[STR_LENGTH];      memset(s1, 0, sizeof(s1));     memset(s2, 0, sizeof(s2));     memset(s3, 0, sizeof(s3));     printf("输入：\n");     scanf("%s%s", s1, s2);     printf("输出：\n");     strncpy(s3, s1, 5);     strncat(s3, s2, 5);          printf("输出：%s\n", s3);      getchar();     getchar();     return 0; }

引用 4 楼 fireyou的回复:1楼不是告诉你了吗，用数组啊  [quote=引用 3 楼 ljn20010724 的回复:] [quote=引用 2 楼 fireyou的回复:]char *s1,*s2,s3; 要用指针，在使用之前需要先 malloc分配内存，使用完毕后用 free 释放内存 请问不用指针应该怎么改这段代码呢？[/quote][/quote] 可是我输入进去还是错误的。。

1楼不是告诉你了吗，用数组啊  引用 3 楼 ljn20010724 的回复:[quote=引用 2 楼 fireyou的回复:]char *s1,*s2,s3; 要用指针，在使用之前需要先 malloc分配内存，使用完毕后用 free 释放内存 请问不用指针应该怎么改这段代码呢？[/quote]

引用 2 楼 fireyou的回复:char *s1,*s2,s3; 要用指针，在使用之前需要先 malloc分配内存，使用完毕后用 free 释放内存 请问不用指针应该怎么改这段代码呢？

char *s1;这样不是定义字符串，是定义的了一个指针，字符串就是字符数组，需要定义空间大小 比如 #define MAX 1000 char s1[MAX];


Question: 从键盘输入一个字符串，然后将该字符串中每个字符反向输出。我为啥程序会崩溃？

供参考  #include <stdio.h> #include <stdlib.h> #define MAX_LENTH 128  void reverse(char* str) {     if (*str)     {         reverse(str + 1);         printf("%c", *str);     } }  int main(void) {     char *s1;     s1 = malloc(MAX_LENTH);     printf("输入长度在128个字符以内的字符串：\n");     scanf("%s", s1);     printf("逆序后字符串: \n");     reverse(s1);      return 0; }

1. 指针s1没有分配内存 s1 = malloc(size); 2.  for(i=len;i>0;i--) { printf("%s",s1[i]);	 }  数组下标从0开始，所以你这里 s1[i]越界了，崩溃正常 3. printf("%s",s1[i]);	   这里你想打印一个字符的话，请用  printf("%c",s1[i]);

for(i=len-1;i>=0;  ... 更好

s1[i]等于0，显示地址0上的字符串，就崩溃了。 %c也许可以。


Question: 指导一下

希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

作业？ 自己看书吧！

第一个空行填for循环体的第一句。 第二个空行天fahr++; 因为fahr需要自增了，根据for循环


Question: 请问大佬sin（x）-e^-5x=0用C语言怎样迭代求解？

试下牛顿切线法 这个是常用的求解方程的方法


Question: 求助，c语言 n个数，两两数相加 ，不重复，怎么实现？

引用 1 楼 user-4 的回复:换个角度，从总的来看，第一个数总共只加了一次，第二个数只加了两次...第n个数加了n次，已经很明显了吧 用循环计算一下就行 说得对！正如我最近在其他帖子吐槽的，有些小同志啊，学习C语言不能把数学、逻辑这些丢在一边，应该是先用数学等方法找出一个解题的方法来再编程实现，而不是一上来就去遍历、循环这些笨办法，系统资源不是这样糟践的

先自己动手写一下，然后不行再贴出你的代码来问。


Question: VS

重写吧，先理解清楚题意

引用 1 楼 user-3的回复:很明显，答案错误，输入输出不符 能不能仔细的说一下，我对VS不是很熟

很明显，答案错误，输入输出不符


Question: 数组排序

把第二层排序循环的语句改一下改成：  k = a[k] > a[j] ? j : k; 其他不变。  楼主这样直接对a[k]赋值会导致把a[k]之前的值给覆盖了，导致存在多个相同的值。

引用 1 楼 user-3的回复:把a[k] = (a[k]>a[j]) ? a[j] : a[k];改成 k = (a[k]>a[j]) ? j : k; 你的k一直没变过，永远不会走进k!=i，而且a[k] = (a[k]>a[j]) ? a[j] : a[k];还会改变a[i]的值（因为k=i） 知道了  对了  谢谢大佬


Question: C语言中关于实数计算误差的问题。

计算机都是二进制的，整数二进制了解吗？如果了解那么想想小数的二进制怎么回事？

刚学到需要用数学函数库的，第一个函数就是取绝对值大于某个数的，上面举的例子就是说实型有误差，只要差的绝对值小于10^6就可以看做等于，但不能直接==。+++输出的结果有误差（r=9，答案应该是254.34，但变成了254.340012；1017.36变成了1017.360034。）#include<stdio.h>int main(){float r,s,S;float a=3.14;printf("--%f--\n",a);                //【输出π的地方】printf("输入半径r；");scanf("%f",&r);s=arr;S=4ar*r;printf("如果是一个圆的话，面积为%f\n如果是一个球的话，面积则为%f\n\n",s,S);return 0;}不过我还发现3466.6，输出整数部分3467，这不是误差能解决的吧不知道你说的是不是这种


Question: C语言

引用 2 楼 qq_45798109的回复:还有你这个输出有换行的有不换行的，建议你改下 谢谢谢谢谢谢谢谢谢谢

楼主是如何区分奇偶的，看到楼主都是直接输出的。 另外，奇偶没必要用双层循环，单层循环即可。直接用m % 2判断即可。  另外，建议用数组存放奇偶数，最后分别输出。

还有你这个输出有换行的有不换行的，建议你改下

第八行m改成&m。。


Question: 求一个数是不是素数

去除重复计算哦

判断2 ~sqrt(n)之间的数，因为循环次数减少了，减少了时间复杂度。  你对比一下2~sqrt(n)之间的个数与2~n-1之间的个数。n越大，时间复杂度越低

若2都不能除尽，还要试4, 6, 8, …吗？ 若3都不能除尽，还要试9, 15, 21, …吗？等等。 一个数如果有因子的话，那么在它的平方根数以内就应该有，否则就没有因子。 所以必定有一个因子不大于n的平方根。 故判断n是否为素数，只要试除到n的平方根就可以了，不必一直到n-1。

10 1×10=10 2×5=10 3×3=9 5×2=10 10×1=10


Question: 求助一道C++ 的题，总是溢出

#include<stdio.h>  int main() {     int T, N;     int i, j;     unsigned long long mol, deno, new_deno;     double sum = 0;      scanf("%d", &T);      if (T > 2000)         return 0;     i = 0;     while (i < T) {         scanf("%d", &N);          if (N > 10000)             continue;         sum = 0;         mol = 2;         deno = 1;         j = 0;         while (j < N) {             sum += mol*1.0/deno;             if (j > 0)                 printf("+");             printf("%llu/%llu ", mol, deno);             new_deno = mol;             mol = mol + deno;             deno = new_deno;             j++;         }         printf(" = %.2lf\n", sum);         i++;     }      return 0;  } 考虑分子和分母有可能溢出，所以还可以考虑用double类型表示分子分母～或者long double

#include<stdio.h>  int main() {     int T, N;     int i, j;     int mol, deno, new_deno;     double sum = 0;      scanf("%d", &T);      i = 0;     while (i < T) {         scanf("%d", &N);          sum = 0;         mol = 2;         deno = 1;         j = 0;         while (j < N) {             sum += mol*1.0/deno;             if (j > 0)                 printf("+");             printf("%d/%d ", mol, deno);             new_deno = mol;             mol = mol + deno;             deno = new_deno;             j++;         }         printf(" = %.2lf\n", sum);         i++;     } #if 0     int a,b;      scanf("%d",&a);     for(b=1;b<=a;b++)     {         long double n=2,m=1,N,t,sum=0.00;         scanf("%llf",&N);          while(N)         {             sum=sum+n/m;             t=m;             m=n;             n=n+t;             N--;         }         printf("%.2llf\n",sum);     } #endif     return 0;  } 供参考～

scanf("%llf",&N); 改为  scanf("%lf",&N); l或者ll指定了scanf()函数参数N的大小，其中ll表示的是long long类型，而l表示的long类型，因为N的类型是long double，所以要用lf,而不是llf。 以下为VS2015调试结果

看下吧 #include "pch.h" #include "stdio.h" #include "stdlib.h" #include "math.h" #include "head.h" /*前沿技术-嵌入式 720363947 编程语言C / C++ 718801748 编程算法与数据结构群15035519 */ int main_suliesum(){ 	int T, temp; 	int fen_zi, fen_mu; 	double sum = 0.0; 	int *N = NULL; 	int i, j;  	scanf("%d", &T); 	if((T == 0) || (T > 2000)) { 		printf("input T is not right\n"); 		return -1; 	} 	N = (int*)malloc(T * sizeof(int)); 	if (N == NULL) { 		printf("malloc fail\n"); 		return -2; 	}  	for (i = 0; i < T; i++){ 			scanf("%d", &N[i]); 		if ((N[i] == 0) || (N[i] > 10000)) { 			printf("input N is not right\n"); 			goto EIXT_FUN; 		} 	}  	for (i = 0; i < T; i++){ 		fen_zi = 2; 		fen_mu = 1; 		sum = 0.0; 		for(j = 0; j < N[i]; j++){ 			sum = sum + ((double)fen_zi / (double)fen_mu); 			temp = fen_zi; 			fen_zi = temp+ fen_mu; 			fen_mu = temp; 		} 		printf("%.2llf\n", sum); 	} EIXT_FUN: 	if (N) { 		free(N); 		N = NULL; 	} 	return 0; }


Question: matlab

希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html


Question: OJ2910 提取数字(哪里有问题呀)

#include<stdio.h> #include<string.h>  int main() {     char a[128];     int x[128];     int len;     int i, t = 0;      gets(a);     len = strlen(a);      for (i = 0; i < len; i++)     {         if (a[i] >= '0' && a[i] <= '9') {             x[t++] = a[i] - '0';             continue;         }         printf("%c", a[i]);     }     putchar(10);     for (i = 0; i < t; i++)         printf("%d", x[i]);     putchar(10);      return 0; }  优化后，供参考～0也是数字范畴里的吧

#include<stdio.h> #include<string.h>  int main() {     char a[109];     int x[109];      gets(a);     int len = strlen(a);     int i, t = 0, j, k, y = 0;     for (i = 0; i < len; i++)     {         if (a[i] >= '1' && a[i] <= '9') {             x[t++] = a[i] - '0';             continue;         }         printf("%c ", a[i]);         /*         if (a[i] >= 49 && a[i] <= 57)         {             for (j = i; a[j] >= 48 && a[j] <= 57; j++)             {                 x[t] = a[j] - 48;                 t++;             }             //i = j;    //此处会改变外层循环             if (y > 0)             {                 for (k = y+1; k < t; k++)                 {                     printf("%d", x[k]);                     y = k;                 }             }             else if (y == 0)             {                 for (k = 0; k < t; k++)                 {                     printf("%d", x[k]);                     y = k;                 }             }             printf("\n");         }         else if (a[i] == 48 && (a[i + 1] > 57 || a[i + 1] < 48))         {             printf("%c\n", a[i]);         }         */     }     putchar(10);     for (i = 0; i < t; i++)         printf("%d ", x[i]);     putchar(10);      return 0; }  供参考～  提取出数字，不要考虑的太复杂了。

你这代码没啥问题，VS上可以运行，结果也没错。。。

我觉得你可以把题目贴出来，只有答案谁看得懂你想干嘛

在VJ上直接WA 改了很多次了

有什么问题吗？


Question: 博创作业


Question: c语言两个二维数组在调用函数的时候，形参和实参怎么写。

不能返回数组的，只能返回指针，楼主要好好学习一下，程序不能乱写

引用 10 楼 SuperDay 的回复:把前面的换成后面的就可以了，前面有分号，后面没分号，就这个差别懂了，那要怎么returen数组D，int E[5][3]=C(A,B); return D; 这两句错在哪

把前面的换成后面的就可以了，前面有分号，后面没分号，就这个差别

引用 7 楼 weixin_45794895 的回复:[quote=引用 3 楼 user-2 的回复:] int C(int A[],int B[]);// 这是声明 int C(int (*A)[5],int (*B)[5])// 这是定义 这两个不一样你看不出来吗？那怎么改[/quote]问问题能不能过过脑子。。。

引用 6 楼 user-2 的回复:[quote=引用 5 楼 SuperDay 的回复:] [quote=引用 4 楼 user-2的回复:]另外，把你以前的帖子结了。  CSDN论坛新手指南 必须给你点赞，每天都这么积极[/quote]顺带而已，1秒钟不到就搞定[/quote]复制粘贴

引用 3 楼 user-2 的回复:int C(int A[],int B[]);// 这是声明 int C(int (*A)[5],int (*B)[5])// 这是定义  这两个不一样你看不出来吗？那怎么改

引用 5 楼 SuperDay 的回复:[quote=引用 4 楼 user-2的回复:]另外，把你以前的帖子结了。  CSDN论坛新手指南 必须给你点赞，每天都这么积极[/quote]顺带而已，1秒钟不到就搞定

引用 4 楼 user-2的回复:另外，把你以前的帖子结了。  CSDN论坛新手指南 必须给你点赞，每天都这么积极

另外，把你以前的帖子结了。  CSDN论坛新手指南

引用 1 楼 SuperDay 的回复:你这个函数声明和定义不一致的写错了。。  引用 1 楼 SuperDay 的回复:你这个函数声明和定义不一致的我对函数的调用还不熟悉，哪里错了，改怎么改

你这个函数声明和定义不一致的


Question: 大佬们快来救救孩子吧


Question: favourite number


Question: c语言转义字符怎么识别

/*-  * Copyright (C), 1999-2019, mymtom.  *                     _  *  ____  _   _ ____ _| |_ ___  ____   * |    \| | | |    (_   _) _ \|    \  * | | | | |_| | | | || || |_| | | | |  * |_|_|_|\__  |_|_|_| \__)___/|_|_|_|  *       (____/   *  * vi:set ts=4 sw=4:  */  /**  * @file    LetterCount.c  * @brief     */  #include <stdio.h>  static int unescape(int ch) {     int ret = 0;     if ('a' == ch)         ret = '\a';     else if ('b' == ch)         ret = '\b';     else if ('f' == ch)         ret = '\f';     else if ('n' == ch)         ret = '\n';     else if ('r' == ch)         ret = '\r';     else if ('t' == ch)         ret = '\t';     else if ('v' == ch)         ret = '\v';     return ret; }  static char * escape(int ch, char *buf) {     int ret = 0;     if ('\a' == ch)         ret = 'a';     else if ('\b' == ch)         ret = 'b';     else if ('\f' == ch)         ret = 'f';     else if ('\n' == ch)         ret = 'n';     else if ('\r' == ch)         ret = 'r';     else if ('\t' == ch)         ret = 't';     else if ('\v' == ch)         ret = 'v';      if (0 == ret) {         buf[0] = ch;         buf[1] =0;     } else {         buf[0] = '\\';         buf[1] = ret;         buf[2] = 0;     }      return buf; }  int main(int argc, char *argv[]) {     int i;     int ch;     char buf[3];     int count[256] = {0};      while (EOF != (ch = fgetc(stdin))) {         if ('#' == ch)             break;         if ('\\' == ch) {             ch = fgetc(stdin);             if ('#' == ch)                 break;             ch = unescape(ch);         }         count[ch]++;     }      for (i = 0; i < 256; i++) {         if (count[i] > 0) {             printf("%2.2s: %4d\n", escape(i, buf), count[i]);         }     }      return 0; }

看不懂。。。什么怎么识别，一个个比较就行了吧。

引用 楼主 weixin_45846821的回复:输入字符串，计算其中转义字符/n，/a，/b，/t的个数如12d/nb#，输入#即停止打印。求大神解答 还有/反了，那个要怎么识别？

引用 1 楼 user-3的回复:那不就是统计/的个数？ 但是还要统计字母个数

那不就是统计/的个数？


Question: C语言数组问题

数组可以理解为相同类型元素的一个集合，这个集合有大有小，根据数组长度来定。数组在内存中是连续的。

单个变量和数组就是你要买一个阿尔卑斯糖和要买一串阿尔卑斯糖的区别


Question: 算法优化问题

懂了，写法是很棒。

引用 12 楼 user-1 的回复:那就不知道了，至少思路我认为没错。。。 他要求是拆除，但是思路确是保留

引用 12 楼 user-1 的回复:那就不知道了，至少思路我认为没错。。。 做出来了  #include<stdio.h> void search(char str[500][500],int i,int j,int *k) {     str[i][j] = '!';     *k=*k-1;     if (k != 0)     {         if (str[i][j - 1] == '.'&&*k!=0)search(str, i, j - 1, k);          if (str[i + 1][j] == '.' &&* k != 0)search(str, i + 1, j, k);         if (str[i][j + 1] == '.' &&* k != 0)search(str, i, j + 1, k);         if (str[i - 1][j] == '.' &&* k != 0)search(str, i - 1, j, k);     } } int main() {     //输入     int n, m, k;     scanf("%d %d %d", &n, &m, &k);     char a[500][500] = { '\0' };     getchar();     for (int i = 1; i <= n; i++)     {         for (int j = 1; j <= m; j++) scanf("%c", &a[i][j]);         getchar();     }     //计算要搜索的节点数     int cnt = 0;     for (int i = 1; i <= n; i++)         for (int j = 1; j <= m; j++)             if (a[i][j] == '.') cnt++;     k = cnt - k;     //将要搜索的节点数和根节点传进函数     int o = 1;     for (int i = 1; i <= n; i++)     {         for (int j = 1; j <= m; j++)             if (a[i][j] == '.')             {                 search(a, i, j, &k);                  o = 0;                 break;             }         if (o == 0) break;     }     //输出     for (int i = 1; i <= n; i++)     {         for (int j = 1; j <= m; j++)         {             if (a[i][j] == '!')printf(".");             if (a[i][j] == '.')printf("X");             if (a[i][j] == '#')printf("#");         }         printf("\n");     }     return 0; }

那就不知道了，至少思路我认为没错。。。

引用 10 楼 user-1 的回复:应该可以过的，你试试。 /* 	功能：迷宫砌墙 	作者：user-1 	日期：2019年11月7日10:36:56 */ #include <stdio.h> int n, m, k; char maze[501][501]; int get_flag(int row, int col) {// 返回周围的地形，二进制1表示墙，0表示空地 	int flag = 0; 	if (row - 1 < 0 || '.' != maze[row - 1][col]) {// 上 		flag |= 1;// 上用第0位表示 	} 	if (row + 1 >= n || '.' != maze[row + 1][col]) {// 下 		flag |= 1 << 1;// 下用第1位表示 	} 	if (col - 1 < 0 || '.' != maze[row][col - 1]) {// 左 		flag |= 1 << 2;// 左用第3位表示 	} 	if (col + 1 >= m || '.' != maze[row][col + 1]) {// 右 		flag |= 1 << 3;// 右用第4位表示 	} 	return flag; } int count_one(int num) {// 统计二进制的1的个数 	int count = 0; 	while (num > 0) { 		count += num & 1; 		num >>= 1; 	} 	return count; } void maze_two() { 	int row = 0, col = 0; 	int flag, one_num; 	int min_num = 1;// 1面空地 	while (k > 0) { 		if (col < 0) {// 下越界，不会发生这种情况 			col = 0;// 只是为了消除警告的写的 		} 		if (row < 0) {// 同上 			row = 0; 		} 		if (col >= m) {// 右越界 			col = 0; 			++row;// 下一层 		} 		if (row >= n) {// 遍历完迷宫 			++min_num;// 允许空地的数量加1 			row = col = 0;// 从头遍历 		} 		if ('.' != maze[row][col]) {// 不是空地 			++col;// 下一个 			continue; 		} 		flag = get_flag(row, col);// 四周的地形，二进制：1墙，0空地 		one_num = count_one(flag);// 四周的1的数量，即墙的数量 		if (4 == one_num) {// 四周全是墙 			maze[row][col] = 'X'; 			--k; 			++col;// 下一个 			continue; 		} 		if (3 == one_num) {// 3面墙 			maze[row][col] = 'X'; 			--k; 			flag ^= 0xF;// 取反 			if (1 == flag) {// 上方是空地 				--row;// 向上走 			} else if (2 == flag) {// 下方是空地 				++row;// 向下走 			} else if (4 == flag) {// 左边是空地 				--col;// 向左走 			} else if (8 == flag) {// 右边是空地 				++col;// 向右走 			} else { 				break;// 错误情况 			} 			continue; 		} 		// 当前位置四周有2面墙且整个地图无端点空地 		if (2 == one_num && 2 == min_num) { 			maze[row][col] = 'X';// 改为墙 			--k; 			if (flag >= 10) {// 上方有空地 				--row;// 向上走 			} else if (flag < 8) {// 右方有空地 				++col;// 向右走 			} else { 				++row;// 否则向下走 			} 			continue; 		} 		++col;// 当前位置不是最合适的点，继续遍历 	} } int main(void) { 	scanf_s("%d %d %d", &n, &m, &k); 	for (int i = 0; i < n; i++) { 		scanf_s("%s", maze[i], m + 1); 	} 	maze_two(); 	for (int i = 0; i < n; i++) { 		printf("%s\n", maze[i]); 	} 	return 0; } /* 以下示例全部测试通过 3 4 2 #..# ..#. #...  5 4 5 #... #.#. .#.. ...# .#.#  2 2 2 .. ..  2 3 4 ... ...  2 3 4 #.# ...  3 4 2 .... .##. .... */  兄弟，喜提10分

明显你的是暴力搜索，我的是沿着上一步搜好的继续搜，，，这差很多好吧。  虽然我没验证我的对不对。理论上是这样的。

类似。。。。。

引用 6 楼 user-1 的回复:[quote=引用 4 楼 张福泰zzz 的回复:] [quote=引用 2 楼 user-1 的回复:] 我的思路是：先遍历数组找端点（四周只有一个.其他都是#的点），将它改为X，找到了就在判断和他相邻的那个点，如果还是端点继续操作，如果不是就遍历剩余的数组，重复上面步骤，如果无端点，直接挑最少相邻（四周.最少）的点。  蔓延式操作。这样会超时的好像要用遍历树做[/quote]把代码贴出来我试试。[/quote] 这是我的第二种方法，跟你说的有点类似，排除特殊情况都超时了： #include<stdio.h> int main() { 	int n, m, k; 	scanf("%d %d %d", &n, &m, &k); 	char a[1000][500] = { '\0' }; 	getchar(); 	for (int i = 1; i <= n; i++) 	{ 		for (int j = 1; j <= m; j++) scanf("%c", &a[i][j]); 		getchar(); 	} 	for (int i = 1; i <= n; i++) 	{ 		for (int j = 1; j <= m; j++) 		{ 			int cnt = 0; 			if (a[i][j] == '.') 			{ 				if (a[i-1][j] == '.') cnt++; 				if (a[i+1][j] == '.') cnt++; 				if (a[i][j+1] == '.') cnt++; 				if (a[i][j-1] == '.') cnt++; 			} 			if (cnt == 1) 			{ 				a[i][j] = 'X'; 				k--; 			} 			if (k == 0)break; 			if ((k != 0) && (i == n) && (j == m)) 			{ 				i = 1; j = 1; 			} 		} 		if (k == 0)break; 	} 	for (int i = 1; i <= n; i++) 	{ 		for (int j = 1; j <= m; j++) printf("%c", a[i][j]); 		printf("\n"); 	} 	return 0; } 这是我的第一种方法，感觉挺对但是也是超时： #include<stdio.h> //判断修改后是否连通（找规律） int z(char a[1000][500]) { 	int cnt = 0; 	for(int i=1;i<900;i++) 		for (int j = 1; j < 450; j++) 		{ 			int cnt1 = 0; 			if (a[i][j] == '.') 			{ 				if (a[i+1][j] == '.') cnt1++; 				if (a[i][j+1] == '.') cnt1++; 				if (a[i-1][j] == '.') cnt1++; 				if (a[i][j-1] == '.') cnt1++; 			} 			if (cnt1 == 1) cnt++; 			if (cnt1 == 3) cnt--; 			if (cnt1 == 4)cnt -= 2; 		} 	if (cnt == 2) return 0; 	else return 1; } int main() { 	int n, m, k; 	scanf("%d %d %d", &n, &m, &k); 	char a[1000][500] = { '\0' }; 	getchar(); 	//输入数组          for (int i = 1; i <= n; i++) 	{ 		for (int j = 1; j <= m; j++) scanf("%c", &a[i][j]); 		getchar(); 	} 	//修改数组         for (int i = 1; i <= n; i++) 	{ 		for (int j = 1; j <= m; j++) 		{ 			if (a[i][j] == '.') 			{ 				a[i][j] = 'X'; 				if (z(a)) a[i][j] = '.'; 				else k--; 			} 			if (k == 0) break; 		} 		if (k == 0) break; 	} 	//输出数组         for (int i = 1; i <= n; i++) 	{ 		for (int j = 1; j <= m; j++) 			printf("%c", a[i][j]); 		printf("\n"); 	} 	return 0; }

引用 4 楼 张福泰zzz 的回复:[quote=引用 2 楼 user-1 的回复:] 我的思路是：先遍历数组找端点（四周只有一个.其他都是#的点），将它改为X，找到了就在判断和他相邻的那个点，如果还是端点继续操作，如果不是就遍历剩余的数组，重复上面步骤，如果无端点，直接挑最少相邻（四周.最少）的点。  蔓延式操作。这样会超时的好像要用遍历树做[/quote]把代码贴出来我试试。

引用 4 楼 张福泰zzz 的回复:[quote=引用 2 楼 user-1 的回复:] 我的思路是：先遍历数组找端点（四周只有一个.其他都是#的点），将它改为X，找到了就在判断和他相邻的那个点，如果还是端点继续操作，如果不是就遍历剩余的数组，重复上面步骤，如果无端点，直接挑最少相邻（四周.最少）的点。 蔓延式操作。这样会超时的好像要用遍历树做[/quote]遍历树是啥。

引用 2 楼 user-1 的回复:我的思路是：先遍历数组找端点（四周只有一个.其他都是#的点），将它改为X，找到了就在判断和他相邻的那个点，如果还是端点继续操作，如果不是就遍历剩余的数组，重复上面步骤，如果无端点，直接挑最少相邻（四周.最少）的点。  蔓延式操作。这样会超时的好像要用遍历树做

大一高程作业题

哪儿的题啊，看着挺有意思的。有链接没


Question: 运行在windows系统上的软件，可以绕过windows自己来显示图形和动画吗？

好比一辆汽车，所有的零部件全部自己生产，不能采购别家的零部件。

直接操作显卡编程，好比一个公司100个人的活，全部你一个人干。

你想直接操作显卡编程吗？一般都要通过GDI、DirectX、OpenGL之类的库吧。

通常应该是不能的，这和dos下面不一样，现代操作系统对资源管理得更好且注重权限


Question: 为什么我输出的是中文

通过查看ASCII可以知道它的范围是0~127，即[0,127]，你的219是超过了。 char ch = 219，输出%d是-37，无法匹配ASCII码  #include<stdio.h>  int main() {     int i, j;     for (i = 0; i < 8; i++)     {         for (j = 0; j < 8; j++)             if ((i + j) % 2 == 0)                 printf("%c%c", 42, 42);             else                 printf(" ");         printf("\n");     }      return 0; }

引用 2 楼 user-2 的回复:[quote=引用 1 楼 user-2 的回复:] 1、最后少了一个} 2、219是什么鬼，你想干什么？ 通常来说ascii中的可见字符范围是好多研究一下，219不在这个范围！另外，我们通常是在中文系统中运行这个，219的话最高位又是1，这样就在中文编码范围内了。 219的16进制是DB，去某些查编码的网站查询DBDB可以得到对应的汉字是：圹  https://www.qqxiuzi.cn/bianma/zifuji.php[/quote]  再补充一下：把两个%c之间多加点空格再试一下呢？

引用 1 楼 user-2 的回复:1、最后少了一个} 2、219是什么鬼，你想干什么？ 通常来说ascii中的可见字符范围是好多研究一下，219不在这个范围！另外，我们通常是在中文系统中运行这个，219的话最高位又是1，这样就在中文编码范围内了。 219的16进制是DB，去某些查编码的网站查询DBDB可以得到对应的汉字是：圹  https://www.qqxiuzi.cn/bianma/zifuji.php

1、最后少了一个} 2、219是什么鬼，你想干什么？


Question: 大哥们 求助

引用 6 楼 weixin_40290083 的回复:否则会当为链表倒数第二节点时，p->next为null，你确要取data值，就异常了  那应该怎么改呢

#include<stdio.h> #include<malloc.h> typedef struct LNode { 	int data; 	struct LNode *next; }List, *LinkList; void InitList(List **L) { 	*L = (List *)malloc(sizeof(List)); 	if (*L == NULL) 		printf("分配失败"); 	else 		(*L)->next = NULL; } void HeadInitList(List *L, int n) { 	List *s; 	int i; 	for (i = 0; i < n; i++) 	{ 		s = (LinkList)malloc(sizeof(List)); 		printf("请输入第%d个数", i + 1); 		scanf("%d", &s->data); //输入元素值 		s->next = L->next; 		L->next = s;     //插入 	} } void output_List(List *L) { 	List *p = L; 	while (p->next != NULL) 	{ 		printf("%d\n", p->next->data); 		p = p->next; 	} } void main() { 	LinkList L; 	int n; 	InitList(&L); 	printf("请输入链表的长度：\n"); 	scanf("%d", &n); 	HeadInitList(L, n); 	output_List(L); 	printf("请输入要删除的元素的位置：\n"); }

引用 2 楼 dominis 的回复:应该没有吧，我这个照着书上打的  #include<stdio.h> #include<malloc.h> typedef struct LNode { 	int data; 	struct LNode *next; }List, *LinkList; void InitList(List *L) { 	L = (List *)malloc(sizeof(List)); 	if (L == NULL) 		printf("分配失败"); 	else 		L->next = NULL; }  void main() { 	List L; 	int n; 	InitList(&L); }  就不说别的，你定义了一个List L，然后在InitList中又要malloc，这个有意义吗？这个地方绝对不是书上的吧

应该没有吧，我这个照着书上打的

是不是死循环了


Question: 一个关于“是否能同时被两个数整除”的C语言编程。

希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

我觉得要判断既能被5整除又能被7整除，然后输出YES会好一点，如果你把这个放在else那里，会有很多种情况，如果你这样写，既不能被5整除也不会被7整除的数也会输出YES    (并且的符号是&&)

5 和 7都是质数 直接判断能不能被 35整除就可以了

引用 7 楼 printf("奶思！\n");的回复:[quote=引用 2 楼 Italink的回复:]d% -> %d 学艺不精，没看懂是什么意思[/quote] 格式控制符写错了哟，不是d%，是%d

引用 6 楼 printf("奶思！\n"); 的回复:[quote=引用 3 楼 liups的回复:]&& 才是与 嗯嗯嗯，我相信这点我没搞错。 假如输入一个数既可以被5整除也可以被7整除(即“||”左边右边都为0)，那么if后边的判断是不是应该为假(逻辑或:同时为假才为假)，然后输出“YES”,刚好是对的呀。[/quote] 程序的逻辑应该清晰！你这虽然逻辑是对的，但是不便于理解，不提倡

引用 2 楼 Italink的回复:d% -> %d 学艺不精，没看懂是什么意思

引用 3 楼 liups的回复:&& 才是与 嗯嗯嗯，我相信这点我没搞错。 假如输入一个数既可以被5整除也可以被7整除(即“||”左边右边都为0)，那么if后边的判断是不是应该为假(逻辑或:同时为假才为假)，然后输出“YES”,刚好是对的呀。

引用 4 楼 printf("奶思！\n"); 的回复:[quote=引用 1 楼 不闻窗外事的回复:]AI说有问题就有问题啊？？？    相信自己 哈哈哈，希望吧，谢谢你呀[/quote] 哈个毛线啊，二楼那不是给你指出问题了，%d不是d%

引用 1 楼 不闻窗外事的回复:AI说有问题就有问题啊？？？    相信自己 哈哈哈，希望吧，谢谢你呀

&& 才是与

d% -> %d

AI说有问题就有问题啊？？？    相信自己


Question: 请问这道题是怎么算的？

第一个，%x以16进制输出，后面的p(注意不是*p)为a的首地址或a[0]地址。p+9则是a[9]地址。  如果假设int为2字节，则第二个输出应该为0x194+18，也就是1a6。解答完毕，好象很完美！   但是，我要告诉你，这是错的！不能肯定int就是2字节！  所以正确答案是：题目错了！


Question: Java调用C语言报错崩溃，求助

引用 3 楼 走走道疯了_!的回复:[quote=引用 2 楼 SuperDay 的回复:] jni发这边也可以，从信息里面看，似乎是string编码utf有点问题  crypt函数返回值可能有问题，不知道咋回事，直接printf都崩溃[/quote] 现在都没搞了，这里貌似搞的人不多，估计要自己解决了

引用 2 楼 SuperDay 的回复:jni发这边也可以，从信息里面看，似乎是string编码utf有点问题  crypt函数返回值可能有问题，不知道咋回事，直接printf都崩溃

jni发这边也可以，从信息里面看，似乎是string编码utf有点问题

这里是C/C++的板块吧，你确定发java的问题到这里合适？


Question: 求教学C语言

引用 3 楼 fireyou的回复:     int bit = 0;     int n;     printf("请输入一个整数：\n");     scanf("%d", &n);     while (n != 0)     {         bit++;         n /= 10;     }     printf("你输入的是%d位数 \n", bit);  我知道了，刚刚脑子没转过来

引用 3 楼 fireyou的回复:     int bit = 0;     int n;     printf("请输入一个整数：\n");     scanf("%d", &n);     while (n != 0)     {         bit++;         n /= 10;     }     printf("你输入的是%d位数 \n", bit);  n /=10是什么意思

大于9的是2位数 大于99的是3位数 ……

取余，循环，＋1，除


Question: 将字符串中的所有数字加起来，我的输出怎么会错？

用malloc还要配合使用free char s[100]也可以

类似这样 s = malloc(100);  然后后面要计算数字的相加，需要转换一下  sum = sum + s[i] - '0';

引用 1 楼 user-2 的回复:指针s没有分配空间，直接使用会有问题，要么分配空间，要么用数组 请问这样应该怎么改呢？

你这种是直接用asc码值相加了。

指针s没有分配空间，直接使用会有问题，要么分配空间，要么用数组


Question: DerectX 和 windows是什么关系？

运行在windows系统上的软件，可以绕过windows自己来显示图形和动画吗？

图形编程，难度好大的。多年前我尝试了，以失败告终。

DerectX 是微软的多媒体编程接口 windows是微软的操作系统 显示图形，可以理解DerectX 是一个辅助软件，可以提高性能，没有DerectX ，windows也能显示动画

不要DirectX，有OpenGL，GDI Plus等等，当然也可以全都不要，那就要自己来封装各种模块，就是工作量比较大


Question: Time Limited Exceeded问题求助

希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

引用 3 楼 张福泰zzz 的回复:其他的就只有两个例子啦每一行 少一两个字

其他的就只有两个例子啦

截图题目不全

首先a建议用动态申请空间（new/delete, malloc/free);因为数组的长度有输入决定。  第二点，z函数建议增加两个参数，分别是row, col用于接收main函数里的n和m，因为n， m的值可能小于900， 450 所以，如果小于，那么z函数里用900, 450就不可以了。因为多出的元素是随机数。超时可能是这个原因导致的。  第三点：函数名不建议用一个字母表示，这样一来和一个参数名基本上没有区别，不易理解代码；


Question: 跪求大佬看看哪里错了

引用 18 楼 不闻窗外事的回复:[quote=引用 17 楼 qq_30821735 的回复:] [quote=引用 15 楼 不闻窗外事的回复:][quote=引用 12 楼 qq_30821735 的回复:] 如果不过滤回车是会被下面的scanf接收吗 是的[/quote] 使用多个scanf是要注意这一点的吗[/quote] 对，最好不要连续使用scanf，连续使用就要注意[/quote] 好  我记住了  谢谢谢谢

引用 17 楼 qq_30821735 的回复:[quote=引用 15 楼 不闻窗外事的回复:][quote=引用 12 楼 qq_30821735 的回复:] 如果不过滤回车是会被下面的scanf接收吗 是的[/quote] 使用多个scanf是要注意这一点的吗[/quote] 对，最好不要连续使用scanf，连续使用就要注意

引用 15 楼 不闻窗外事的回复:[quote=引用 12 楼 qq_30821735 的回复:] 如果不过滤回车是会被下面的scanf接收吗 是的[/quote] 使用多个scanf是要注意这一点的吗

引用 14 楼 proorck2019的回复:你用的这个PTA的APP叫什么名字？ 我搜索PTA，没有啊！ pta是网站，你百度一下就知道了

引用 12 楼 qq_30821735 的回复:如果不过滤回车是会被下面的scanf接收吗 是的

你用的这个PTA的APP叫什么名字？ 我搜索PTA，没有啊！

引用 2 楼 fireyou的回复:能运行？ 编译就有错吧！ float s [r]; C语言定义数组要指定长度，这里需要用一个常量，不能用r char x[r];  这里一样。 他的意思是动态数组，我上学的时候也喜欢这么写。 用malloc/free p=(...)malloc(sizeof(...)*r) free(p)

如果不过滤回车是会被下面的scanf接收吗

C99支持VLA，float s[r];是可以的

那句不明白？还是都不明白？ 人不是写清楚了吗，过滤回车。

引用 5 楼 不闻窗外事的回复:scanf("%d", &r); getchar();   scanf("%c %f", c++, p++); getchar();  这两个scanf后面加上getchar()；过滤掉回车 ! 可以了 可为什么要这样，我还是不太懂

不是，书上写过这种用法，我就想试试。。。

引用 2 楼 fireyou的回复:能运行？ 编译就有错吧！ float s [r]; C语言定义数组要指定长度，这里需要用一个常量，不能用r char x[r];  这里一样。 是能运行，但是结果不对，但我在pta的另一道题上也这样用了。。通过了。。这是为什么。。

#include<stdio.h> #include <stdlib.h>  int main() {     int r;     scanf("%d", &r);     //float s [r];     float *s;     //char x[r];     char *x;     s = (float *)malloc(sizeof(float) * r);     if (!s)         exit(0);     x = (char *)malloc(sizeof(char) * r);     if (!x)         exit(0);      char *c = x;     float *p = s;          getchar();    //for '\n'     for(int i=0;i<r;i++){         //scanf("%c %f",c++,p++);         scanf("%c %f", c+i, p+i);         getchar();    //for '\n'     }     p=s;     c=x;     for(int i=0;i<r;i++,p++,c++){         if(*c=='F'){             printf("%-1.2f\n",*p*1.09);         }         else{             printf("%-1.2f\n",*p/1.09);         }     }      free(s);     free(x);      return 0; }  供参考～

首先我你如果用的是dve 我建议你去安装stdio或者查询让dve调试的方法，调试一下就可以了。

这两个++放在for里面，i++的右边不好吗？

scanf里面c++  p++，为什么非要这么写？出于过度的自信吗？


Question: 关于结构体与结构体类型指针的相互赋值问题

搞定了就好，出错之后找出错误然后把它解决了，就会进步了

我弄懂了 之前一直把p当成了上一个节点的指针域，想着把pNew的地址赋给p就把节点插进去了，但是p只是一个变量，并没有同多级指针，这样把pNew的地址赋过去也是直接把下面节点的弄丢了，更不可能把节点插进去了。

这样有什么问题吗？？？

引用 1 楼 user-1 的回复:可以的，复制结构体内容可以用memcpy，请自行百度 我这里有两张图，你看看

可以的，复制结构体内容可以用memcpy，请自行百度


Question: 筛法求素数

你这个是问题吗？？问题是什么

表示没看懂你的筛法，确定有用吗？


Question: 为什么我的这个算法会出现abort trap:6？

引用 4 楼 林多的回复:[quote=引用 3 楼 qq_45838041 的回复:] [quote=引用 2 楼 林多的回复:]abort trap:6，数组越界。 Ubuntu GCC环境下没有问题。。 你用的是XCode？  尝试把数组的长度，申请大一点，看看？ 我用的是sublime text [/quote] 我说的是，编译环境或者IDE（GCC、VS、XCode）。不是编辑器（Sublime、VSCode）。[/quote] 应该是gcc，我好像没有其它的

引用 1 楼 自信男孩的回复:没发现什么问题，可以贴出代码（不要图片），可以帮你试一下～（Linux 环境下） #include <stdio.h> #include <string.h> int main() { 	char in[10][20]={'\0'}, temp[200]={'\0'}; 	int i, j, max; 	for(i=1; i<=5; i++){ 		gets(in[i]); 	} 	for(i=1; i<=4; i++){ 		strcpy(temp, in[i]);     //strcpy函数是把字符串in复制到temp中 		max = i; 		for (j=i+1; j<=5; j++){ 			if(strcmp(in[max],in[j])<0) max=j;  //strcmp函数的作用是比较字符串大小 		} 		strcpy(in[i], in[max]); 		strcpy(in[max], temp); 	} 	for( i=1; i<=5; i++)printf("%s\n", in[i]); }

if(i != max) {     strcpy(in[i], in[max]); }   mac 下面GCC 应该是按照C99编译的，不能对相同地址使用strcpy，会起冲突。 因为C99 下面的 char *strcpy( char *restrict dest, const char *restrict src ); 有restrict限定

引用 3 楼 qq_45838041 的回复:[quote=引用 2 楼 林多的回复:]abort trap:6，数组越界。 Ubuntu GCC环境下没有问题。。 你用的是XCode？  尝试把数组的长度，申请大一点，看看？ 我用的是sublime text [/quote] 我说的是，编译环境或者IDE（GCC、VS、XCode）。不是编辑器（Sublime、VSCode）。

引用 2 楼 林多的回复:abort trap:6，数组越界。 Ubuntu GCC环境下没有问题。。 你用的是XCode？  尝试把数组的长度，申请大一点，看看？ 我用的是sublime text


Question: C语言

引用 12 楼 xianming3的回复:谢谢你让我第一次得分 另外说一句，这段代码其实你如果都理解了，或者再过一段时间，你就不会觉得太复杂了。 好的谢谢，确实能搞明白简单点的

引用 13 楼 weixin_45839025 的回复:[quote=引用 12 楼 xianming3的回复:]谢谢你让我第一次得分 另外说一句，这段代码其实你如果都理解了，或者再过一段时间，你就不会觉得太复杂了。 好的谢谢，确实能搞明白简单点的[/quote] 不客气

这是我第一次回答问题，谢谢20分！

当然如果你想在程序里面自己输入两个数的话，可以在定义x和y的后面加上scanf 比如scanf("%d,%d",&x,&y); 这个你应该也会，你最好把整个这些代码搞明白

直接百度得了。。。。。。

太简单了，自己学吧

引用 6 楼 weixin_45837369的回复:我先现写一段，供参考。  #include<stdio.h> int main(){ int x=45; int y=87; int maxn=max(x,y); printf("%d",maxn); getchar();  }   int max(int num1,int num2) {if (num1>num2) return num1; else return num2; }  很简单，不过我没有亲自试。 非常谢谢不好意思啊，让你打了那么长的代码

引用 7 楼 weixin_45837369的回复:成功的话记得给我一点分。 对不对不是问题，态度是个问题🤗

成功的话记得给我一点分。

求最大值很简单啊，用if判断，如果第一个数比第二个数大，返回第一个数，如果第一个数比第二个数小，返回第2个数，

建议自己写写，不是很难得～基础的题目，上课的时候在考虑怎么就业吗？


Question: 大一题输入1-99的数字，输出它的念法(汉字)输出，

希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

引用 6 楼 qq_45839954的回复:[quote=引用 5 楼 qq_45836904 的回复：][quote=引用 4 楼 qq_45836904的回复:]#include<stdio.h>int main(void){    int a,b,num;    printf("请输入数值：");    scanf("%d",&num);    a=num/10;		b=num-a*10;		if(num>=1&&num<=99)		{ 			if(a>=1&&a<=9)				switch(a)				   {        case 0:printf("\n");break;        case 1: printf("yishi");break;        case 2: printf("ershi");break;        case 3: printf("sanshi");break;        case 4: printf("sishi");break;        case 5: printf("wushi");break;        case 6: printf("liushi");break;        case 7: printf("qishi");break;        case 8: printf("bashi");break;        case 9: printf("jiushi");break;			}			if(b>=1&&b<=9)				switch(b)			{        case 1: printf("yi\n");break;        case 2: printf("er\n");break;        case 3: printf("san\n");break;        case 4: printf("si\n");break;        case 5: printf("wu\n");break;        case 6: printf("liu\n");break;        case 7: printf("qi\n");break;        case 8: printf("ba\n");break;        case 9: printf("jiu\n");break;			}		}			 else            printf("输入错误！\n");			 return 0;} 。。格式我忘记调了你自己看一下！我觉得应该是这样[/quote]好的谢谢了[/quote] 结一下帖子鸭亲！！！！！

作业？自己看书吧！ 只提示一个1-99的中文读法，大致可以分为3中情况 1-10 YI,ER,SAN, ... SHI 11-19 SHI YI, SHI ER, ... 21-99 ER SHI YI, ..., JIU SHI JIU

有没有大哥帮帮忙

引用 5 楼 qq_45836904 的回复：[quote=引用 4 楼 qq_45836904的回复:]#include<stdio.h>int main(void){    int a,b,num;    printf("请输入数值：");    scanf("%d",&num);    a=num/10;		b=num-a*10;		if(num>=1&&num<=99)		{ 			if(a>=1&&a<=9)				switch(a)				   {        case 0:printf("\n");break;        case 1: printf("yishi");break;        case 2: printf("ershi");break;        case 3: printf("sanshi");break;        case 4: printf("sishi");break;        case 5: printf("wushi");break;        case 6: printf("liushi");break;        case 7: printf("qishi");break;        case 8: printf("bashi");break;        case 9: printf("jiushi");break;			}			if(b>=1&&b<=9)				switch(b)			{        case 1: printf("yi\n");break;        case 2: printf("er\n");break;        case 3: printf("san\n");break;        case 4: printf("si\n");break;        case 5: printf("wu\n");break;        case 6: printf("liu\n");break;        case 7: printf("qi\n");break;        case 8: printf("ba\n");break;        case 9: printf("jiu\n");break;			}		}			 else            printf("输入错误！\n");			 return 0;} 。。格式我忘记调了你自己看一下！我觉得应该是这样[/quote]好的谢谢了🙏

引用 4 楼 qq_45836904的回复:#include<stdio.h>int main(void){    int a,b,num;    printf("请输入数值：");    scanf("%d",&num);    a=num/10;		b=num-a*10;		if(num>=1&&num<=99)		{ 			if(a>=1&&a<=9)				switch(a)				   {        case 0:printf("\n");break;        case 1: printf("yishi");break;        case 2: printf("ershi");break;        case 3: printf("sanshi");break;        case 4: printf("sishi");break;        case 5: printf("wushi");break;        case 6: printf("liushi");break;        case 7: printf("qishi");break;        case 8: printf("bashi");break;        case 9: printf("jiushi");break;			}			if(b>=1&&b<=9)				switch(b)			{        case 1: printf("yi\n");break;        case 2: printf("er\n");break;        case 3: printf("san\n");break;        case 4: printf("si\n");break;        case 5: printf("wu\n");break;        case 6: printf("liu\n");break;        case 7: printf("qi\n");break;        case 8: printf("ba\n");break;        case 9: printf("jiu\n");break;			}		}			 else            printf("输入错误！\n");			 return 0;} 。。格式我忘记调了你自己看一下！我觉得应该是这样

这能用while吗……？？？if吧


Question: 路过的大佬看一眼，求解答

我来插一脚：CSDN论坛新手指南

跟我没什么关系了，我去吃饭了。

引用 1 楼 不闻窗外事的回复:因为你的if判断之前，sum已经加了num了，所以判断是0或者负的后，要把加的减去，主要是你程序写的不好，才需要这样 大佬，你太强了，秒答，膝盖留给你，祝天天开心！

#include<stdio.h>  int main() {     int num, sum=0;      for(int i; ;i++){         scanf("%d", &num);         if (num <= 0)             break;         if(num % 2 != 0)             sum+=num;     }      printf("%d", sum);      return 0; } 供参考～  先判断num是否为负数和0.然后在考虑是否为奇数～


Question: Lua require module, Erro:./common.lua: version mismatch in precompiled chunk

问题解决了，分享给大家： 1、使用的lua版本不太对，使用的是5.1.4版本的，我的是最新的      主要是common.lua里边加载了dylib动态库，      而开发dylib的哥们儿使用的是5.1.4版本，所以我这儿怎么都不通过  2、加载dylib设置package路径时，应该使用package.cpath，  虽发错了位置，也给自己个交代吧。

🙄是选错位置了，谁哪儿有答案

是不是发错误位置了？这是C/C++问题吗？


Question: 编一个程序，能实现功能就行，周五要交作业啦


Question: 看到一个位操作的代码中间有段没明白，有没有人帮忙解释一下

2楼说的对，建议自己动手敲一遍。不想敲可以下载源码自己跑一下也行。  图片歪了。

引用 2 楼 自信男孩的回复:如果可以，建议贴代码。可能会想到这是书本上的代码，我怎么（把源码）给贴出来。看书本上的代码 不如再加上输入到机器上，自己编译运行一下，另外，再改改，加一些调试信息，这样对源码可能会有 更深的认识，在输入到机器上时，你也会学到一些编程技巧等等。 晚上结帖。。。。。。。。。

引用 2 楼 自信男孩的回复:如果可以，建议贴代码。可能会想到这是书本上的代码，我怎么（把源码）给贴出来。看书本上的代码 不如再加上输入到机器上，自己编译运行一下，另外，再改改，加一些调试信息，这样对源码可能会有 更深的认识，在输入到机器上时，你也会学到一些编程技巧等等。 大佬无处不在哈哈，我知道了，

引用 1 楼 wowpH的回复:a?b:c  这是三目运算符，不是位操作。  若a为真，则返回b，否则返回c。  CSDN论坛新手指南 我有遵守吧，大佬"""


Question: C语言输出9×9矩阵右下三角

N维 数组，每个元素是 a[i][j]  只输出 i+j>N的数据 for( int i=0;i<9;i++)    for(int j=0;j<9;j++)     {        if(i+j>=9)      cout>>a[i][j]; else   cout>>" ";    }

楼上说的对，二维形状用两层for对应坐标输出就行

好像两层for可以，具体的，可以在二维数组里先抹去左上三角，再输出。


Question: 大家帮我看一下这个排序代码哪有错

希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

引用 3 楼 proorck2019的回复:for(i=0;i<N-1;i++) for(j=i+1;j<N;j++)     if(a[i]>a[j]){          t=a[i], a[i]=a[j], a[j]=t;     } 哥们你在好好想想 这能行吗

int b[u]是错的 建议你的max2函数换个思路

我记得排序用两层for就OK了，怎么搞的这么复杂？


Question: C语言题目解释题，希望可以讲的详细点，谢谢!

引用 2 楼 Eleven 的回复:1 获取输入的字符串数据 2 标准输出字符串数据 3 比较2个字符串的数据感谢！

引用 1 楼 user-4 的回复:scanf(“%s”,地址值); 输入一个值，存入该地址    %s表示将输入的值按字符串的方式存入 解释语句printf("%s",地址值)  打印该值的内容，按字符串的方式打印 strcmp(str1，str2) 比较两个字符串str1和str2 如果str1和str2相同，返回0 如果 str1 < str2, 返回负数 str2 > str2， 返回正数谢谢！

你还缺少一本文档，文档里都有。

1 获取输入的字符串数据 2 标准输出字符串数据 3 比较2个字符串的数据


Question: 输入int类型数据m,n，计算m的n次幂，并输出

我还是觉得for循环比递归函数高效。 for(i=0,r=1;i<n;i++)     r*=m

double deep(double m, double n) {     if (n == 0)         return 1;     return m * deep(m, n - 1); } 这样更简洁一些～  引用 1 楼 user-5 的回复: #include<stdio.h>  double deep(double m, double n) {     if (n == 0)     {         return 1;     }     else     {         return m * deep(m, n - 1);     } }  int main(void) {     int m, n;     double ret;      scanf("%d%d", &m, &n);     ret = deep(m, n);     printf("ret = %lf", ret);      return 0; }

需要考虑一下溢出的问题~


Question: 这回为什么只能输出两个数？

输入可能不正常吧。。。

😭😭还是只有两个数。。迷

嗯，看错了，先不交换，输出三个字符看看

我给你看看流程图你就不会这么说了。。。可惜不能传照片，我手打你仔细看看吧 我是先比较ch1，ch2，两这者中小的一个给ch1，大的给ch2。 再将ch3与上一步得到的ch2比较，小的给ch2，大的给ch3。 再将ch1与上一步得到的ch2比较，较小的给ch1，大的给ch2。

比如大的1传给2，2传给3或者相反。但你这个是大的都传给2，然后比较13，或者是小的都传给2，总之就是次序问题

引用 1 楼 user-2的回复:你交换的方向不一致，然后同一个变量不需要自己给自己赋值 自己给自己赋值我知道可以省，你说的交换方向不一致是什么意思？

你交换的方向不一致，然后同一个变量不需要自己给自己赋值


Question: 输出2－200间的素数，每行输出五个。求解

首先要解决判断一个数是不是素数，再循环200次，每行输出五个是另一道题，难啊！

嗯嗯                。。。。。。。。。。

网上太多相关的介绍和代码了，建议自己动手查一查

自己动手写一写，有问题再问。 CSDN论坛新手指南


Question: 我在写这个函数的时候发现调用这个函数就会出错，但是不知道哪里错了？？求高人指点

引用 3 楼 user-2的回复:需要了解一些调试手段，比如把问题隔离出来处理等等 谢谢你，我到处去看看

需要了解一些调试手段，比如把问题隔离出来处理等等

引用 1 楼 user-2的回复:出现什么错误？不能调试一下吗？ 我调试过了，是逻辑错误了，所以看不出来

出现什么错误？不能调试一下吗？


Question: 为什么排列三个数由大到小顺序要用中间量进行转换，求大佬解惑

引用 6 楼 qq_45842206的回复:他们之间的转换关系是什么啊？ 楼主如果三个口袋，一个装满大米，一个装满大豆，还有一个空的，那么你有什么办法可以让那两个装满东西的口袋里面的东西掉个个吗？就是原先装大米的口袋装满玉米，装玉米的口袋装满大米

他们之间的转换关系是什么啊？

有的题目就是要设置一些奇葩的前提条件，什么不许用if不许用临时变量，笑话！不用if能做出什么事情来？有些东西只能私下里玩玩，拿出来推广就不对了

而且，左右不就是多一个临时变量而已，为什么一定要避免呢？如果不用，代价更大。我们都应该知道一些把戏，都不是一定都要用。除非想参加混乱程序大赛

虽然可以，但是不推荐使用，都是被谭浩强误导的，学编程不是玩把戏，等你们遇到坑的时候就会明白这句话的

不用中间变量也是可以的

好奇怪的问题啊，不用中间变量怎么交换，不要跟我说那些奇葩做法


Question: C语言求解:数据上传与下载

希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

socket, 排序，不知道有没有gui?


Question: C语言简单的程序错误题

分号反了吧  第三行申明要分号，后面定义不要分号

第三行少了分号。。。。。


Question: C语言程序设计大作业

两百行其实做不了什么东西，可以写一点控制台游戏，或者文件处理项目

找喜欢的做呗。做做小游戏就不错啊


Question: malloc申请内存后，整个程序运行结束后是什么情况。

嗯，如果可以还是要学一下的，对自己有好处，你可以在C++ C# JAVA里面做一个选择，但最好不要排斥C

引用 5 楼 SuperDay 的回复:为什么要转到JAVA，一门一门语言来搞定，学完C再学JAVA也不迟，个别能力超强另说了，可以同时学好几门语言。每个语言都有缺陷，学了一半放弃了，什么能学好呢？  以前学过C，后来学了JAVA，主要用来开发WEB，用的SSH框架，现在有个项目要用到C，

引用 3 楼 proorck2019 的回复:会被释放掉，这是操作系统自我保护的措施。发明操作系统时，还没有自动垃圾回收的技术。 如果你实在不喜欢，可以学java。  我只想搞明白这个问题，java的垃圾回收是由GC线程处理的，它不受程序员控制内存回收，确实是解放了程序员，提高了开发效率。

引用 1 楼 user-3 的回复:[quote=引用 楼主 weixin_40290083 的回复:] 在使用malloc申请堆内存时一直在强调，当所申请的内存不再使用时要使用free释放，否则会造成内存泄露。常见的示例就是在一个自定义函数fun1()中使用malloc申请内存，但是不调用free释放申请的内存，即使fun1()执行完成了，所申请的内存也不会被释放。我的问题是，main调用了fun1（），main和fun1()函数中也没有调用free，并且main执行完毕了，由malloc所申请的内存会被释放掉吗。 main执行完了退出了，系统会释放掉给进程分配的空间，不过这不是一个好习惯[/quote]  这倒是的，如果fun1在一个长期运行的循环中执行，那么就危险了。谢谢

引用 楼主 weixin_40290083 的回复:在使用malloc申请堆内存时一直在强调，当所申请的内存不再使用时要使用free释放，否则会造成内存泄露。常见的示例就是在一个自定义函数fun1()中使用malloc申请内存，但是不调用free释放申请的内存，即使fun1()执行完成了，所申请的内存也不会被释放。我的问题是，main调用了fun1（），main和fun1()函数中也没有调用free，并且main执行完毕了，由malloc所申请的内存会被释放掉吗。 main执行完了退出了，系统会释放掉给进程分配的空间，不过这不是一个好习惯


Question: C语言数组问题，求大佬解答

一起学习#include<stdio.h> #include<stdlib.h> void ss(int a[100],int n) { 	int i,j; 	for (i=0;i<n;i++) 		for (j=2;j<a[i];j++) 		{ 			if (a[i]%j==0) 			{ 				a[i]=0; 				break; 			} 		} } void px(int a[100],int n) { 	int i,j,t; 	for (i=0;i<n-1;i++) 		for(j=i+1;j<n;j++) 		{ 			if(a[i]>a[j]) 			{ 				t=a[i]; 				a[i]=a[j]; 				a[j]=t; 			} 		} } int main() { 	int a[100],i=0,n; 	printf("请输入整数的个数：\n"); 	scanf("%d",&n); 	for (i=0;i<n;i++) 		a[i]=rand()%81+10; 	ss(a,n); 	px(a,n); 	for (i=0;i<n;i++) 	{ 		if(a[i]!=0) 			printf("%d  ",a[i]); 		if((i+1)%5==0&&a[i]!=0) 			printf("\n"); 	} }

当初自己确实太菜了，而且也啥也不懂23333

.   我就想问问第一个程序该怎么写，，，不是纠错啊啊啊啊

提问的都是大爷了，这个自信男孩我看是态度最好的了

引用 4 楼 Atanies 的回复:，，，，，，，我要是对了我还来这儿问么大哥，你错的是代码 结果你一行代码都不贴  问毛问哦

，，，，，，，我要是对了我还来这儿问么大哥，

引用 2 楼 Atanies 的回复:[quote=引用 1 楼 自信男孩的回复:]先试着写写，总不会一点都不会吧。 自己写过了，找答案来着[/quote] 把你写的贴出来，有什么问题吗？～

引用 1 楼 自信男孩的回复:先试着写写，总不会一点都不会吧。 自己写过了，找答案来着

先试着写写，总不会一点都不会吧。


Question: 这个程序怎么打啊（要求用递归函数）

谢谢你的回复哈哈，因为截了下图

你这图片怕有几万像素了吧。。。这么大 调正。 CSDN论坛新手指南


Question: c语言笔记

你们是组团来的吗？记得结贴给分数啊。

这种笔记不要发在技术去区，可以写博客，blink或者发到非技术区


Question: c语言初学者

记得结贴给分数啊。。。

引用 1 楼 user-2 的回复：这种笔记不要发在技术去区，可以写博客，blink或者发到非技术区好的

这种笔记不要发在技术去区，可以写博客，blink或者发到非技术区


Question: 回文数

引用 4 楼 lin5161678 的回复:count多余  \n 和 ' ' 的三目多余  内层循环固定输出 10个  内层循环结束 直接换行就可以了 确实写多了。 #include <stdio.h> int main(void) {     int i, j;     for (i = 1; i < 10; ++i) {         for (j = 0; j < 10; ++j) {             printf("%d%d%d%d", i, j, j, i);         }         printf("\n");     }     return 0; }

引用 2 楼 wowpH 的回复:另一种写法，供参考：  #include <stdio.h> int main(void) {     int i, j;     int count = 0;     for (i = 1; i < 10; ++i) {         for (j = 0; j < 10; ++j) {             printf("%d%d%d%d", i, j, j, i);             putchar(count < 9 ? ' ' : '\n');             count = (count + 1) % 10;         }     }     return 0; } count多余  \n 和 ' ' 的三目多余  内层循环固定输出 10个  内层循环结束 直接换行就可以了

#include <stdio.h> //#include <math.h>  int rt_revers(int num); int main() {      int i;      for (i = 1000; i < 10000; i++)         if (i == rt_revers(i))             printf("%d\t", i);      putchar(10); #if 0     int a,b,c,d;     int i;     for( i=1000;i<10000;i++)     {         a=i/1000;//千位         b=(i%1000)/100;//百位         c=(i%100)/10;//十位         d=i%10;    //个位         if(a==d&&b==c)             printf("%d \t",i);     } #endif     return 0; }  int rt_revers(int num) {     int new_num = 0;      while (num) {         new_num = new_num * 10 + num % 10;         num /= 10;     }      return new_num; }  可以针对任何整型数（注意int的值不要溢出）  #include <stdio.h> //#include <math.h>  int rt_revers(int num); int main() {      int i;      for (i = 1000; i < 10000; i++)         if (i == rt_revers(i))             printf("%d\t", i);      putchar(10);      return 0; }  int rt_revers(int num) {     int new_num = 0;      while (num) {         new_num = new_num * 10 + num % 10;         num /= 10;     }      return new_num; } 简洁版～

有什么问题吗？


Question: 为什么永远都输出1 2 3

希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

引用 11 楼 wowpH 的回复:[quote=引用 7 楼 bsnow 的回复:] [quote=引用 6 楼 qq_45814010 的回复:] 字符可以直接参与比较大小吗？  可以的。 比如  A 的 ASCII 是 0x65 ,  a 的 ASCII 是 0x97。 所以 'a' - 'A' = 0x32  当然 'a' > 'A' 是 true[/quote]是十进制的65和97。不是十六进制的吧。[/quote]  是的，应该是十进制

引用 7 楼 bsnow 的回复:[quote=引用 6 楼 qq_45814010 的回复:] 字符可以直接参与比较大小吗？  可以的。 比如  A 的 ASCII 是 0x65 ,  a 的 ASCII 是 0x97。 所以 'a' - 'A' = 0x32  当然 'a' > 'A' 是 true[/quote]是十进制的65和97。不是十六进制的吧。

引用 3 楼 qq_45814010 的回复:好吧。。谢谢。想着都是ask码值，就都带了单引号ask码，，，

引用 8 楼 qq_45814010 的回复:[quote=引用 7 楼 bsnow的回复:][quote=引用 6 楼 qq_45814010 的回复:] 字符可以直接参与比较大小吗？  可以的。 比如  A 的 ASCII 是 0x65 ,  a 的 ASCII 是 0x97。 所以 'a' - 'A' = 0x32  当然 'a' > 'A' 是 true[/quote] 那a＞A呢，关系运算中是按ASCll值比较的么？[/quote]  引用字符 必须加 ' ， 要不会编译出错（当然如果你把a和A 定义成变量就另当别论）。 你思考这样一个问题，如果 a或者A 不加'， 那编译器 该把它当字符还是变量呢？ 如果要消除歧义，是不是只能加 ' 呢？

引用 7 楼 bsnow的回复:[quote=引用 6 楼 qq_45814010 的回复:] 字符可以直接参与比较大小吗？  可以的。 比如  A 的 ASCII 是 0x65 ,  a 的 ASCII 是 0x97。 所以 'a' - 'A' = 0x32  当然 'a' > 'A' 是 true[/quote] 那a＞A呢，关系运算中是按ASCll值比较的么？

引用 6 楼 qq_45814010 的回复:字符可以直接参与比较大小吗？  可以的。 比如  A 的 ASCII 是 0x65 ,  a 的 ASCII 是 0x97。 所以 'a' - 'A' = 0x32  当然 'a' > 'A' 是 true

字符可以直接参与比较大小吗？

引用 3 楼 qq_45814010的回复:好吧。。谢谢。想着都是ask码值，就都带了单引号 单引号里应该放字符，你放了字符串，居然不报错，看来编译器喜欢你。

引用 3 楼 qq_45814010的回复:好吧。。谢谢。想着都是ask码值，就都带了单引号 好像是ascii码，是不是。

好吧。。谢谢。想着都是ask码值，就都带了单引号

'ch1'是什么鬼？字符只能是一个，你这样写等于是'c'

什么语法，把所有的'ch1' 'ch2' 'ch3'都去掉单引号


Question: 求解用c#制作聊天面板布局

在网页里面登录后打开自己的帖子就有了

引用 4 楼 SuperDay的回复:   晕，多大点事啊？？？ 没找到啊，。。。。。。。。

晕，多大点事啊？？？

引用 2 楼 weixin_45838504 的回复:[quote=引用 1 楼 SuperDay的回复:]楼主，板块最外层有个.NET技术板块，看得见吗？可以把帖子移动到那边去 怎么弄。。。我不会啊，。。[/quote] 重新去那边发贴吧

引用 1 楼 SuperDay的回复:楼主，板块最外层有个.NET技术板块，看得见吗？可以把帖子移动到那边去 怎么弄。。。我不会啊，。。

引用 4 楼 SuperDay 的回复:   晕，多大点事啊？？？ 学习了

楼主，板块最外层有个.NET技术板块，看得见吗？可以把帖子移动到那边去


Question: winform窗体

楼主，板块最外层有个.NET技术板块，看得见吗？可以把帖子移动到那边去


Question: 什么是C运行时库？

引用 11 楼 SuperDay 的回复:是一种C库函数标准，算是运行库的一部分 没有吧。。C标准库哪来的多线程。。。pthread.h，不是C标准库的吧

是一种C库函数标准，算是运行库的一部分

引用 8 楼 SuperDay 的回复:运行库应该是包含两部分的操作系统，比如windows在system32等目录里面，Linux有lib目录，大部分都是so。a主要是接口这部分，这是由开发工具提供的，在链接的时候发生作用。操作系统这部分是通用的，并且这里面很多都是有源码的，有兴趣可以去看看 POSIX可以算是linux、UNIX上的C运行时库吗？

引用 8 楼 SuperDay 的回复:运行库应该是包含两部分的操作系统，比如windows在system32等目录里面，Linux有lib目录，大部分都是so。a主要是接口这部分，这是由开发工具提供的，在链接的时候发生作用。操作系统这部分是通用的，并且这里面很多都是有源码的，有兴趣可以去看看 POSIX可以算是linux、UNIX上是C运行时库吗？

有C标准库，像printf，scanf, strlen等等这些库，是C语言的库，库是实现这些函数的原型。 还有就是system，open, close, read 等等这是系统调用库～

引用 5 楼 SuperDay 的回复:gcc是移植过来的，没做太多改动，并且目前还不是Windows的主流编译器。有些库是个系统调用有关，但有些不是，开发工具提供相应的接口，通过它们来利用系统的资源。查函数的话，Windows有MSDN，Linux有手册或者man，也可以百度谷歌 我是说查运行时库，你确定linux中有运行时库吗？ 运行时库是“开发工具”提供的？真的不是微软？ 用gcc的这些IDE可以使用C运行时库，应该是有.a库吧，但我不知道是哪些库文件，这些.a库也是别人移植过来的吗？难道C运行时库是开源的吗？ 还有一个就是，我还是没太搞懂C运行时库是干嘛的是某个开发工具提供给自己使用的，还是系统内的程序都可以使用？是提供给C程序使用的，还是说某些语言的实现也需要用到C运行时库？

引用 3 楼 SuperDay 的回复:除了ANSI和POSIX以外，一些函数都是不可移植的，这些是操作系统相关的，操作系统提供了相应的接口，开发工具会提供相应的库和SDK。你说的a存在于Linux，Windows里面是lib windows下gcc不都是用的.a库吗？ 你是说这些库是“开发工具”提供的？不是很明白 你是说C运行时库基本上（或者大部分）都是系统调度相关的吗？ 去哪里查询这些函数？

引用 1 楼 SuperDay 的回复:什么意思？C运行库其实分成两种，一种是系统调用，类似进程 底层IO这样的，还有一种是函数库，一般使用的时候不做区分，里面包含的内容非常多，平常用到的输入输出、数学运算很多种类 这些库是由谁提供的？微软吗？linux上有吗？ 他提供这些库做什么？是为了供所有程序使用，类似Windows API这样的系统级基础API吗？ 这些库是专门给用C语言的程序提供的吗？ 去哪里可以下载这些库文件和头文件？有.a库吗？ 它有哪些函数，可以去哪里查询？


Question: C语言codeblocks谁挂科了 补上自己思路

希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

#include <stdio.h> #include <stdlib.h>  #define MAX_STU_NUM     64  int main() {      int cls, people;     int score, pass_num;     int num[MAX_STU_NUM];     int i, j, k, fail_idx;      scanf("%d", &cls);      for (i = 0; i < cls; i++) {         scanf("%d", &people);         pass_num = 0;         fail_idx = 0;         for (j = 0; j < people; j++) {             scanf("%d", &score);             if (score < 60)                 num[fail_idx++] = j+1;             else                 pass_num++;         }         if (pass_num == people) {             printf("All passed!\n");             continue;         }         k = 0;         while (k < fail_idx) {             printf("%d ", num[k]);             k++;         }         putchar(10);     } #if 0     int k,i,j;     int n, sum,f,a[1000];//n考试场数，k考试人数，sum及格人数，f分数，     scanf("%d",&n);     for(i=0;i<n;i++)     {         sum=0;         scanf("%d", &k);         for(j=0;j<k;j++)         {             scanf("%d",&f);             if(f<60)                 a[sum]=j+1;             else                 sum++;         }         if(sum==k)             printf("all passed");         else         {             for(j=1;j<sum;j++)             {                 printf("%d ",a[j]);             }         }         printf("\n");     } #endif     return 0; }  供参考～  可以把people改成stu，这样命名可能会更好些～


Question: C语言，链表，在某个指定的位置插入一个节点，运行结果没有插入，经过检测，执行了语句，但是结果却没有写进去，问题出在哪里？求指教！

在纸上画图，这是我的经验。

引用 6 楼 qq_45814390的回复:[quote=引用 4 楼 SuperDay 的回复:] 但是你pHead这个变量并没有改变呀，所以一种做法是偷偷的把pHead信息全部换了         q = p;         pHead->pNext = pNew;         pNew->pNext = q; 如果把p换成pHead->pNext，这样可以插到头结点的位置 但是，我试插到尾节点后面的时候，程序就崩了，会一直输出插入的那个数 这个函数有太多问题了[/quote] 嗯，写程序就是要耐心调试的呀

引用 4 楼 SuperDay 的回复:但是你pHead这个变量并没有改变呀，所以一种做法是偷偷的把pHead信息全部换了         q = p;         pHead->pNext = pNew;         pNew->pNext = q; 如果把p换成pHead->pNext，这样可以插到头结点的位置 但是，我试插到尾节点后面的时候，程序就崩了，会一直输出插入的那个数 这个函数有太多问题了

楼主的这个插入函数有问题，比如如果插入的位置是头结点的位置，那么新节点，即头结点怎么告诉调用函数（比如main函数）， 即如果插入的位置是头位置，不能把新链表的头返回或告知调用函数～

引用 2 楼 SuperDay 的回复:首节点都没替换掉，你怎么能算是插入呢？或者可以把值替换一下         q = p;         p = pNew;         pNew->pNext = q; 这不是已将把新增的节点变成了首节点了吗？

首节点都没替换掉，你怎么能算是插入呢？或者可以把值替换一下

第13行到21行 如果不是插在首节点的位置，可以顺利的插入，但是插入的是首节点位置，数据就写不进去，但是检测后，那段代码确实被执行了，想了好久，一直没想通，求大神指教下。 谢谢！！！


Question: C语言运算

引用 7 楼 SuperDay 的回复：出这种题的老师多了这是社会的悲哀我也这么觉得

引用 6 楼 哈撒keyi 的回复：你可以这样读就简单了：x=x+ (-(z--)-y）; 建议查看一下运算符的优先级谢谢

出这种题的老师多了这是社会的悲哀

引用 2 楼 自信男孩 的回复：这样的表达式要考虑结合的优先级～如果不好区分，建议以后不要写这样的代码～可以分开写题目这样出，我目前还不会编程序

引用 1 楼 user-5 的回复：2大佬，教教我咋算的呗


Question: 二维数组求平均值哪里错了，结果应该是85，73，95

数组下表是从0开始的。楼主的数组操作越界访问了。

sum_pa  数组下标从0开始，0--2 你越界了。。 for (j = 0; j < 3;  j++)


Question: 关于C语言在linux下进行编译的一个疑惑，请大牛指点下~ 感激不尽

C语言没有强制要求函数原型的，如果没有声明，缺省认为函数是返回int的，参数只要保证入栈出栈次序正确就可以了。你这几个函数刚好都是返回int，就没问题了，如果是其它类型的，就不可以了


Question: 一道C语言的题，麻烦具体代码谢谢您！！！

引用 8 楼 wowpH的回复:总字符数，已经统计出来了，忘记输出了。 我弄出来了谢谢您！！实在不好意思哈是我有点憨

对不起是我的问题，是我没搞明白，因我是真的没运行出来，然后我语气有点问题真的对不起ORZ

总字符数，已经统计出来了，忘记输出了。

好像我给个假的代码给你，谁给我钱似的。

引用 4 楼 wowpH的回复:引用 3 楼 weixin_45621398 的回复:这是C语言嘛？我感觉不像啊ORZ像不像你用运行一下就知道了。 我用VS运行了，运行不出来

引用 2 楼 wowpH的回复:#include <stdio.h> #include <stdlib.h> #define MAX_CHAR 30 typedef struct node { 	char ch; 	unsigned time; }Letter; Letter letter[MAX_CHAR]; int compare(const void* a, const void* b); int main(void) { 	char ch; 	int letter_num = 0; 	int total_num = 0; 	while ((ch = getchar()) != '\n') { 		int i; 		for (i = 0; i < letter_num; ++i) { 			if (letter[i].ch == ch) { 				++letter[i].time; 				break; 			} 		} 		if (i == letter_num) { 			letter[letter_num].ch = ch; 			letter[letter_num].time = 1; 			++letter_num; 		} 		++total_num; 	} 	qsort(letter, letter_num, sizeof(Letter), compare); 	for (int i = 0; i < letter_num; ++i) { 		printf("char '%c' (", letter[i].ch); 		printf("time=%2d ", letter[i].time); 		printf("percent=%.2lf)\n", letter[i].time * 1.0 / total_num); 	} 	return 0; } int compare(const void* a, const void* b) { 	Letter* aa = (Letter*)a; 	Letter* bb = (Letter*)b; 	return (*aa).time > (*bb).time ? -1 : 1; }  这是C语言嘛？我感觉不像啊ORZ

先自己尝试写一下，调试一下，有问题再来问，这样才能进步。。


Question: 改错题求大佬

不明白的可以考虑通过输出验证一下，加一些调试打印语句

直接贴代码吧～

这个图流弊了。。。发帖之前自己预览一下不好吗 CSDN论坛新手指南


Question: 逆序链表填空

#include<stdio.h> #include<stdlib.h> struct node{ 	char data; 	struct node* link; }*head;  void ins(struct node *q){ 	if (head == NULL){ 		q->link = NULL; 		head = q; 	} 	else{ 		q->link = head; 		head = q; 	} }  int main(void) { 	char ch; 	struct node* p; 	head = NULL; 	while ((ch = getchar()) != '\n'){ 		p = (node*)malloc(sizeof(node)); 		p->data = ch; 		ins(p); 	} 	p = head; 	while (p != NULL){ 		printf("%c", p->data); 		p=p->link; 	} 	return 0; }


Question: 已知一个二维数组：{{14,26,18,17},{24,8,21,37},{19,31,22,16},{7,8,11,9}}，将每行的最大元素求出组成一个一维数

你这是直接输出数字了，不是组成一个数组

蓝鹅你并没有定义一个新的一维，并把元素放进去啊！

j=3是赋值号 改成j==3


Question: C语言编程 codeblocks奇偶校验

希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

实际中的奇偶校验可以通过移位来实现取每一位，当然这个题目没有必要。 思路：可以做一个标识，比如令其初始值为0，碰到一个1就在0、1之间翻转。

贴出你的代码。CSDN论坛新手指南


Question: C语言 codeblocks编程谁挂科了？

你的sum弄混了。一会儿表示及格人数，一会儿表示不及格人数。

引用 6 楼 Programmer_Shaw的回复:#include <stdio.h> #include <stdlib.h>  int main() {     int n,k,i,j,sum,f,a[1000];//n考试场数，k考试人数，sum及格人数，f分数，     scanf("%d",&n);     for(i=0;i<n;i++)     {         sum=0;         scanf("%d",&k);         for(j=0;j<k;j++)         {             scanf("%d",&f);             if(f<60)               a[sum]=j+1;             else               sum++;         }         if(sum==k)             printf("all passed");         else         {             for(j=1;j<sum;j++)                 {                  printf("%d ",a[j]);                 }         }         printf("\n");     }     return 0; } 测试前三组数据对了 后面一组出问题了

引用 2 楼 Programmer_Shaw 的回复:[quote=引用 1 楼 user-5的回复:]楼主，我是乌鸦嘴，你这样下去会挂科的 这个自己也尝试的写了 没对  所以，看看论坛大佬的思路[/quote] 那把你写的贴出来吧

自己没写对不要紧，要尝试修改，调试 代码贴出来，看看那里有问题 每次大家帮你写了，99%挂科。。。哈

引用 2 楼 Programmer_Shaw 的回复:[quote=引用 1 楼 user-5的回复:]楼主，我是乌鸦嘴，你这样下去会挂科的 这个自己也尝试的写了 没对  所以，看看论坛大佬的思路[/quote]  贴出来啊，大佬写你这种代码？

引用 1 楼 user-5的回复:楼主，我是乌鸦嘴，你这样下去会挂科的 这个自己也尝试的写了 没对  所以，看看论坛大佬的思路

楼主，我是乌鸦嘴，你这样下去会挂科的


Question: 帮我看看注释对不对，错了的话帮我改改

这样的排版，不是只改几个地方了，要全改的。建议你做好排版～

二进制文件。CSDN论坛新手指南

代码格式。。。你这个太乱。。整理一下吧 这样。  int main() {     return 0; }

特别是指针部分的注释


Question: 商场实行新的幸运抽奖规则：

引用 1 楼 user-3的回复:麻烦图片摆正。CSDN论坛新手指南 没办法就只能这样了。。。。。。。。

麻烦图片摆正。CSDN论坛新手指南


Question: 在100-999之间提取质数并且以8个一行输出吗？

引用 2 楼 自信男孩 的回复：就是求素数的，网上有太多的例子，可以自己找一下，改一改，改成符合你的要求的～ 不是很难的问题～谢谢，正在尝试了

引用 1 楼 qq_45798109 的回复：先自己写一下吧，可以把大致思路写成伪代码，然后看看自己能实现到哪一步，是在走不下去了再说吧好的，谢谢了


Question: 求解

建议放在具体代码里。 ii+1；ii++；ii=3；a[i][ii]=5 除了第一个，其他都是赋值语句，这些应该没什么好解释的～

ii+1； 此语句无意义吧 ii++；  将ii的值加1 ii=3； 将ii赋值为3 a[i][ii]=5   将 a[i][ii]赋值为5.。 这些都不懂，建议从头学起吧，看看最基础的东西。


Question: 这个怎么编，看不懂

高中的数学知识，你如何确定一个点不在园外？带入圆方程看是否小于等于半径的平方。这道题就是模拟一下这个方程

哪里不懂？  CSDN论坛新手指南


Question: 我的天

引用 14 楼 qq_45444545 的回复:实在抱歉，，我两次说抱歉了，我语气是过了点，两次抱歉应该可以平息这事了。我俩没事，只是在聊天而已。用不上“平息”这个词。

引用 13 楼 liups 的回复:关于谦虚，没说你。关于新手和老手：我是老手，但我确实不是高手。 谦虚：是说这些真正的新手和学生，你们是来请教的，谦虚点会死吗？象我这种老手但非高手的，出现在这种地方且很活跃，肯定是有特殊的原因的，一旦我们这种都没有兴趣再吊下去，这个论坛或者版块就完蛋了，你们将无人给回答问题，大家自娱自乐吧 没人的话，那就该论坛负责人着急了。

实在抱歉，，我两次说抱歉了，我语气是过了点，两次抱歉应该可以平息这事了。

引用 12 楼 wowpH 的回复:[quote=引用 11 楼 liups 的回复:] 现在经常在这版块回帖的也没有几个了，就是那些版主也很少出现，你们这些初学者或者学生不谦虚、不珍惜，估计也只有换一个地方去展现你们的骄傲了 我想也算是写给我自己的吧。说出来头头是道，实际上我也是个新手。  呆的时间也确实只看到那么几位大哥。貌似错过了论坛的辉煌时间。  谦虚这个问题，确实能看到谦虚的，我还真做不到。。。不过这话我好像读到了些什么。另外，我的不当的回答大佬也改了一些。还是谢谢了。[/quote] 关于谦虚，没说你。关于新手和老手：我是老手，但我确实不是高手。 谦虚：是说这些真正的新手和学生，你们是来请教的，谦虚点会死吗？象我这种老手但非高手的，出现在这种地方且很活跃，肯定是有特殊的原因的，一旦我们这种都没有兴趣再吊下去，这个论坛或者版块就完蛋了，你们将无人给回答问题，大家自娱自乐吧

引用 11 楼 liups 的回复:现在经常在这版块回帖的也没有几个了，就是那些版主也很少出现，你们这些初学者或者学生不谦虚、不珍惜，估计也只有换一个地方去展现你们的骄傲了 我想也算是写给我自己的吧。说出来头头是道，实际上我也是个新手。  呆的时间也确实只看到那么几位大哥。貌似错过了论坛的辉煌时间。  谦虚这个问题，确实能看到谦虚的，我还真做不到。。。不过这话我好像读到了些什么。另外，我的不当的回答大佬也改了一些。还是谢谢了。

引用 10 楼 wowpH 的回复:假装是律师函警告： 1、我在1楼的发言很好了，首先我回答了你的问题，其次给了你论坛的建议，不是强制的。而你只看到了我的指南，上面的小字你没看在眼里。 2、我特地看了你以前的帖子，一个没结。这一点原因我在博客说的很明了。官方的规则说的很浅显。 3、至于你的回复，除了“求学的新人”几个字沾边了（因为我回答了你的问题）。其他的就是诬陷（原谅我语文不好，只能想到这个词），其他的跟我半毛钱关系没有。 4、根据你的旧贴，很多人的回答你压根儿都没回复，俗话说（放个屁还有响儿（声儿）听）。至于原因，1：他答错了（粗略看了几个，这个概率不高），2：大家都懂得。 5、这个链接我不是第一次发（至少300次了，刚大致数了一下），这么多人都没见像你这个反应的。   再说我也没太生气，至少之前被气的更惨，你这已经很好了。其次我打了半天字，你就道歉了，我还是发出来算了。免得我白打字了。 现在经常在这版块回帖的也没有几个了，就是那些版主也很少出现，你们这些初学者或者学生不谦虚、不珍惜，估计也只有换一个地方去展现你们的骄傲了

引用 8 楼 qq_45444545 的回复:抱歉啊，刚语气过了点，但我不喜欢那么麻烦。 你不麻烦，专门让别人麻烦，而且是给你回答，帮助你的人麻烦，对吧

抱歉啊，刚语气过了点，但我不喜欢那么麻烦。

引用 6 楼 qq_45444545 的回复:新手只是来求问题的而不是做成那么工整文案，再说我也没有发什么不良信息和图片，我就是个求学的新人。如果这也管你这个软件还不如不要发布。 过了哈！1楼只是为了更高效地提问与回答，整理了一些技巧，你这么大反应干什么？你就想一下1楼说的那些有没有道理吧

pust->puts a\b->a/b

a\b   改成  a/b pust是什么东西。。 报错已经提示了  pust 没有申明。

a\b是什么东西？  CSDN论坛新手指南

引用 4 楼 自信男孩 的回复:去掉前两个printf中的a和b。因为printf中没有对应%d对应a或b参数～ a/b不是\。 当然还有puts拼写错误


Question: 在这两中断函数如何加一个流水灯主函数

希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html


Question: visual studio64位用法

楼主啊，发帖之前能自己预览一下再发吗

VS都是32位的，但是可以编译出64位应用，设置一下就好了

引用 2 楼 user-5 的回复:CSDN论坛新手指南 这个真的需要倒立观看了

CSDN论坛新手指南