Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 代码有误，样例只有第一个输出正确，不知错误在哪，求教

回复:
user: user-1
content: 引用 8 楼 forlorn pedestrian的回复:引用[quote]		c = (2 * i - 1) / i * x * b - (i - 1) / i * a; 请问为啥这里用i了，题目里不是给的n吗 我觉得，你把第三项和第1，2项的关系表达式写一下，就明白了

user: user-1
content: 公式，是你算第n项，仅仅算n项，带进去n才有效。 这个算法是，先算第0和第1项，然后根据0，1项，算出第2项。。。然后根据第1，2项，算出第3项。。。依次类推 算出第n项。。。 那么，算第2项时，公式里n=2，是不是就没毛病了

user: user-1
content: 引用 8 楼 forlorn pedestrian的回复:引用[quote]		c = (2 * i - 1) / i * x * b - (i - 1) / i * a; 请问为啥这里用i了，题目里不是给的n吗 算第n项的时候，代n进去没错。 但你这个算法是，先算第0项和第一项，然后算第二项，依次类推，算出第n项。。 算第三项的表达式时，公式里n=3 算第四项时，公式里n=4

user: user-2
content: 引用 11 楼 自信男孩的回复:[quote=引用 2 楼 weixin_46056697 的回复:]我不知道勒让德公式是怎样的，你的代码错误应该是n定义成浮点型了，改成定义整型就好了 你改一下试试？问题没看到重点，建议自己试试～[/quote] 确实，我的错，没注意

user: user-3
content: 引用 2 楼 weixin_46056697 的回复:我不知道勒让德公式是怎样的，你的代码错误应该是n定义成浮点型了，改成定义整型就好了 你改一下试试？问题没看到重点，建议自己试试～

user: user-3
content: 引用 9 楼 自信男孩 的回复:#include<stdio.h>  int main() {     //float x, /*n,*/ c, a, b;     double x, /*n,*/ c, a, b;     int n, i;      //scanf_s("%f%d", &x, &n);     scanf("%lf%d", &x, &n);     if (n == 0) {         c = 1;         printf("%.2lf", c);         return 0;     }     if (n == 1) {         c = x;         printf("%.2lf", c);         return 0;     }     a = 1.0;     b = x;     for (i = 2; i <= n; i++) {         //c = (2 * i - 1)*1.0 / i * x * b - (i - 1) *1.0/ i * a;         c = (2 * i - 1)*1.0 / i * x * b - (i - 1) *1.0/ i * a;         a = b;         b = c;     }     printf("%.2lf", c);     return 0;  } 供参考～ 把scanf改成scanf_s吧

user: user-3
content: #include<stdio.h>  int main() {     //float x, /*n,*/ c, a, b;     double x, /*n,*/ c, a, b;     int n, i;      //scanf_s("%f%d", &x, &n);     scanf("%lf%d", &x, &n);     if (n == 0) {         c = 1;         printf("%.2lf", c);         return 0;     }     if (n == 1) {         c = x;         printf("%.2lf", c);         return 0;     }     a = 1.0;     b = x;     for (i = 2; i <= n; i++) {         //c = (2 * i - 1)*1.0 / i * x * b - (i - 1) *1.0/ i * a;         c = (2 * i - 1)*1.0 / i * x * b - (i - 1) *1.0/ i * a;         a = b;         b = c;     }     printf("%.2lf", c);     return 0;  } 供参考～

user: user-0
content: 引用[quote]		c = (2 * i - 1) / i * x * b - (i - 1) / i * a; 请问为啥这里用i了，题目里不是给的n吗

user: user-1
content: 1.a,b赋初值不应该在for循环里，否则a,b一直被赋初值，你的递归就无效了； 2.不应该带n去算，因为计算P2时，n=2,计算P3时，n=3....所以带进去i比较合适 3.如果带进去i,那么浮点数运算i应该也为浮点数，否则运算不出正确结果

user: user-1
content: #include<stdio.h> int main() { 	float i; 	float x, c, a,b; 	int n; 	scanf_s("%f%d", &x, &n); 	a = 1; 	b = x; 	if (n == 0) 		c = 1; 	else if (n == 1) 		c = x; 	else 		for (i = 2; i <= n; i++) { 			c = (2 * i - 1) / i * x * b - (i - 1) / i * a; 			a = b; 			b = c; 		} 	printf("%.2f", c); 	return 0; }

user: user-4
content: 用嵌套吧 float polya(float n, float x) { 	float sum; 	if (n == 0) 		sum = 1; 	else if (n == 1) 		sum = x; 	else if (n>1) 		sum = ((2 * n - 1)*x*polya(n - 1, x) - (n - 1)*polya(n - 2, x)) / n; 	return sum; } int main() { 	float x, n, c, a, b; 	int i; 	scanf_s("%f%f", &x, &n); 	c = polya(n, x); 	printf("%.2f", c); 	return 0; }

user: user-2
content: 我不知道勒让德公式是怎样的，你的代码错误应该是n定义成浮点型了，改成定义整型就好了

user: user-1
content: for循环错了，虽然你计算c后，给a，b赋值，但下一次循环后，a,b还是1和x
user-0 提问: C语言（非C++，基础C）  结构体数组的成员指针的赋值 问题

回复:
user: user-0
content: 引用 7 楼 自信男孩的回复:c1为分配空间，是一个野指针，直接scanf可能会出现段错误。 c2是一个char普通变量，用%s会导致越界，因为%s会考虑加上'\0'，输入了M/F之后再把'\0'放哪里。 啊啊啊，确实，仔细一想确实都是错误，感谢大神指点（我还是太弱了

user: user-1
content: c1为分配空间，是一个野指针，直接scanf可能会出现段错误。 c2是一个char普通变量，用%s会导致越界，因为%s会考虑加上'\0'，输入了M/F之后再把'\0'放哪里。

user: user-2
content: 引用 3 楼 user-3 的回复:[quote=引用 1 楼 一颗白面馒头的回复:]scanf("%s",&c1);这句话有问题，c1本来就是个指针，你还取地址，&c就相当于char **类型了，可以改成scanf("%s", c1); 感觉不止这个问题，他结构体里面name也是指针，后面给name赋值的时候也有问题（供参考）[/quote] 有这个感觉，这里面指针用的好乱

user: user-0
content: 引用 3 楼 user-3的回复:[quote=引用 1 楼 一颗白面馒头的回复:]scanf("%s",&c1);这句话有问题，c1本来就是个指针，你还取地址，&c就相当于char **类型了，可以改成scanf("%s", c1); 感觉不止这个问题，他结构体里面name也是指针，后面给name赋值的时候也有问题（供参考）[/quote] 其实这个题老师是让用C++编的，但是标准C里面没有对字符串直接声明的数据类型，之前对name的定义是数组，但是因为是先确定数组的大小，我就改成了指针类型

user: user-0
content: 引用 1 楼 一颗白面馒头的回复:scanf("%s",&c1);这句话有问题，c1本来就是个指针，你还取地址，&c就相当于char **类型了，可以改成scanf("%s", c1); 上完课回去试试

user: user-3
content: 引用 1 楼 一颗白面馒头的回复:scanf("%s",&c1);这句话有问题，c1本来就是个指针，你还取地址，&c就相当于char **类型了，可以改成scanf("%s", c1); 感觉不止这个问题，他结构体里面name也是指针，后面给name赋值的时候也有问题（供参考）

user: user-3
content: 建议重新看看指针的知识（感觉你这些指针定义 赋值啥的很乱很乱）

user: user-2
content: scanf("%s",&c1);这句话有问题，c1本来就是个指针，你还取地址，&c就相当于char **类型了，可以改成scanf("%s", c1);
user-0 提问: 在vscode上运行正常但在pta上显示段cuo'wu

回复:
user: user-1
content: 引用 2 楼 weaker1209 的回复:可以给我用动态数组检查鞍点的完整代码让我跑一下吗，不是很理解 你自己先研究一下判断鞍点的函数，根据形参，要什么参数传入什么参数就可以了

user: user-0
content: 可以给我用动态数组检查鞍点的完整代码让我跑一下吗，不是很理解

user: user-1
content: int n, *max, *min, **a;     cin>>n;      if (n < 1 || n > 6) {         cout<<"Input error!"<<endl;         return -1;     }     max = new int [n];     min = new int [n];      a = new int *[n];     for (int i = 0; i < n; i++)         a[i] = new int [n];      for (int i = 0; i < n; i++)         for (int j = 0; j < n; j++)             cin>>a[i][j];   用动态数组  检查鞍点的方法：  void check_saddle_point(int (*point)[2], int (*array)[COL], int row, int col) {     int i, j, k, cnt = 0;     int row_idx, col_idx;     int max_row, min_col;      for (i = 0; i < row; i++) {         max_row = array[i][0];         col_idx = 0;         /* find max value in row */         for (j = 1; j < COL; j++)             if (max_row < array[i][j]) {                 max_row = array[i][j];                 col_idx = j;             }          /* Find min value in col */         min_col = array[i][col_idx];         row_idx = i;         for (k = 0; k < row; k++)             if (min_col > array[k][col_idx]) {                 min_col = array[k][col_idx];                 row_idx = k;             }         /* Check the condition*/         if (row_idx == i && min_col == max_row) {             point[cnt][0] = row_idx;             point[cnt][1] = col_idx;             cnt++;         }      } }
user-0 提问: C 中 fopen的文件名使用char数组的问题

回复:
user: user-1
content: strcmp当比较的两个字符串不同的时候返回1或-1，当相同的时候返回0.  因此楼主的说的相同是不对的，代码恰恰提示的是data_name和./data/0.txt字符串不相同。

user: user-0
content: 我自己回复一下我自己吧，我已经debug出问题所在了  主要是我的txt文本是windows写的，传到Linux系统，然后换行符是\r\n，造成去掉最后一个\n后仍有一个\r去占据字符的长度，所以造成bug。  抱歉，浪费巨佬的时间了。

user: user-2
content: 问题出在你没放代码的地方 readvariable() 里面，因为 ./data/0.txt 后面是 \r\n ,在win下正常去掉 \r\n 正常，在Linux下只去了 \n ,导致你的字符串为 ./data/0.txt\r

user: user-1
content: 引用 2 楼 calmuse 的回复:[quote=引用 1 楼 自信男孩 的回复:]strcmp当比较的两个字符串不同的时候返回1或-1，当相同的时候返回0.  因此楼主的说的相同是不对的，代码恰恰提示的是data_name和./data/0.txt字符串不相同。 非常感谢，是我记错了strcmp的函数功能，的确两个不相等，大佬，我能再多问一下吗？ 我用strlen看了一下，"./data/0.txt"的长度是12，而我从文本中读取出来的data_name是13，因为data_name最后我加了一个\0 我不明白的是，我看书上都说字符串最后会用\0作为结尾，为什么我在Linux上跑，"./data/0.txt"的长度就是12，不是13[/quote] strlen函数是不计算'\0'的，如果不同系统下不一样的，建议楼主看一下行结束符是不是不一样。把字符串打印出来看看有什么区别～

user: user-0
content: 引用 1 楼 自信男孩 的回复:strcmp当比较的两个字符串不同的时候返回1或-1，当相同的时候返回0.  因此楼主的说的相同是不对的，代码恰恰提示的是data_name和./data/0.txt字符串不相同。 非常感谢，是我记错了strcmp的函数功能，的确两个不相等，大佬，我能再多问一下吗？ 我用strlen看了一下，"./data/0.txt"的长度是12，而我从文本中读取出来的data_name是13，因为data_name最后我加了一个\0 我不明白的是，我看书上都说字符串最后会用\0作为结尾，为什么我在Linux上跑，"./data/0.txt"的长度就是12，不是13
user-0 提问: c语言数组

回复:
user: user-1
content: total是整数不能用%.2f输出的，但是total/5.0是按照浮点数除法计算的，因此得到的是浮点数。所以用%.2f输出是没问题的～

user: user-2
content: printf()函数当输出的是浮点数时，[.precision]中的precision表示输出的小数的位数。.2f表示输出的浮点数包含2位小数。对于printf()函数的详细使用方法，请参考《C++中printf()函数的用法10-9》 希望能够帮到您！

user: user-3
content: 用.2f是因为total/5.0，注意是5.0

user: user-4
content: 输出的是total/5.0的值（平均数），5.0是浮点数，结果也会转成浮点数，保留2位小数

user: user-5
content: total是整数，total/5.0，就是双精度浮点数，%.2f意思保留两位小数输出
user-0 提问: 想求1到10的阶乘之和但运行程序老是得不到我要的结果，麻烦各位帮忙看一下问题出在哪了，现在烦恼着，谢谢大家了

回复:
user: user-1
content: ~~~~~仅供参考

user: user-1
content: # include<stdio.h> int main(void) { 	int  i,j,con=0; 	for(i=1;i<=10;i++) 	{ 		int sum=1; 		for(j=1;j<=i;j++) 		{ 			sum=sum*j; 		} 		printf("%d\n",sum); 		con=con+sum; 	} 	printf("%d\n",con); 	return 0;  }

user: user-2
content: #include <stdio.h>  int main(int argc, char* argv[]) {    int a,b,c,d=0;    for(a=1; a<=10; a++)     {       c=1;       for(b=1; b<=a; b++)            c = c * b;//用c来计算阶乘       d+=c; //用d来计算和     }   printf("%d\n",d);   system("pause");   return 0; }

user: user-3
content: #include<stdio.h> int main() {     int a,b, k;     unsigned long c = 0;      for(a=1;a<=10;a++)     {         k = a;         for(b=1;k>0;k--)         {  b*=k;          }         c=c+b;     }     printf("%lu\n",c);     return 0; } 供参考～  二层循环里对a进行的修改～
user-0 提问: c语言写的程序，能编译运行，但是确无法在屏幕上显示结果

回复:
user: user-0
content: 哦哦，懂了，谢啦

user: user-1
content: 引用 2 楼 Am0_0mA 的回复:感谢！把x初始化和EOF改成'\n'后能输出结果了。 不过我不是很懂为啥缺少EOF输入。C程序设计语言这本书里面讲EOF是getchar函数在没有输入时返回的一个特殊值。当读取到文本流最后，已经没有下一个字符时，getchar函数不就应该返回EOF了嘛。为什么还要手动输入EOF作为结束符呢。 对EOF是文件末尾的标识符，所以你需要输入EOF，'\n'是行结束符，不是文件末尾～

user: user-0
content: 感谢！把x初始化和EOF改成'\n'后能输出结果了。 不过我不是很懂为啥缺少EOF输入。C程序设计语言这本书里面讲EOF是getchar函数在没有输入时返回的一个特殊值。当读取到文本流最后，已经没有下一个字符时，getchar函数不就应该返回EOF了嘛。为什么还要手动输入EOF作为结束符呢。

user: user-1
content: x没有初始化，另外，EOF输入linux 用ctrl+d，Windows下用ctrl+z试试 楼主是缺少输入EOF，或者楼主缺少'\n'。  建议楼主把EOF改成'\n'试试～
user-0 提问: linux c下 const 用法问题。

回复:
user: user-1
content: 会修改，不是给予提示。因为const修饰的是xyz数组，不能通过xyz数组去修改，但是其他的变量（指针）是可以修改的，不受限制。const修饰的并不是只读的内存。

user: user-2
content: 给你段代码，跑一下就知道了  int main() {     const int a[] = {1, 2};     int *p = (int*)a;     //a[0]=2;     *p = 2;     printf("%d\n", a[0]);     return 0; }

user: user-3
content: 修改啊，const 只是编译器级的不可修改，实际内存读写权限是系统相关的
user-0 提问: 反猜数游戏编程怎么做

回复:
user: user-0
content: 引用 1 楼 user-1的回复:这个比较难，有时间我尝试下 我印象中：猜数字游戏，中的数字，是不重复的。 这是作业马上要交了，我死定了

user: user-1
content: 这个比较难，有时间我尝试下 我印象中：猜数字游戏，中的数字，是不重复的。
user-0 提问: CommandDatatable[0]代表什么？

回复:
user: user-1
content: CommandDatatable[0]==0XFF 这是是CommandDatatable数组（或缓存）的第一个字节（元素）与0xff比较，判断是否相等。

user: user-2
content: 一个字节8位，可以表示0到0xff,具体什么意思，要看他的程序要求啊

user: user-0
content: 引用 1 楼 真相重于对错 的回复:这是个无符号字符数组啊相当于一个字节数组，==0Xff表示这个数组第一个元素是否为0xFF，程序中用到7个case，表示它有7种可能，不是要求这个字符数组一定要有7个数据 还有就是编译时一直显示到达不了break，也没有死循环

user: user-0
content: 引用 1 楼 真相重于对错 的回复:这是个无符号字符数组啊相当于一个字节数组，==0Xff表示这个数组第一个元素是否为0xFF，程序中用到7个case，表示它有7种可能，不是要求这个字符数组一定要有7个数据 这个数组为什么是5个字节？0xFF是什么意思？初始化的意思吗？

user: user-0
content: 引用 7 楼 自信男孩 的回复:[quote=引用 6 楼 47897566 的回复:][quote=引用 5 楼 自信男孩 的回复:]CommandDatatable[0]==0XFF 这是是CommandDatatable数组（或缓存）的第一个字节（元素）与0xff比较，判断是否相等。 有什么作用呢？[/quote] 判断数据用的吧，比如协议数据按照什么格式，对端收到之后可以根据初始[0]值是否符合协议要求～[/quote] 明白了，感谢

user: user-3
content: 你得看 CommandDatatable 数据哪里读出来的啊，这代码能看出啥？？

user: user-1
content: 引用 6 楼 47897566 的回复:[quote=引用 5 楼 自信男孩 的回复:]CommandDatatable[0]==0XFF 这是是CommandDatatable数组（或缓存）的第一个字节（元素）与0xff比较，判断是否相等。 有什么作用呢？[/quote] 判断数据用的吧，比如协议数据按照什么格式，对端收到之后可以根据初始[0]值是否符合协议要求～

user: user-0
content: 引用 5 楼 自信男孩 的回复:CommandDatatable[0]==0XFF 这是是CommandDatatable数组（或缓存）的第一个字节（元素）与0xff比较，判断是否相等。 有什么作用呢？

user: user-2
content: 这是个无符号字符数组啊相当于一个字节数组，==0Xff表示这个数组第一个元素是否为0xFF，程序中用到7个case，表示它有7种可能，不是要求这个字符数组一定要有7个数据
user-0 提问: 输出指定月份的天数，敲出代码输出结果有误，但我不知道错哪了，求指导

回复:
user: user-1
content: 引用 楼主 forlorn pedestrian的回复:题目内容：输入年、月，输出这个月一共有多少天  输入：两个整数    输出： 对应月份天数  样例1：输入 2018 2    输出 28 #include<stdio.h> int main() { 	int a, b, c, d; 	scanf("%d%d", &a, &b); 	if ((a % 4 == 0) && (a % 100 == 0) || (a % 400 == 0)){ 		if (b == 2) 			c = 29; 		if (b == 1 || b == 3 || b == 5 || b == 7 || b == 8 || b == 10 || b == 12) 			c = 31; 		if (b = 4 || b == 6 || b == 9 || b == 11) 			c = 30; 	} 	else if (b == 2); 		c = 30;	 		 if (b == 1 || b == 3 || b == 5 || b == 7 || b == 8 || b == 10 || b == 12) 			c = 31; 		else if (b = 4 || b == 6 || b == 9 || b == 11)  			c = 30; 		else	printf("%d", c); 		return 0; } a % 100 == 0改成a％100！＝0；  if (b = 4 || b == 6 || b == 9 || b == 11)中b＝＝4；   else if (b == 2); c = 30;	 这里c＝28；  else	printf("%d", c); 这里的else去掉

user: user-2
content: //样例1：输入 2018 2    输出 28 #include<stdio.h> int main() {  #ifdef IF_ELSE     int a, b, c, d;     scanf("%d%d", &a, &b);     //if ((a % 4 == 0) && (a % 100 == 0) || (a % 400 == 0)){     if (((a % 4 == 0) && (a % 100 != 0)) || (a % 400 == 0)){         if (b == 2)             c = 29;         if (b == 1 || b == 3 || b == 5 || b == 7 || b == 8 || b == 10 || b == 12)             c = 31;         if (b = 4 || b == 6 || b == 9 || b == 11)             c = 30;     }     //else if (b == 2);     else if (b == 2)     c = 30;     if (b == 1 || b == 3 || b == 5 || b == 7 || b == 8 || b == 10 || b == 12)         c = 31;     else if (b = 4 || b == 6 || b == 9 || b == 11)         c = 30;     else         printf("%d", c);  #else     int year, month, days = 0;     int leap = 0;      scanf("%d%d", &year, &month);      if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))         leap = 1;      switch (month) {         case 1:         case 3:         case 5:         case 7:         case 8:         case 10:         case 12:             days = 31;             break;          case 2:             days = 28 + leap;             break;          case 4:         case 6:         case 9:         case 11:             days = 30;             break;          default:             printf("Not support!\n");             break;     }      printf("%d", days); #endif     return 0; } 供参考`  有两个问题：闰年判断和if后面多一个分号；  另外，这个问题用switch case比较好一些，供参考～

user: user-3
content: 引用if ((a % 4 == 0) && (a % 100 == 0) || (a % 400 == 0))闰年判断这句有误，a%100 !=0。这句引用if (b = 4 || b == 6 || b == 9 || b == 11)有误，b==4。整体逻辑判断错了，修改如下：#include <stdio.h>  int main(int argc, char* argv[]) {     int a=0, b=0, c=0;     printf("请输入年月：");     scanf("%d %d", &a, &b);     if (b == 2)       { if ((a % 4 == 0 && a % 100 != 0) || (a % 400 == 0))             {c = 29;}         else             {c = 28;}       }      else        if (b == 1 || b == 3 || b == 5 || b == 7 || b == 8 || b == 10 || b == 12)            { c = 31;}        else          if (b == 4 || b == 6 || b == 9 || b == 11)            { c = 30;}       printf("%d年%d月有%d天\n",a,b,c);      system("pause");      return 0; }

user: user-4
content: else if(b==2); //这里多了个分号 而且紧接着的c=30应该改成c=28  另外，else printf(“%d”, c) 前面的else去掉
user-0 提问: 求大神解答

回复:
user: user-1
content: a未定义，maxxx函数接收的数组是不是不是a而是其他呢？

user: user-0
content: 哦哦  明白了

user: user-2
content: i<a j<b c[i][j] 这里的a，b，c在哪里定义的？
user-0 提问: 为什么是按学号输出

回复:
user: user-0
content: 我已经找到问题了，谢谢你们啦

user: user-1
content: 就这些代码的话，第一个for连着第二个for循环那里就是给学号从大到小排序了，这可能就是他按学号输出的原因

user: user-2
content: 但从这些代码里看不出为什么来。提供更多的代码吧，另外，直接贴代码，不建议贴图片～
user-0 提问: 萌新求助！关于浮点数的输出

回复:
user: user-1
content: %.20lf指定了输出小数多少位？  https://blog.csdn.net/thanklife/article/details/53033071?utm_medium=distribute.pc_relevant_bbs_down.none-task-blog-baidujs-1.nonecase&depth_1-utm_source=distribute.pc_relevant_bbs_down.none-task-blog-baidujs-1.nonecase

user: user-2
content: 浮点数格式 http://bbs.csdn.net/topics/390676437

user: user-3
content: 是呀 浮点数输出根据精度不同 是会这样的  一般浮点数都是小数点后6位确保的 再后面的值就不一定是正确的了

user: user-4
content: printf("%6.2f".floatNum)：保留两位小数 说明：%6.2f 表明待打印的数（floatNum）至少占6个字符宽度（包括两位小数和一个小数点），且小数点后面有2位小数，小数点占一位，所以整数部分至少占3位。注意：这里的6是待打印的数至少占据的字符宽度，包括两位小数（如果小数不够两位用0补位，例如100.1打印出来为100.10）和一个小数点，所以整数部分至少占3个字符宽度。  1.单精度实数的有效位数一般为7位，输出6位小数，超出有效位数输出就是错误的。 2.双精度数有效位数一般为16位，输出6位小数，超出有效位数可能截断或错误值。 3.关于保留小数点后有效位数四舍五入，原则保留0位小数的时候，只要小数点后第一位>=5，就可以进位，但是保留1位或者2位等等，保留小数的后一位要>5才可以进位，否则就舍去。

user: user-0
content: 引用 1 楼 user-4 的回复:printf("%6.2f".floatNum)：保留两位小数 说明：%6.2f 表明待打印的数（floatNum）至少占6个字符宽度（包括两位小数和一个小数点），且小数点后面有2位小数，小数点占一位，所以整数部分至少占3位。注意：这里的6是待打印的数至少占据的字符宽度，包括两位小数（如果小数不够两位用0补位，例如100.1打印出来为100.10）和一个小数点，所以整数部分至少占3个字符宽度。  1.单精度实数的有效位数一般为7位，输出6位小数，超出有效位数输出就是错误的。 2.双精度数有效位数一般为16位，输出6位小数，超出有效位数可能截断或错误值。 3.关于保留小数点后有效位数四舍五入，原则保留0位小数的时候，只要小数点后第一位>=5，就可以进位，但是保留1位或者2位等等，保留小数的后一位要>5才可以进位，否则就舍去。感谢😁
user-0 提问: 小白求问 关于用union共用体构造混合数组

回复:
user: user-1
content: 100个元素你都当做int就可以了（以占用空间最大的数据类型为主），int本来就可以存char，所以20个元素存int，20个存char完全没问题。

user: user-0
content: 引用 2 楼 qybao 的回复:union就是成员共享一块内存空间 比如 union {     int a;     char b; } 有a，b两个成员，但是因为空间是共享的，int的空间最大（4个字节），所以以它为准，a成员使用4个字节，b成员使用一个字节，b存在于a里面。如下图， 整个union的空间为@@@@ a @@@@ b @ 也就是a的第一个字节和b的内存空间重合 如果赋值b=1，内存变为 a 1@@@ b 1 如果赋值a=1，内存变为 a 0001 b 0 可见改变a可能会影响b（因为内存共有），同理改变b也可能会影响a 对比一下struct struct {     int a;     char b; } a和b是不共享空间的，所以整个结构体的空间是int的4个字节+char的1个字节=5个字节（先不考虑内存对齐，如果考虑对齐就是8个字节），内存分布如下图 整个struct的空间为@@@@@ a @@@@ b ？？？？@ ？表示不使用这些空间，也就是a和b没有重合的内存空间，a使用前4个字节，b使用后1个字节 如果赋值b=1，内存变为 a @@@@ b ？？？？1 如果赋值a=1，内存变为 a 0001 b ????1 可见改变a不影响b（因为a和b的内存独立），同理改变b也不影响a  所以union就是为了让成员共享一块内存空间，改变一个成员，其他成员也可能发生变化  所以 问题1，100个元素是union类型，每个元素可以存int或char，用户自己选择 比如 array[0].a=1;//存int array[1].b=‘a’;//存char  问题2 两个成员指a和b，a和b共享同一块内存  问题3 数据存储最小单元是字节（char），任何多字节的类型（其实就相当于char数组)都可以存字符串，只不过内存存储的值不同而已。 比如 int a; strcpy((char*)&a, “ab”); //int存字符串 printf(“%s”, &a); //打印字符串 所以你的array存字符串也没问题，只要控制好不内存越界就可以  问题4 你是怎么赋值的，上面说了，成员是共享内存空间的，给一个成员赋值可能会影响另外的成员，估计是你赋值不对。 那请问一下这100个数组元素的内存是针对元素分配的吗？就比如我可以放20个int类20个char类 这样可以吗？

user: user-2
content: 不可以自选，对于联合体，联合体的长度是有元素中占用空间最大的决定，比如第一个联合体有一个int，一个char，这两个元素共用一个内存，那就是int类型的长度，因为sizeof(int) > sizeof(char)

user: user-1
content: union就是成员共享一块内存空间 比如 union {     int a;     char b; } 有a，b两个成员，但是因为空间是共享的，int的空间最大（4个字节），所以以它为准，a成员使用4个字节，b成员使用一个字节，b存在于a里面。如下图， 整个union的空间为@@@@ a @@@@ b @ 也就是a的第一个字节和b的内存空间重合 如果赋值b=1，内存变为 a 1@@@ b 1 如果赋值a=1，内存变为 a 0001 b 0 可见改变a可能会影响b（因为内存共有），同理改变b也可能会影响a 对比一下struct struct {     int a;     char b; } a和b是不共享空间的，所以整个结构体的空间是int的4个字节+char的1个字节=5个字节（先不考虑内存对齐，如果考虑对齐就是8个字节），内存分布如下图 整个struct的空间为@@@@@ a @@@@ b ？？？？@ ？表示不使用这些空间，也就是a和b没有重合的内存空间，a使用前4个字节，b使用后1个字节 如果赋值b=1，内存变为 a @@@@ b ？？？？1 如果赋值a=1，内存变为 a 0001 b ????1 可见改变a不影响b（因为a和b的内存独立），同理改变b也不影响a  所以union就是为了让成员共享一块内存空间，改变一个成员，其他成员也可能发生变化  所以 问题1，100个元素是union类型，每个元素可以存int或char，用户自己选择 比如 array[0].a=1;//存int array[1].b=‘a’;//存char  问题2 两个成员指a和b，a和b共享同一块内存  问题3 数据存储最小单元是字节（char），任何多字节的类型（其实就相当于char数组)都可以存字符串，只不过内存存储的值不同而已。 比如 int a; strcpy((char*)&a, “ab”); //int存字符串 printf(“%s”, &a); //打印字符串 所以你的array存字符串也没问题，只要控制好不内存越界就可以  问题4 你是怎么赋值的，上面说了，成员是共享内存空间的，给一个成员赋值可能会影响另外的成员，估计是你赋值不对。

user: user-3
content: 你怎么写的？？？
user-0 提问: 有大佬知道这个报错怎么改吗，感谢

回复:
user: user-1
content: 问题不少 1 变量和结构体同名  student student[number]  2 c不支持用常量定义数组的长度 student student[number]  可以把number变成宏或用动态数组  3 student_average函数没有返回值  4 student_printf函数多了个f，和函数定义不一样
user-0 提问: 回文陷阱

回复:
user: user-1
content: #include<stdio.h> #include<math.h>  long long int back(long long int n);  int main(void) {     int i;     long long int n,b;     scanf("%lld",&n);     if(n==back(n))         printf("HW\n");     else     {         for(i=1;i<=10;i++)         {              b=back(n);             n=n+b;             if(n==back(n))             {                 printf("%d %lld\n", i, n);                 break;             }         }         if(i>10)             printf("NONE\n");     }      return 0; } long long int back(long long int n) {     //long long int len,i,d,s=0;     long long int s=0;     int len, i, d;     len=log10(n)+1;     printf("len = %d\n", len);     for(i=1;i<=len;i++)     {         d=n%10;         s=s*10+d;         n=n/10;     }     return s; } 供参考～  back参数和返回值有点问题，其他暂未发现问题～

user: user-1
content: 引用 3 楼 user-2 的回复:for(i=1;i<=10;i++) {  b=back(n); n=n+b; if(n==back(n)) { printf("%d %lld\n",i,n); break; }	 } if(i>10) printf("NONE\n"); 在你这个循环里i永远小于10，也就下面的if永远不会成立，建议改成如下代码（仅供参考） for(i=1;;i++) {  b=back(n); n=n+b; if(n==back(n)) { printf("%d %lld\n",i,n); break; }	 if(i>10) { printf("NONE\n"); break; } }   楼主这部分没问题，注意i <= 10当i> 10时就是退出循环了。  引用 4 楼 user-2 的回复:补充一下，形参和实参还是不要同名要好一些（虽然这个函数里没什么问题）  被你的一句话给误解了。楼主的没问题。因为for循环是提前退出还是执行完退出的问题。  你如果认为楼主的有问题，建议自己再梳理一下逻辑～

user: user-1
content: if(i>10)             printf("NONE\n"); 这儿改成i >= 10

user: user-0
content: 谢各位仁兄回复。

user: user-2
content: 补充一下，形参和实参还是不要同名要好一些（虽然这个函数里没什么问题）

user: user-2
content: for(i=1;i<=10;i++) {  b=back(n); n=n+b; if(n==back(n)) { printf("%d %lld\n",i,n); break; }	 } if(i>10) printf("NONE\n"); 在你这个循环里i永远小于10，也就下面的if永远不会成立，建议改成如下代码（仅供参考） for(i=1;;i++) {  b=back(n); n=n+b; if(n==back(n)) { printf("%d %lld\n",i,n); break; }	 if(i>10) { printf("NONE\n"); break; } }

user: user-0
content: 望各位仁兄，帮帮忙。提交时总是验证为答案错误，不知何因。
user-0 提问: c语言

回复:
user: user-1
content: 因为你的while判断条件是x，而你在循环里并没有修改x的值，x>0一直满足，跳不出循环。应该在循环里加个修改x的语句，比如--i;

user: user-0
content: 引用 2 楼 呆萌霍比特人的傻大脚板的回复:因为第一个scanf在循环体外,只执行一次.如果不写这行,那么while就没有存在的必要,反正你就算一次, 好的谢谢。。

user: user-0
content: 引用 1 楼 user-3的回复:因为while循环没有终止的条件啊，它会一直一直循环下去 好的谢谢。。

user: user-2
content: 因为第一个scanf在循环体外,只执行一次.如果不写这行,那么while就没有存在的必要,反正你就算一次,

user: user-3
content: 因为while循环没有终止的条件啊，它会一直一直循环下去
user-0 提问: easyx is only for C++

回复:
user: user-1
content: 引用 楼主 诗岑 的回复:编译器VS2019 一直给我报这个错 是版本不兼容吗？ 可能你建立的是C语言工程，EasyX只支持C++ 你将源文件的后缀改为.cpp试试

user: user-2
content: 还是不行

user: user-2
content: 我也是一样的问题，下面还是说easyX is only for C++
user-0 提问: code blocks上算例题都是对的，但提交OJ时说我的例题都错了，试了好久，大佬帮帮吧

回复:
user: user-0
content: 做出来了，

user: user-0
content: 引用 1 楼 user-1的回复:显然没考虑到int越界或越界处理不对 比如 a+b>0，可能a，b都是负数，相加结果超出-2^31变成正数。lz用a=2^31，b=-3 试试就知道了 我做出来了，谢谢。我不仅int越界了，fabs（）函数也用错了，改成了abs（）就对了

user: user-1
content: 显然没考虑到int越界或越界处理不对 比如 a+b>0，可能a，b都是负数，相加结果超出-2^31变成正数。lz用a=2^31，b=-3 试试就知道了
user-0 提问: 关于NAND FLASH控制器的寄存器。

回复:
user: user-0
content: 如果我的SoC里没有这些寄存器，是不是也可以自己定义，然后使用啊？

user: user-1
content: 除非你SoC不支持NandFlash，否则肯定有这些寄存器，上面你列的这些寄存器都是NFlash标准的，接口又不是GPIO可以模拟的，必须要通过控制器完成。 看下SoC spec文档，如果支持，那么肯定有，可能名称不一定完全一样。
user-0 提问: 大佬帮帮，oj上提示输出超限，codeblock上是正常的

回复:
user: user-1
content: 把n改成unsigned long或unsigned long long试试

user: user-0
content: 引用 1 楼 user-2的回复:int类型（整数类型）的范围为-2^31 ~ 2^31-1，即-2147483648~2147483647 题目要求输入数字是<2^32 对于2^31~2^32-1的数字 你的程序是不是无法判断啦 谢谢，我做出来了。

user: user-2
content: int类型（整数类型）的范围为-2^31 ~ 2^31-1，即-2147483648~2147483647 题目要求输入数字是<2^32 对于2^31~2^32-1的数字 你的程序是不是无法判断啦
user-0 提问: 向函数传递数据结构 小白求问！！！

回复:
user: user-0
content: 谢谢各位 弄懂啦！感谢对小白的帮助~

user: user-1
content: 函数传数组时用数组的名字就可以了，用name[30]这样是传数组元素（下标为30的元素），所以意思不一样

user: user-2
content: ..... strcpy(char *dst , char *src)，你要传入地址进去  例如strcpy(stu[i].name , stu[j].name)

user: user-3
content: 把for语句里name后面的[30]去了再试试
user-0 提问: C语言：编写一个函数，输出整数m的全部素数因子。（m=120,素数因子为：2，2，2，3，5）

回复:
user: user-1
content: 引用 4 楼 火柴先生 的回复:[quote=引用 2 楼 yqy1234hf 的回复:]这个是不可能绕过素数判断的   自己写循环  被除数/最小素数A/最小素数B/...最小素数N    看看能否除尽    如果不能就把素数表长度减少一位  然后增大最后一个素数 判断是否能除尽    去穷尽所有的素数对就可以了您可以看一下三楼的回复[/quote] 嗯嗯  我题目理解错了   你这个应该就是求素数因子   简单的说就是能整除某个数的队列中的质数?  我理解的对吗？

user: user-0
content: 引用 3 楼 user-2 的回复: void AllFactor(int nInput) { 	printf("%d的全素数因子：", nInput);  	for (int i = 2; i <= nInput; ++i) 	{ 		if (nInput % i == 0) 		{ 			printf("\t%d", i); 			nInput /= i--; 		} 	} } 谢谢这应该就是我想看到的代码，我所担心的会不会在这个过程中输出非素数因子，在循环过程中其实不可能出现的，因为如果出现非素数，那么他一定可以在次数更低的循环中找到它对应的素数因子并输出，是不是这样?

user: user-0
content: 引用 2 楼 yqy1234hf 的回复:这个是不可能绕过素数判断的   自己写循环  被除数/最小素数A/最小素数B/...最小素数N    看看能否除尽    如果不能就把素数表长度减少一位  然后增大最后一个素数 判断是否能除尽    去穷尽所有的素数对就可以了您可以看一下三楼的回复

user: user-2
content: void AllFactor(int nInput) { 	printf("%d的全素数因子：", nInput);  	for (int i = 2; i <= nInput; ++i) 	{ 		if (nInput % i == 0) 		{ 			printf("\t%d", i); 			nInput /= i--; 		} 	} }

user: user-1
content: 这个是不可能绕过素数判断的   自己写循环  被除数/最小素数A/最小素数B/...最小素数N    看看能否除尽    如果不能就把素数表长度减少一位  然后增大最后一个素数 判断是否能除尽    去穷尽所有的素数对就可以了
user-0 提问: 不能读入,请大佬分析一下

回复:
user: user-0
content: 晕啦,malloc没打上去,怎么看都没看你出问题

user: user-1
content: p = (struct node*)(sizeof(struct node));  p->a = b;//此处为啥不能读入  这个是什么语法？ 是要malloc吗

user: user-2
content: if (t->next == NULL || t->next->a > b) 		{ 			// p = (struct node*)(sizeof(struct node)); 			p = (struct node*)malloc(sizeof(struct node));  			p->a = b;//此处为啥不能读入 			p->next = t->next; 			t->next = p; 			break;  		}
user-0 提问: 各位大佬，帮忙看看！

回复:
user: user-1
content: void ChongDongDeHua1(void) { 	int nInit = 1; 	int nNum[3] = { 0, 0, 0 };  	printf("输入小时数：");  	int nHour = 0; 	scanf_s("%d", &nHour);  	for (int i = 0; i < nHour; ++i) 	{ 		if (i == 0) 		{ 			nNum[i] = nInit; 		} 		else 		{ 			nNum[2] += nNum[1]; 			nNum[1] = nNum[0]; 			nNum[0] = nNum[2]; 		} 	}  	int nTotal = nNum[0] + nNum[1] + nNum[2];  	printf("输出病毒数：%d\r\n", nTotal); }  void ChongDongDeHua2(void) { 	int nSampleMax = 20; 	printf("最多%d个小朋友\r\n", nSampleMax);  	int* pSample = new int[nSampleMax];  	int nInput = 0; 	int nTotal = 0; 	int nSampleCount = 0; 	 	while (true) 	{ 		scanf_s("%d", &nInput);  		if (nInput == -1) 			break;  		if (nSampleCount >= nSampleMax) 		{ 			delete[] pSample; 			printf("输入错误，最多%d个小朋友\r\n", nSampleMax); 			return; 		}  		pSample[nSampleCount++] = nInput; 		nTotal += nInput; 	}   	if (nTotal % 2 == 0) 	{ 		int nLoopCount = nSampleCount / 2; 		int* pID = new int[nLoopCount];  		for (int i = 0; i < nLoopCount; ++i) 		{ 			int nSelect = i + 1; 			int nAddID = 0;  			pID[nAddID] = 0;  			while (pID[0] + nSelect <= nSampleCount) 			{ 				int nPreAddID = nAddID; 				while (nAddID + 1 < nSelect && pID[nAddID] + 1 < nSampleCount) 				{ 					pID[nAddID + 1] = pID[nAddID] + 1; 					++nAddID; 				}  				if (nAddID + 1 < nSelect) 				{ 					nAddID = nPreAddID; 				} 				else 				{ 					int nSubTotal = 0; 					for (int j = 0; j < nSelect; ++j) 					{ 						nSubTotal += pSample[pID[j]]; 					}  					for (int j = pID[nAddID]; j < nSampleCount; ++j) 					{ 						nSubTotal -= pSample[pID[nAddID]]; 						pID[nAddID] = j; 						nSubTotal += pSample[pID[nAddID]]; 						 						if (nSubTotal == nTotal / 2) 						{ 							printf("能否均分：Yes\r\n");  							printf("组合结果："); 							for (int k = 0; k < nSelect; ++k) 							{ 								printf("%d ", pSample[pID[k]]); 							}  							printf("\r\n");  							delete[] pSample; 							delete[] pID; 							 							return; 						} 					} 				}  				if (nAddID == 0) 					++pID[nAddID]; 				else 					++pID[--nAddID]; 			} 		} 	}  	delete[] pSample;  	printf("能否均分：No\r\n"); }
user-0 提问: dev c++ 数据结构编译运行caption问题

回复:
user: user-0
content: 引用 3 楼 自信男孩 的回复:bool ListDelete(SqList *&L,int i,ElemType &e) {     int j;     if(i<1 ||i>L->length)         return false;     i--;     e=L->data[i];     //for(j=i;L->length-1;j++) {     for(j=i; j < L->length-1;j++) {         L->data[j] = L->data[j+1];     }     L->length--;     return true; } 供参考～ 找一下自己的问题～ 数组越界访问，出现段错误～不细心吧大佬知道怎么解决么

user: user-0
content: 引用 3 楼 自信男孩 的回复:bool ListDelete(SqList *&L,int i,ElemType &e) {     int j;     if(i<1 ||i>L->length)         return false;     i--;     e=L->data[i];     //for(j=i;L->length-1;j++) {     for(j=i; j < L->length-1;j++) {         L->data[j] = L->data[j+1];     }     L->length--;     return true; } 供参考～ 找一下自己的问题～ 数组越界访问，出现段错误～不细心吧修改后还是报错

user: user-1
content: bool ListDelete(SqList *&L,int i,ElemType &e) {     int j;     if(i<1 ||i>L->length)         return false;     i--;     e=L->data[i];     //for(j=i;L->length-1;j++) {     for(j=i; j < L->length-1;j++) {         L->data[j] = L->data[j+1];     }     L->length--;     return true; } 供参考～ 找一下自己的问题～ 数组越界访问，出现段错误～不细心吧

user: user-0
content: #include"sqlist.cpp"  int main()  {  	SqList *L;  	ElemType e;  	printf("顺序表的基本运算如下：\n");  	printf("(1)初始化顺序表L\n");  	InitList(L);  	printf("(2)依次插入a,b,c,d,e元素\n");  	ListInsert(L,1,'a');  	ListInsert(L,2,'b');  	ListInsert(L,3,'c');  	ListInsert(L,4,'d');  	ListInsert(L,5,'e');  	printf("(3)输出顺序表L：");DispList(L);  	printf("(4)顺序表L长度：%d\n",ListLength(L));  	printf("(5)顺序表L为%s\n",(ListEmpty(L)?"空":"非空"));  	GetElem(L,3,e);  	printf("(6)顺序表L的第3个元素：%c\n",e);  	printf("(7)元素a的位置：%d\n",LocateElem(L,'a'));  	printf("(8)在第4个元素位置上插入f元素\n");  	ListInsert(L,4,'f');  	printf("(9)输出顺序表L:");DispList(L);  	printf("(10)删除L的第3个元素\n");  	ListDelete(L,3,e);  	printf("(11)输出顺序表L:");DispList(L);  	printf("(12)释放顺序表L\n");  	DestroyList(L);  	return 1;  }

user: user-1
content: 你的函数调用在哪里，main函数在哪里？
user-0 提问: 请问用clang-format格式化代码时，如何设置取消数组自动合成一行的格式

回复:
user: user-1
content: 这个配置参数起作用BinPackArguments: true

user: user-0
content: 找到答案了，用// clang-format off关闭就好了

user: user-2
content: 搜astyle
user-0 提问: 最近碰到一个特别搞人心态的事情，是关于C语言连续输入两个字符串的问题

回复:
user: user-1
content: #include <stdio.h> #include <string.h> const int TXTLEN=8; int main(){     char text[TXTLEN+1], key[TXTLEN+1];     rewind(stdin);     printf("Please input key(%d bytes):",TXTLEN);     fgets(key,TXTLEN+1,stdin);     if ('\n'==key[strlen(key)-1]) key[strlen(key)-1]=0;     printf("%s\n",key);     rewind(stdin);     printf("Please input text(%d bytes):",TXTLEN);     fgets(text,TXTLEN+1,stdin);     if ('\n'==text[strlen(text)-1]) text[strlen(text)-1]=0;     printf("%s\n",text);     printf("(%s)%d,(%s)%d\n", key, strlen(key),text, strlen(text));     return 0; } //Please input key(8 bytes):123456789 //12345678 //Please input text(8 bytes):123456789 //12345678 //(12345678)8,(12345678)8 //

user: user-2
content: 引用 1 楼 自信男孩 的回复:亲测没问题呢，结构都是8；  楼主的代码没有定义TXTLEN的长度，可能在别处定义了，没有发出来。如果这个TXTLEN定义8，那么是可能是16的。 自测时用的TXTLEN是32

user: user-2
content: 亲测没问题呢，结构都是8；  楼主的代码没有定义TXTLEN的长度，可能在别处定义了，没有发出来。如果这个TXTLEN定义8，那么是可能是16的。
user-0 提问: 麻烦各位帮我们看看这个怎么做？萌新实在不会……

回复:
user: user-1
content: 你需要理解，在计算机的大脑里没有1234xx等数字，都是0,1的值。因此只需要通过移位和&操作，就可以把一个十进制（其他进制）对应的二进制的每一位给算出来～

user: user-1
content: 用&来做吧，&的效率应该是更快一些～

user: user-2
content: 是单纯的模2求余数？还是十进制转二进制吗？ 如果是前者，用与运算即可，即和1做&运算 比如 int main() {     int a=5;     printf(“%d模2的余数为%d\n”, a, a&1); //a和1做&运算即为a模2的余数     return 0; }  如果是前者，十进制转2进制，那就多一步移位运算 比如 void tobinary(int n) {     int a = n&1; //模2求余     if (n>1) {         tobinary(n>>1); //右移1位相当于除以2     }     printf(“%d”, a); //打印二进制 } int main() {     tobinary(5); //打印5的2进制     return 0; }  以上代码都不出现除法和取模，但是都达到同样的效果
user-0 提问: 关于数组与结构体赋值

回复:
user: user-1
content: 赋值有两种形式，一种是把源变量的内容复制到目的变量，一种是让目的变量的地址等于源变量的地址。理解这两种的区别，你就明白了你的问题

user: user-0
content: 数组变量，数组名其实表示的是常量地址，所以b=a；相当于把a的地址赋值给b，但是实际上b的地址也是常量，所以不能赋值 结构体 变量名难道不是表示常量地址吗？不理解

user: user-0
content: 引用 3 楼 宇来风满楼 的回复:能啊,用已定义数组赋值给新数组 #include <stdio.h>  int main() {     char a[]="abcdefg";     char b[10];     b=a;     printf("%s\n",b);     return 0; } 上面的编译就无法通过； 而下面的才能通过： #include <stdio.h> #include<string.h>  int main() {     char a[]="abcdefg";     char b[10];     for (int i=0;i<strlen(a);i++)         b[i]=a[i];     printf("%s\n",b);     return 0; }

user: user-2
content: 能啊,用已定义数组赋值给新数组

user: user-2
content: 能啊,用已定义数组赋值给新数字

user: user-0
content: struct book{ char name[10]; char auther[10]; float value; }; struct book math; math=(stuck book){"studymath","john",45.3};
user-0 提问: 请教 控制台传参数只能输出首个字符

回复:
user: user-0
content: 是字符集的问题，忽略了这个，改成多字符集或者 输出%ws 就可以了。感谢1楼

user: user-1
content: 楼主执行的操作是什么，比如./a.out a 5？

user: user-2
content: 你这个TCHAR是不是wchar呀，把%s改成%ws试试
user-0 提问: 强制类型转换时遇到的数据错误

回复:
user: user-1
content: 浮点数格式 http://bbs.csdn.net/topics/390676437

user: user-2
content: float值有效位数6位，前6位保证有效，之后不保证。 计算机使用32位，存储float类型有关，IEEE754标准 可以使用64位的double声明，double可以保证15位有效

user: user-2
content: float值有效位数6位，前6位保证有效，只有不保证。 计算机使用32位，存储float类型有关， 可以使用64位的double声明，double可以保证15位有效

user: user-1
content: float有效数字只有6位 请换double
user-0 提问: C语言

回复:
user: user-1
content: void AssisTest(void) { 	int nMaxInput = 20;  	char* pL2W = new char[nMaxInput + 2]; 	char* pW2L = new char[nMaxInput + 2]; 	char* pNum = new char[nMaxInput + 2];  	*pL2W = 0; 	*pW2L = 0; 	*pNum = 0;  	int nInput = 0; 	for (int i = 0; (nInput = getchar()) != 10; ++i) 	{ 		if (i >= nMaxInput) 		{ 			printf("总数不超过20个！\r\n"); 			return; 		}  		if ('a' <= nInput && nInput <= 'z') 		{ 			pL2W[++*pL2W] = nInput - 'a' + 'A'; 		} 		else if ('A' <= nInput && nInput <= 'Z') 		{ 			pW2L[++*pW2L] = nInput - 'A' + 'a'; 		} 		else if ('0' <= nInput && nInput <= '9') 		{ 			int nMinID = 0; 			int nMaxID = *pNum - 1; 			int nInsertID = nMinID;  			while (nMinID <= nMaxID) 			{ 				nInsertID = (nMinID + nMaxID) / 2;  				if (pNum[nInsertID + 1] < nInput && nInsertID == nMinID) 				{ 					++nMinID; 					++nInsertID; 				} 				else if (pNum[nInsertID + 1] < nInput) 				{ 					nMinID = nInsertID; 				} 				else if (pNum[nInsertID + 1] == nInput) 				{ 					break; 				} 				else if (nMaxID == nInsertID) 				{ 					--nMaxID; 				} 				else 				{ 					nMaxID = nInsertID; 				} 			}  			for (int j = *pNum - 1; j >= nInsertID; --j) 			{ 				pNum[j + 2] = pNum[j + 1]; 			}  			++*pNum; 			pNum[nInsertID + 1] = nInput; 		} 		else 		{ 			printf("要求：随机输入数字 大写 小写字母！\r\n"); 			return; 		} 	}  	pL2W[*pL2W + 1] = 0; 	pW2L[*pW2L + 1] = 0; 	pNum[*pNum + 1] = 0;  	printf("小变大：%s\r\n", pL2W + 1); 	printf("大变小：%s\r\n", pW2L + 1); 	printf("数字排序：%s\r\n", pNum + 1);  	delete[] pL2W; 	delete[] pW2L; 	delete[] pNum; }
user-0 提问: C语言问题

回复:
user: user-1
content: void AssisTest(void) { 	int nMaxInput = 20;  	char* pL2W = new char[nMaxInput + 2]; 	char* pW2L = new char[nMaxInput + 2]; 	char* pNum = new char[nMaxInput + 2];  	*pL2W = 0; 	*pW2L = 0; 	*pNum = 0;  	int nInput = 0; 	for (int i = 0; (nInput = getchar()) != 10; ++i) 	{ 		if (i >= nMaxInput) 		{ 			printf("总数不超过20个！\r\n"); 			return; 		}  		if ('a' <= nInput && nInput <= 'z') 		{ 			pL2W[++*pL2W] = nInput - 'a' + 'A'; 		} 		else if ('A' <= nInput && nInput <= 'Z') 		{ 			pW2L[++*pW2L] = nInput - 'A' + 'a'; 		} 		else if ('0' <= nInput && nInput <= '9') 		{ 			int nMinID = 0; 			int nMaxID = *pNum - 1; 			int nInsertID = nMinID;  			while (nMinID <= nMaxID) 			{ 				nInsertID = (nMinID + nMaxID) / 2;  				if (pNum[nInsertID + 1] < nInput && nInsertID == nMinID) 				{ 					++nMinID; 					++nInsertID; 				} 				else if (pNum[nInsertID + 1] < nInput) 				{ 					nMinID = nInsertID; 				} 				else if (pNum[nInsertID + 1] == nInput) 				{ 					break; 				} 				else if (nMaxID == nInsertID) 				{ 					--nMaxID; 				} 				else 				{ 					nMaxID = nInsertID; 				} 			}  			for (int j = *pNum - 1; j >= nInsertID; --j) 			{ 				pNum[j + 2] = pNum[j + 1]; 			}  			++*pNum; 			pNum[nInsertID + 1] = nInput; 		} 		else 		{ 			printf("要求：随机输入数字 大写 小写字母！\r\n"); 			return; 		} 	}  	pL2W[*pL2W + 1] = 0; 	pW2L[*pW2L + 1] = 0; 	pNum[*pNum + 1] = 0;  	printf("小变大：%s\r\n", pL2W + 1); 	printf("大变小：%s\r\n", pW2L + 1); 	printf("数字排序：%s\r\n", pNum + 1);  	delete[] pL2W; 	delete[] pW2L; 	delete[] pNum; }
user-0 提问: exe触发断点问题

回复:
user: user-1
content: Windows： 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。  Linux： 进程意外退出会在当前目录下产生‘core’文件或形如‘core.数字’的文件比如‘core.1234’ 使用命令 gdb 运行程序名 core或core.数字 进入gdb然后使用bt命令 可以查看进程意外退出前函数调用的堆栈，内容为从上到下列出对应从里层到外层的函数调用历史。 如果进程意外退出不产生core文件，参考“ulimit -c core文件最大块大小”命令

user: user-0
content: 大佬们这个出发短点咋个办那
user-0 提问: 计算星期值

回复:
user: user-1
content: 你自己不都说了么，四闰百不闰，四百闰，你把100,200,300,500,600,。。。这些给当成闰年再算，结果肯定有问题啊

user: user-2
content: # include <stdio.h> int main() {     int year,t,s,day;      scanf("%d",&year);      t=(year-1)/4;      s=(year-1)%4;      switch(s)     {         case 0:day=t*(365*3+366);break;         case 1:day=t*(365*3+366)+365;break;         case 2:day=t*(365*3+366)+365*2;break;         case 3:day=t*(365*3+366)+365*3;break;      }     int i;      i=day%7;      switch(i)     {         case 0:printf("星期天\n");break;         case 1:printf("星期一\n");break;         case 2:printf("星期二\n");break;         case 3:printf("星期三\n");break;         case 4:printf("星期四\n");break;         case 5:printf("星期五\n");break;         case 6:printf("星期六\n");break;     }     return 0; } 供参考～  case 0改成星期天，其他依次修改一下i值对应的星期值就可以了～  case0不就是7%7得0吗？怎么把0改成星期一了呢？

user: user-2
content: 有测试用例吗？发一下，不知道你说的哪里错是测试出错，还是其他错误？
user-0 提问: 圆锥体积

回复:
user: user-1
content: 上面那老哥说的对，V=PI*r*r*h*(1/3); 这句错误，1 和 3 均为整形，两个相除的商也应该是整形，所以 1/3=0 ，应该用 1.0/3 或者 1/3.0

user: user-2
content: V=PI*r*r*h*(1/3);这句有问题   1/3计算机中结果是0  整形相除 改一下 V=PI*r*r*h*(1.0/3);

user: user-3
content: V=PI*r*r*h*(1/3); 这句错误，修改如下： #include<stdio.h> #include<stdlib.h> #define PI 3.14  int main(int argc, char* argv[]) {     int r,h,l;     float S,V;     r=5;     h=12;     l=13;     S=PI*r*l+PI*r*r;      V=PI*r*r*h/3;//这句修改     printf("表面积S=%f\n体积V=%f\n",S,V);     system("pause");     return 0;

user: user-1
content: 代码没问题啊，或者你把r,h.l换成浮点型试试
user-0 提问: 8.52的二进制

回复:
user: user-1
content: eb和ec刚好差1，反码和补码也是1的关系，计算机存储是补码

user: user-2
content: 浮点数格式 http://bbs.csdn.net/topics/390676437

user: user-3
content: 你看错了，前面的是低位，后面是高位， 你没发现你算的是41，08，51，eb; 正好和他的相反吗？至于是ec,eb，不过是浮点的精度问题
user-0 提问: 大神求救，这个为什么会报错   没定义 ？

回复:
user: user-0
content: [quote=引用 3 楼 自信男孩 的回复:]#include<stdio.h> //    int main() int getcount(int n) {     int i,count;     if(n>60)         count++;     return count; } int main() {     int n,count=0;     printf("input a numble:\n");     scanf("%d",&n);     count=getcount(90);     printf("%d",count);     return 0; }  供参考～  getcount函数里的count是未初始化的，需要注意下～[              谢谢

user: user-1
content: #include<stdio.h> //    int main() int getcount(int n) {     int i,count;     if(n>60)         count++;     return count; } int main() {     int n,count=0;     printf("input a numble:\n");     scanf("%d",&n);     count=getcount(90);     printf("%d",count);     return 0; }  供参考～  getcount函数里的count是未初始化的，需要注意下～

user: user-2
content: 修改后是这样：#include<stdio.h> int getcount(int n) { int count; if(n>60) count++; return count; } int main() { int n,count=0; printf("input a numble:\n"); scanf("%d",&n); count=getcount(n); printf("%d",count); return 0; }

user: user-2
content: int main()//这一行必须取消 int getcount(int n) { int i,count; if(n>60) count++; return count; } int main() { int n,count=0; printf("input a numble:\n"); scanf("%d",&n); count=getcount(90);//这行调用getcount()函数，应该是count=getcount(n);才正确 printf("%d",count); return 0; }
user-0 提问: 判断输入括号是否成对

回复:
user: user-1
content: 相等的时候为什么输出为空啊

user: user-2
content: 多分号～需要注意下～

user: user-0
content: 引用 1 楼 一颗白面馒头的回复:while循环里面的if条件判断后面不加分号 。。。。我去，我忘记把删除语句后面的分号也删了

user: user-3
content: while循环里面的if条件判断后面不加分号
user-0 提问: C程序设计语言-练习1-6，问题求助

回复:
user: user-0
content: 没有问题，我故意不加括号的，不是为了读取字符，而是为了测试EOF，最终的输出只有1和0

user: user-1
content: 个人觉得应该和系统环境以及编译器或者IDE有关，不是每种组合的运行结果都是这样，我的linux+gcc输入ctrl+z就会提示已停止，不会输出0。

user: user-2
content: while(ch = getchar() != EOF) 改一下  while((ch = getchar()) != EOF) 因为!=优先级比=高，因此会把判断结果赋值给ch，而不是getchar()的返回值赋值给ch
user-0 提问: 小白求问，真的很简单

回复:
user: user-0
content: 谢谢各位的解答 懂了！谢谢各位！

user: user-1
content: while循环结束后，p已经指到了数组的最后一个元素地址 而s则表示这个数组第一个元素的首地址 所以这里可以直接用p-s

user: user-2
content: 没有代码没有真相

user: user-3
content: 这里可以填p-s;并且后面的注释也说明了这一点。 另外，需要注意的是myStrlen函数的s，虽然写的是数组形式，其实是指针，因为编译器已经将其按照指针处理的。  从另一个知识点也能证明这里不是数组，而是指针，根据参数传递是值传递，是实参赋值给形参（可以这么理解），如果形参是数组名，根据数组名不能做左值，因此就矛盾了。  所以，形参数名字写成数组，直接可以理解为指针就好了。
user-0 提问: fgets函数相关问题

回复:
user: user-0
content: 引用 2 楼 自信男孩的回复:楼主的程序fgets放在一个while循环里，自然后面的覆盖前面的。改成每次fgets之后都去判断空格，字符，数字等等即可～   建议判断一下fgets的返回值。另外，注意fgets会把回车符号加到缓存里～ 主要是我之前不知道fgets遇到回车就结束了，后来调试发现不对劲，才找到的原因

user: user-1
content: 楼主的程序fgets放在一个while循环里，自然后面的覆盖前面的。改成每次fgets之后都去判断空格，字符，数字等等即可～   建议判断一下fgets的返回值。另外，注意fgets会把回车符号加到缓存里～

user: user-0
content: 已解决，每次读取到回车后fgets都会结束读取，出现这个情况的原因是后来的读取的数据将前面的数据给覆盖了
user-0 提问: 求助大佬这个用c语言怎么写

回复:
user: user-1
content: #include<stdio.h> int main(){ 	int n, a, b; 	scanf("%d", &n); 	a = 0; b = n - 1; 	for(int i = 0; i < n; i ++){ 		for(int j = 0; j < n; j ++){ 			if(a == j || b == j) 				printf("*"); 			else 				printf(" "); 		} 		a ++; b --; 		printf("\n"); 	} 	return 0; }
user-0 提问: 两个压缩矩阵怎样实现相乘

回复:
user: user-1
content: 给LZ一段代码参考吧  int** toMatrix(int n, char c) { //对称压缩矩阵转矩阵（沿对角线存储半个恢复回原来的矩阵）     int i, j, k, t, l;     int **a = (int**)malloc(sizeof(int*)*n);     for (int i=0; i<n; i++) {         a[i] = (int*)malloc(sizeof(int)*n);     }     l = n*(n-1)/2 + n;     printf("生成矩阵%c, 请输入%d个压缩矩阵中的数：\n", c, l);     for (i=0; i<l; i++) {         scanf("%d", &t);         for(j=1; j<=n; j++) {             for (k=1; k<=j; k++) {                 if (j*(j-1)/2+(k-1)==i) {                     a[j-1][k-1] = t;                     a[k-1][j-1] = t;                 }             }         }     }     return a; }  int** multiplyMatrix(int **a, int **b, int n) { //矩阵乘法(必须满足矩阵A的列数和矩阵B的行数相同，本题忽略，都是n*n矩阵)     int i, j, k, s;     int **c = (int**)malloc(sizeof(int*)*n);     for (int i=0; i<n; i++) {         c[i] = (int*)malloc(sizeof(int)*n);     }     for (i=0; i<n; i++) {         for (j=0; j<n; j++) {             s = 0;             for (k=0; k<n; k++) {                 s += a[i][k]*b[k][j];             }             c[i][j] = s;         }     }     return c; }  void destoryMatrix(int **a, int n) {     int i;     for (i=0; i<n; i++) {         free(a[i]);     }     free(a); }  int main() {     int n, i, j, **a, **b, **c;     printf("请输入阶数n：\n");     scanf("%d", &n);     a = toMatrix(n, 'A');     for (i=0; i<n; i++) {         for (j=0; j<n; j++) {             printf("%5d", a[i][j]);         }         printf("\n");     }          b = toMatrix(n, 'B');     for (i=0; i<n; i++) {         for (j=0; j<n; j++) {             printf("%5d", b[i][j]);         }         printf("\n");     }          printf("A * B = \n");     c = multiplyMatrix(a, b, n);     for (i=0; i<n; i++) {         for (j=0; j<n; j++) {             printf("%5d", c[i][j]);         }         printf("\n");     }          destoryMatrix(a, n);     destoryMatrix(b, n);     destoryMatrix(c, n); }

user: user-2
content: 你这个是压缩矩阵，是沿对角线存储了半个。

user: user-0
content: 引用 3 楼 zgl7903的回复:理解矩阵乘法 我这知道怎样乘，但就是压缩矩阵不会乘

user: user-3
content: 理解矩阵乘法

user: user-0
content: 引用 1 楼 老马何以识途的回复:一維數組就要定位行列了，其實也簡單，A第x行第y列就是A[(x - 1) * n + (y - 1)] 能具体讲一下吗

user: user-4
content: 一維數組就要定位行列了，其實也簡單，A第x行第y列就是A[(x - 1) * n + (y - 1)]
user-0 提问: 求帮助，急，介绍一下

回复:
user: user-1
content: 你的程序块中的','换成';'

user: user-2
content: https://blog.csdn.net/qq_42302831/article/details/88587052

user: user-2
content: if(a<b)     {         c=a,a=b,b=c;     } 这一步用于保证a >= b；否则执行if内的交换  while(b!=0)     {         c=a%b,a=b,b=c;     } 这一步可以考虑学习一下最大公约数的求值算法～

user: user-3
content: d=a,e=b; c=a,a=b,b=c; c=a%b,a=b,b=c; 不知道原题是什么，但我想不会是测试逗号表达式吧，所以认为这几句逗号应该是分号。整理代码如下   #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int main() {     int a, b, c, d, e;     scanf("%d%d", &a, &b);     d = a;     e = b;     if (a < b)    //交换，如果a小于b,则两数交换     {                 c = a;         a = b;          b = c;             }     while (b != 0)     {                 c = a % b;   //循环求模              a = b;                b = c;             }     printf("%d\n%d\n", a, (d*e) / a);     return 0; }

user: user-4
content: 这个就是一个求两个数的最小公倍数和最大公因数的代码
user-0 提问: 有大佬能解释一下吗

回复:
user: user-1
content: A[B] *(A+B) *(B+A) B[A] //以上四行等价  "abc"[1] *("abc"+1) *(1+"abc") 1["abc"] //以上四行等价  A[0] *(A) 0[A] //以上三行等价

user: user-2
content: printf("%c\n", *string_p++); printf("%c\n", string_p[1]); 第一个printf是因为++后后增，因此是先求表达式的值，即(*string_p++)，然后自增string_p指针，指向'8'的地址， 第二个是在第一个基础上的，因此string_p[0]是'8'，string_p[1]即'4'了。

user: user-3
content: 这个其实就是指针的使用了  多去看看指针的定义吧 char* string_p = "48430";   //此时 指针指向字符串的首地址，也即字符串首个字符的地址  该地址的值是'4'  即此时*string_p=4 printf("%c\n", *string_p++);  //* 和后置++优先级是一样的，但是他们的结合顺序是自右向左的 所以先执行的的string_p++,string_p指向下一个值得地址，*string_p 取值为4 printf("%c\n", string_p[1]);   //刚才的string_p自增了 此时string_p指向的'8'  string_p[1]表示之后的第2个字符  也就是4  是8后面的4

user: user-4
content: String_p是一个字符串数组的名称 = 第一个字符的地址，所以*string_p == 4 ,又因为后面有++，所以字符数组指针后移，string_p[0] = 8,所以 string_p[1] = 4
user-0 提问: 请问大神到地使出了什么问题，为什么c,b输不上。

回复:
user: user-1
content: 输入时，a b c 之间为空格，不用，号

user: user-2
content: 确认一下你的输入的逗号和scanf中的逗号是否一致，scanf是格式化输入，因此要按照scanf中第一个参数的格式输入。

user: user-3
content: 你看一下 你输入的是不是中文的逗号

user: user-4
content: 应该是逗号问题吧，代码中的是中文逗号，cmd中的是英文逗号，两个不一致导致的，建议别用逗号，用空格代替比较好，不容易出错

user: user-5
content: 因为你输入的时候用的逗号是中文的，c语言符号一定要用英文！！
user-0 提问: 求指点数据结构链栈将一个十进制数转换为二进制数

回复:
user: user-1
content: #include <stdio.h> #include <malloc.h>  typedef struct node{     int data;     struct node *link; }NODE;  NODE *push(NODE *top, int m) {     NODE *p;//,top;     p=(NODE *)malloc(sizeof(NODE));     p->data =m;     p->link =top;     top=p;     return top; } NODE *pop(NODE *top, int *x) {     NODE *q;     q=top;     top=top->link ;     *x = q->data;     free(q);     return top; } void conversion(int N,int r) {     NODE *top1 = NULL;     int val;     //top1=(NODE *)malloc(sizeof(NODE));     int x=N,y=r;     while(N!=0)     {         top1=push(top1, N%r);         N=N/r;     }     printf("\n十进制数%d所对应的%d进制数是:",x,y);     while(top1!=NULL)     {         top1=pop(top1, &val);          printf("%d", val);     }     printf("\n"); }  //void main() int main() {     int n,r;     printf("请输入任意一个十进制整数及其所需转换的进制数:\n");     scanf("%d%d",&n,&r);     conversion(n,r); } 供参考～  对比代码找一下自己的问题吧～
user-0 提问: C语言acm题,怎么做啊？

回复:
user: user-1
content: 引用scanf("%u %u %du",&x,&y,&z);这句输入有问题吧看，%du多了个d

user: user-0
content: 啊这，我们学校内网哥你也进不去啊，题目我都贴全了，我也不知道咋回事

user: user-2
content: 引用 2 楼 qq_51501668 的回复:[quote=引用 1 楼 user-2的回复:]你的程序定义了一堆整数， n=b/3;  你确定这句不会有问题？ 你的怎么这么麻烦 别把简单问题想复杂了 供参考  int main(){    int a,b;    while (scanf("%d %d",&a,&b)!=EOF)    {       unsigned int x,y,z;       scanf("%u %u %du",&x,&y,&z);       printf("%u\n",2*(x+y)+3*z-a-b);    }  }  哥，不对啊，每次都是 Wrong answer on test 4 [/quote]  那就说明acm的test4有特殊的情况 现在没考虑到  你能把acm的网址给我吗  我替你去看看

user: user-0
content: 引用 1 楼 user-2的回复:你的程序定义了一堆整数， n=b/3;  你确定这句不会有问题？ 你的怎么这么麻烦 别把简单问题想复杂了 供参考  int main(){    int a,b;    while (scanf("%d %d",&a,&b)!=EOF)    {       unsigned int x,y,z;       scanf("%u %u %du",&x,&y,&z);       printf("%u\n",2*(x+y)+3*z-a-b);    }  }  哥，不对啊，每次都是 Wrong answer on test 4

user: user-0
content: 过了，谢谢大佬们

user: user-0
content: #include<stdio.h>  int main() {   unsigned long long int a,b,x,y,z,A,B;     scanf("%lld%lld",&a,&b);     scanf("%lld%lld%lld",&x,&y,&z);     if(a>=2*x+y)     A=0;     else     A=2*x+y-a;     if(b>=3*z+y)     B=0;     else     B=3*z+y-b;     printf("%lld",A+B);     return 0; }

user: user-0
content: 还有如果一个颜色很多另一个颜色很少还是需要晶体。可能要讨论。

user: user-1
content: 引用int main(){    int a,b;    while (scanf("%d %d",&a,&b)!=EOF)    {                  unsigned int x,y,z;                  scanf("%u %u %u",&x,&y,&z);//这是改好的。 //原来的： scanf("%u %u %du",&x,&y,&z);                 printf("%u\n",2*(x+y)+3*z-a-b);    }  }结果为负，超范围了。unsigned int：32位，0<=X<=4294967295;   long: 32位，-2147483648<=X<=2147483647.

user: user-0
content: a, b如果太大结果不就是负的了？但我改了一下还是不行

user: user-2
content: 引用 5 楼 qzjhjxj 的回复:引用scanf("%u %u %du",&x,&y,&z);这句输入有问题吧看，%du多了个d   引用 4 楼 qq_51501668 的回复:啊这，我们学校内网哥你也进不去啊，题目我都贴全了，我也不知道咋回事  那你改一下 不知道是不是范围溢出了 int main(){    int a,b;    while (scanf("%d %d",&a,&b)!=EOF)    {       long long x,y,z;       scanf("%lld %lld %lld",&x,&y,&z);       printf("%lld\n",2*(x+y)+3*z-a-b);    }  }

user: user-2
content: 你的程序定义了一堆整数， n=b/3;  你确定这句不会有问题？ 你的怎么这么麻烦 别把简单问题想复杂了 供参考  int main(){    int a,b;    while (scanf("%d %d",&a,&b)!=EOF)    {       unsigned int x,y,z;       scanf("%u %u %du",&x,&y,&z);       printf("%u\n",2*(x+y)+3*z-a-b);    }  }
user-0 提问: C 语言多进程 vs 多线程性能问题

回复:
user: user-0
content: 我每次测试10秒，然后结果/10来显示数据， 还有计时问题，我直接使用了系统的时间函数，没有事用tsc来计算。  误差也肯定有，但是应该不会影响整体效果吧。

user: user-1
content: 使用电脑计时有时误差会很大，因为待测程序段的运行会影响电脑时钟。 将待测程序段循环足够多次，手动掐秒表计时可能更准确。
user-0 提问:  程序编译后，出现"eh.h is only for C++!"

回复:
user: user-0
content: 引用 2 楼 丁劲犇的回复:你文件名是不是.c？另存为cpp即可。 好的，谢谢，已经解决了

user: user-1
content: 你文件名是不是.c？另存为cpp即可。

user: user-2
content: 你编译的不是这段代码。
user-0 提问: 急求 这段代码哪里错了？

回复:
user: user-1
content: for (mark = MAXSIZE-1; mark >= 0; mark--)     {         if (bigint[mark] == 0) break;     } 楼主的问题出在这里，看一下，MAXSIZE是200，而传进来的bigint有200个吗？ 还有bigint传进来的内容是初始化的bigint1,bigint2, bigint3，第200个元素是几，楼主需要了解一下，不然这个问题不好解决。  int bigint1[MAXSIZE] = {0,0,9,8,7,6,5,4,3,2,1}; 这是初始化，前几个元素赋值了？答案是11个，那么第12个到MAXSIZE后面的数据初始化为几？看样子是没有初始化，其实编译器都给初始化了，为0. 既然这么理解了，那么上面的自定义函数里的处理是不是就有问题了？  不知道这么解释，楼主是否能够明白～

user: user-2
content: 都没说是什么错...
user-0 提问: 我想问一下如何在循环中做到输出条件中的最后一个数无多余字符而前面输出的都有空格

回复:
user: user-0
content: 感谢校友！！！

user: user-1
content: #include <stdio.h> int main (){ 	int i,a,b,c,d,k=0; 	for (i=100;i<999;i++){         a=i/100; 	    b=i%100/10; 	    c=i%10; 	    d=a*a*a+b*b*b+c*c*c; 	    if (i==d){ 	    	k++; 	    	if (k==1){ 	    		printf("%d",i); 	    	} 	    	else{  	    		if (k>1) 	    			printf (" %d",i); 	    	}       } 	} 	return 0; }          //做个计数器就可以了  jlu校友

user: user-2
content: #include <stdio.h> int main() {     int i,j,k,n;     n=0;     for (i=1;i<10;i++)     for (j=0;j<10;j++)     for (k=0;k<10;k++) {         if (i*i*i+j*j*j+k*k*k==i*100+j*10+k) {             if (n==0) {                 printf("%d",i*100+j*10+k);                 n=1;             } else {                 printf(" %d",i*100+j*10+k);             }         }     }     printf("\n");     return 0; } //153 370 371 407 //

user: user-0
content: 引用 1 楼 宇来风满楼 的回复:空格不是看不见吗，有啥影响 引用 1 楼 宇来风满楼 的回复:空格不是看不见吗，有啥影响 学校作业要求，想刷分就得按要求来

user: user-0
content: 算，可这样第一个字符前又有空格了

user: user-3
content: 做个计数。当输出第一个的时候输出“%d” 后面全都输出“ %d”

user: user-4
content: 指定格式输出，如：“%2d”，自动靠右，最后没空格的，楼主这算不算你说的意思？

user: user-5
content: 空格不是看不见吗，有啥影响
user-0 提问: C语言作业

回复:
user: user-1
content: 数组长度～[]在定义的时候，中括号里的是数组长度～

user: user-2
content: 引用 7 楼 weixin_44382508 的回复:数组元素数组打错了   就是这个数组的容量    例如int array[10]   那这个array数组最多有10个元素

user: user-2
content: 数组元素数组

user: user-0
content: 引用 4 楼 轻语2000的回复:[quote=引用 3 楼 qq_52134323的回复:][quote=引用 1 楼 轻语2000的回复:]这个你不看书来这里问我是没有想到的，里面的数字是表示数组的容量。 数组的容量是看哪个符号里的大小[/quote] 那个容量是你自己根据需求定义的，肯定不一样啊，你看看书[/quote] 好难啊这个题

user: user-0
content: 请问你说的需求定义在我发的图里哪个位置

user: user-3
content: 引用 3 楼 qq_52134323的回复:[quote=引用 1 楼 轻语2000的回复:]这个你不看书来这里问我是没有想到的，里面的数字是表示数组的容量。 数组的容量是看哪个符号里的大小[/quote] 那个容量是你自己根据需求定义的，肯定不一样啊，你看看书

user: user-0
content: 引用 1 楼 轻语2000的回复:这个你不看书来这里问我是没有想到的，里面的数字是表示数组的容量。 数组的容量是看哪个符号里的大小

user: user-0
content: 引用 1 楼 轻语2000的回复:这个你不看书来这里问我是没有想到的，里面的数字是表示数组的容量。 为啥有的时候数字不一样，容量是看字节吗

user: user-3
content: 这个你不看书来这里问我是没有想到的，里面的数字是表示数组的容量。