Question: 请问这个题怎么做

引用 3 楼 遇见女神的回复:这样这样这样  谢谢谢谢，(*°∀°)=3

这样这样这样

嗯，我写了，好像第二个函数有问题 #include<stdio.h>  void InputArray(int *p,int m,int n);  int FindMax(int *p,int m,int n,int *pRow,int *pCol);  int main()  {  	int m,n,max;  	int a[10][10];  	int *p;  	int Row;  	int Col;   	printf("Input m,n:\n");  	scanf("%d,%d",&m,&n);  	InputArray(p, m, n);  	max=FindMax( p,m, n, &Row,&Col);  	printf("max=%d,row=%d,col=%d",max,Row,Col);  	return 0;  }  void InputArray(int *p,int m,int n)  {  	int i,j;  	int a[10][10];  	printf("Input %d*%d array:\n",m,n);  	for(i=0;i<m;i++)  	{  		for(j=0;j<n;j++)  		{  			 scanf("%d",& a[i][j]);  		}  	}  }  int FindMax(int *p,int m,int n,int *pRow,int *pCol)  {  	int i,j;  	int max;  	for (i = 0; i < m; i++)  	{  		for (j = 0; j < n; j++)  		{  			if (max < (p[i] + j))  			{  				max = (p[i] + j);  				*pRow = i;  				*pCol = j;  			}  		}  	}  	return max;  }

先动手写写，出问题再问


Question: 求大神帮忙，c语言制作一个通讯录管理系统

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

参考博客： https://blog.csdn.net/Donald_Shallwing/article/details/99734501

链表只是一种数据结构，跟实际的数据没有太多的联系，如果你写的链表有问题，可以参考一下网上别人的写的链表模板，稍加修改就能用了


Question: 悬赏

很简单的题目，先动手写写，出问题再问不迟


Question: 删除下标为n的指定元素，大佬帮忙改错，按照我的思路

引用 1 楼 user-3的回复: #include<stdio.h>  void del(int* a, int n)/*a[]=*a*/ { 	int i; 	for (i = 0; i < 10; i++) 		if(i >= n) 		{ 			*(a + i) = *(a + i + 1); 		} 	for (i = 0; i < 9; i++) 		printf("%3d", *(a + i)); } int main() { 	int a[10], b[9]; 	int n, i; 	for (i = 0; i < 10; i++) 		scanf("%d", &a[i]); 	scanf("%d", &n); 	del(a, n); 	return 0; }  为啥编译有错不能运行

#include<stdio.h>  int  del(int *a, int size, int n )/*a[]=*a*/ {     int i;     int tmp;      tmp = a[n];     for (i = n; i < size-1; i++)         a[i] = a[i+1];      return tmp;     /*     int i;     for(i=0;i<10;i++)         while(i>n)         {             *(a+i)=*(a+i+1);         }     for(i=0;i<9;i++)         printf("%3d",*(a+i));     */ }  int main () {     int a[10],b[9];     int n,i;     for(i=0;i<10;i++)         scanf("%d",&a[i]);      scanf("%d",&n);      if (n < 0 || n > 9)         return -1;     //b[9] = del(a[10],n);     b[9] = del(a, 10, n);      for(i=0;i<9;i++)         printf("%3d", *(a+i));      return 0; } 供参考～


Question: c语言结构体运行出现乱码怎么回事

把int main（）后面的那一行重定义的删除就好了

请问应该怎样修改呢，去掉呢个重新定义的可以引用之前定义的结构体么？

int main(viod){ struct STU1 stu[7]; int a;  这里又重新定义了一次stu。和全局变量定义的stu重名  所以后面的使用的都是这个新定义的局部变量，而不是你正确初始化过的全局变量


Question: C语言入门小白向大神们求助

最好自己动手写写 MAX长度可以适当调整  #include<stdio.h> # define MAX 100 int main() { 	char str[4][MAX]; 	char result[MAX]; 	int len = 0, i, j; 	for (i = 0; i < 4; i++) { 		scanf("%s", &str[i]); 		j = 0; 		while (str[i][j] != '\0')  			result[len++] = str[i][j++]; 	} 	result[len] = '\0';		//手动补上终止字符 	printf("%s", result); 	return 0; }


Question: 还有一个小时 求大神帮忙解答

引用 1 楼 寻开心的回复:4 1  4 1 1 4 1 2 4 2  4 2 1 4 3  示范的这个，答案就是上面的6种啊，哪里来的7呢  前两项很容易就能循环出来， 后面是要用一个递归函数来完成。 int count（int，int）返回的值是满足条件的子序列的数量 int count(int n1, int n2) {     int v = fabs(n1-n2);     if ( v < 2 ) return 0;  //      int c = 0;    for ( int x=1; x<v; x++) {           c += count(n2, x);           c %= 10000;    } } 还有一个44没拍出来

5个的时候是14项  51    还有5个后续    51 1    51 2    51 3         513 1          5131 1 52   还有2个后续    52 1    52 2 53   还有2个后续    53 1      5311 54 55

#include <stdio.h>  int count(const int n1, const int n2) {     int v = abs(n1-n2);     if ( v < 2  ) return 0;  // n1和n2差小于2，没有后续      int c = 0;     int x;     for ( x=1; x<v; x++) { // 后续从1到v-1      	  //printf(" %d %d %d ", n1, n2, x);     	  c ++; // 自身算一个            c += count(n2, x); // 递归计算后项的数量            c %= 10000;    }    return c; }  int main () { 	int n; 	scanf("%d", &n); 	int i=0; 	int c = 0; 	for ( i=1; i<=n; i++ ) { 		c++; 		//printf("\n%d %d ", n, i); 		int t = count(n, i); 		c += t; 		printf("\n*%d %d have children number is: %d\n", n, i, t); 	} 	printf("\ntotal:%d", c); 	return 0; }


Question: 救救孩子吧


Question: 支持变长数组的编译器有哪些？

常用的编译器里面 除了微软的CL 都支持

引用 1 楼 user-3的回复:如果你的变长数组指的是 VLA，那么 dev c++ 是支持的；如果你要求编译器，可以选择 gcc 或 tcc。 VLA,DEV编不出 参考程序清单10.18 //程序清单10.18--使用变长数组的函数 #include<stdio.h> #define ROWS 3 #define COLS 4 int sum2d(int rows,int cols,int ar[rows][cols]); int main(void) {   int i,j;   int rs=3;   int cs=10;   int junk[ROWS][COLS]={            {2,4,6,8},            {3,4,7,9},            {12,10,8,6}     };          int morejunk[ROWS-1][COLS+2]={           {20,30,40,50,60,70},           {5,6,7,8,9,10}     };          int varr[rs][cs];//变长数组          for(i=0;i<rs;i++)        for(j=0;j<cs;j++)           varr[i][j]=i*j+j;                  printf("3x5 array\n");      printf("Sum of all elements= %d\n",            sum2d(ROWS,COLS,junk));              printf("2x6 array\n");     printf("Sum of all elements = %d\n",           sum2d(ROWS-1,COLS+2,morejunk));             printf("3x10 VLA\n");    printf("sum of all elements = %d\n",          sum2d(rs,cs,varr));              return 0; }  //带有一个VAL参数的函数 int sum2d(int rows,int cols,int ar[rows][cols]) {     int r;     int c;     int tot=0;         for(r=0;r=rows;r++)        for(c=0;c<cols;c++)          tot+=ar[r][c];      return tot;  }  您试下


Question: C语言冒泡排序

引用 1 楼 寻开心的回复:scanf. 格式化输入的时候可以指定宽度，不能指定精度。    scanf("%.0lf ....."); 这里是不可以的 printf没有这个限制 嗯呢，谢谢大佬，谢谢谢谢啦


Question: 如题


Question: 如题


Question: 遗传算法求助

没代码说个毛啊，你这是浪费大家的时间，同时也在浪费自己的时间

这个是啥意思，初学者很懵


Question: PTA 估值一亿的AI核心代码，有两个测试点没过帮我看看哪里的问题，我没找到

这个估值一亿的破烂代码准备秀多少天呢？

太贵了， 玩儿不起。 找那些设立一个小目标打算赚这个的人解决吧


Question: 【c语言入门题】浮点数排序

你这是字符串比较，楼主知道字符串比较的规则吗？

提示：字符串比较：    7， 比600大

引用 1 楼 SuperDay的回复:你这是字符串比较，楼主知道字符串比较的规则吗？ 从左至右进行ASCII码大小比较，是吗？


Question: c语言如何实现求数组s[n][n]的对角线之和

sum初始化为0   有两条对角线， 左上到右下的     用i来建立一重循环就行了， 每次循环计算 sum += s[i][i] 另外一条，右上到左下的     用j来建立一重循环， 每次计算。sum+= s[j][n-1-j] ;    // 这条对角线上的元素满足 两重下标的和是n-1


Question: c语言折半查找法的问题，要是查找的数不在数组里面，输出的数错误

你的BinSearch就没有设计出找不到的逻辑， 以及找不到的情况下要返回什么 能找到就返回下标，找不到呢？  -1 可以  你的binSearch函数里面的代码 While语句循环执行完了，就是遇到了找不到的情况， 你是return 了 mid，这里应该return -1  主函数要判断， BinSearch返回值是不是-1， 是-1表示没有找到， 其他的数值才是表示找到了


Question: 快速幂取模怎么得出结果？取模的结果代表什么？

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


Question: 对，又是我……我又来求助了！

好了，我自己解决了😂巨蠢的问题……

引用 1 楼 黑洞中潜水的猪的回复:n取2自然是俩行啊，另外建议有问题顺便把代码贴上来，方便论友们帮你调试 #include<stdio.h> #include<string.h> struct xin{ 	char xuehao[30]; 	char name[20]; 	int chengji[3]; }; struct xin N[30];int n,i;char z[30],h[20]; int main() {    	void input(); 	void print(); 	     input();     print();     return 0; }   void input() { 	scanf("%d",&n); 	for(i=0;i<n;i++) 	{ 		scanf("%s %s %d %d %d",z,h,N[i].chengji[0],N[i].chengji[1],N[i].chengji[2]); 		strcpy(N[i].xuehao,z); 		strcpy(N[i].name,h); 	} } void print() {   for(i=0;i<n;i++) 	printf("%s,%s,%d,%d,%d\n",N[i].xuehao,N[i].name,N[i].chengji[0],N[i].chengji[1],N[i].chengji[2]); }

引用 1 楼 黑洞中潜水的猪的回复:n取2自然是俩行啊，另外建议有问题顺便把代码贴上来，方便论友们帮你调试 我是n取2，要输入两组数据(a和b)，但是我只输入了a组它就运行了

n取2自然是俩行啊，另外建议有问题顺便把代码贴上来，方便论友们帮你调试


Question: c语言 求助

最后return a[mid]==x?mid,-1，前面的return改成break 实在没什么意义

引用 1 楼 user-2 的回复：改成一条return能干嘛？作业要求😂

改成一条return能干嘛？


Question: C语言

int *p[3], a[3] p是一个数组，数组的内容是int *。  p 相当于 int ** a是一个数组，数组的内容是整数，  a 相当于 int *  对于四个问题，只要识别出来等式两边是 int， int*， 还是 int**就能知道是否匹配了 A      p = a;             int ** 和 int * 不匹配 B    *p = a[0].         int * 和 int 不匹配 C     p = &a[0].      int** 和 int * 不匹配 D p[0] = &a[0].     int * 和 int * 匹配


Question: sbrk与brk问题


Question: 为什么后序遍历没有输出

我就问一句，你这代码跑得起来嘛


Question: 这是为啥！！求教大佬！！

改了scanf的格式，确保a和b放入的是你输入的数 第二步是启动组小公倍数的算法，快速算法自己到百度上去找一下， 基本的办法 判断一下a和b maxV是其中大的， minV是其中小的 temp = maxV 循环  （这个循环最多执行 mnV次，  那个时候temp = maxV*minV = a*b 比如是他们的公倍数）       如果 temp % minV ==0 说明  tempV就是最小公倍数       如果不是 temp += maxV，继续循环   是不是倍数用 % 判断就好了

引用 2 楼 寻开心的回复:float a;  你用%d的格式输入，那会是啥， 要用%f指定float类型的输入格式吧  输入数据不对， 后面能对才见鬼呢  初学的长点记性 1 定义变量的同时都赋予初值 2 每次输入数据后都printf出来，对比一下， 确保无误再下一步 3 把算法分解成多个步骤每个步骤结束，printf一下结果，确认对了再继续下一步  不会做断点就必须会printf大法 改成f也不对啊，问题出在哪


Question: 求解

问题1：  函数里面的a没有初始化为0  问题2:    你说没有修改之前，从循环体出来的时候j应该是多少？  一种情况是半路出来的， 遇到了n%j是0的情况  但是还有一种情况， 正常循环退出的， 那你说这个时候j是多少？！！！  j 是 n  n%n是几？  修改后的正常循环出来，j = n/2 这个未必是， 当n是偶数的时候， n%n/2 还是为0  你在 循环语句之后，printf一下j，自己看看结果


Question: 操作系统页面置换算法【LFU】在物理内存块中寻找被置换页面时出错了，望指教！

我个人觉得可能是Search函数出了问题，但不知道问题到底出在哪儿，也没有好的解决办法


Question: c语言malloc申请内存的问题

可以，你可以认为是int a[10];这样的数组。但是不用的时候需要free掉。

你malloc出来的这个a，不就相当于一个10个整型的数组吗

你自己看手册把 https://zh.cppreference.com/w/c/memory/malloc


Question: 请问下各路大神，这是什么情况？


Question: 请问下各路大神，这是什么情况？


Question: 奇妙的指针

我写的 https://blog.csdn.net/BCMY0110/article/details/103437879

引用 1 楼 清晨与猫鱼的回复:你加油把，如果你能不用中文命名.cpp文件就更好了。 好的，谢谢您的提示😊😊

你加油把，如果你能不用中文命名.cpp文件就更好了。


Question: c语言新生求指导

这样改吗？ #include <string.h> #include <stdio.h> int main( ){     int a[100],i,j,b[100],n,m,c;       while(scanf("%d%d",&n,&m)==2){  	   for(i=0;i<n;i++) scanf("%d",&a[i]); 	   for(i=0;i<m;i++) scanf("%d",&b[i]);  	   if(n==0) printf("NULL\n"); 	   if(m==0) for(i=0;i<n;i++) printf("%d ",a[i]); 	   c=0; 	   for(i=0;i<n;i++){ 		   for(j=0;j<m;j++){  			  if(a[i]==b[j]) {c++;break;} 			  if(j==m-1) printf("%d ",a[i]);                                      		   } 		   if(c==n) printf("NULL\n");   	   }            printf("\n");  	   }     return 0; }   引用 6 楼 寻开心 的回复:集合的定义是，一个元素在集合当中出现只有一次 你的第二组数据里面显然有重复的 这样做减法的时候，只会去掉一个 比如  0 0 0  结果也应该是null  你应该把他们去重的

别沉（尔康手）

害，别沉啊

引用 2 楼 user-2 的回复:输入0 0，是不是该输出NULL？ 感谢你的回复，但上交了后还是60分。

输入0 0，是不是该输出NULL？

Sample Input 3 3 1 2 3 1 4 7 3 7 2 5 8 2 3 4 5 6 7 8  Sample Output 2 3  NULL


Question: C语言  结构体数组

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

引用 楼主 qq_45982074的回复:#include<stdio.h> struct stu { 	double num; 	char mane[200]; 	char zuozhe[100]; 	float price;  };  int main()  {  	int n,i,j,e;  	double h;  	struct stu a[100];  	while(scanf("%d",&n)!=EOF)  	{  		j=0;  		for(i=0;i<n;i++)  		{  		scanf("%.0lf",&a[i].num);  	       for(e=0;a[i].mane[e]!='\0';e++)  	       scanf("%c",&a[i].mane[e]);  		scanf("%s %.2f",a[i].zuozhe,&a[i].price);      	}      	scanf("%.0lf",h);      	for(i=0;i<n;i++)      	{      		if(a[i].num==h)      		{      			printf("%.0lf ",a[i].num);      			 for(e=0;a[i].mane[e]!='\0';e++)      			 printf("%c ",a[i].mane[e]);      			printf("%s %.2f\n",a[i].zuozhe,a[i].price);      			j++;      			break; 			 } 		 } 		 if(j==n) 		 printf("No find!");     } } 这个程序为啥会超时啊, Runtime Error:Segmentation fault 不要被刷下去，不要被刷下去


Question: 大佬，求助


Question: 求助大佬

引用 2 楼 寻开心的回复:也有用dfs求解的， 但是方法还是一样的，就是保存每个点的最长路径同时记录到达这个点的上一个点是谁就好了，不必记录完整的路径，否则这个数据就太长了。最后得到最长路径之后，再根据这个上一个点的关系，反向走一遍就有了完整的路径   不解释dp/dfs的算法细节，会就是会，不会自己百度答案吧。 不喜欢搬砖 就是用深度算法，但是看了好多别人做的，都只是把最长路径输出来了，不知道怎么把线路也一起显示出来

如果说的是同一个问题的话，是DP算法求解的      从终点开始向上找的过程当中，更新每个点的最长路径的同时把到这里的相邻的节点也保存起来就好了啊      到达山顶得到最长路径的时候，再沿着这个记录反走一次，就输出结果了


Question: 把结构体数组保存到文本中会有冗余

引用 1 楼 寻开心的回复:1 读写两个函数的文件指针如果为NULL的判断处理有问题， 不应该仅仅显示数据，还要直接return，不去执行后面的操作    先确保文件是被正确的打开了    文件确实和执行文件，或者IDE当中指定的执行目录下面，不是打开了其他的文件  2 从目前代码上看不出来问题    你和fprintf并列一个printf，在输出文件的同时，屏幕输出数据， 来同步看看输出的数据是否有问题     如果屏幕输出也有多出来的数据，那就是你的数据有问题     如果屏幕输出没有，而文件有， 那很可能不是这个函数做的文件输出，找其他的地方 谢谢！我采纳了你的意见。此外，输入字符串我把用gets改为用scanf输入，就没有冗余的问题了。


Question: 大佬帮助一下这两个C程序怎么做？ 14和15

厉害  谢谢大佬  感谢感谢

题目简单 但是可以展开讲一点编程小技巧 异或运算有一个很常见的技巧 a^b^b == a ^同一个数字2次 得到结果是本身 0^a == a 所以这里我们可以这样做 定义变量 n 初始化为0 然后 循环遍历数组 每次 n^数组元素 同时 ^循环变量 从0到99 最终 n 就是出现2次的数字

谢谢大佬  这确实都不难  但我太水  感谢感谢

都不难啊， 简单提示： 14题  知道1+2+3+....+99 是多少吧？          把数组里面的这100个数加起来，再减去1+2+3+。。。。+99，就得到结果了 15  8.3253 用%.2f输出是可以得到8.33 ， 其他的同类处理


Question: if语句的疑惑

你可以选择无满意结贴

不要回我了，我错了太粗心了


Question: c语言

数组的大小，数组的大小

看一下宏定义就知道了

int LEN=(sizeof(country_codes) / sizeof(country_codes[0]));

sizeof(country_codes) ： 整个数组大小 sizeof(country_codes[0]))： 数组元素大小 宏定义 ： 文本替换

这个定义是确定数组当中的元素个数 除号之前的代码是计算数组整体占据内存的大小 除号后面是数组元素每一个占据内容的大小


Question: 为什么在某个测试点有段错误

不是，我试过把数组长度设的很长，但还是不行

scanf("%s %s %c %s %s",ren[i].name,ren[i].birth,&ren[i].sex,ren[i].guhua,ren[i].shouji); 是不是你输入的内容太长了，越界了数组

name, birth,guhua、shouji这些成员是数组吧，你为什么给它赋值的时候，没有用下标访问呢？例如name[i]。输入某个结构成员变量，你用该结构体对象去访问该结构体成员，既然那个成员是数组，为什么你只是访问它的首地址呢？即ren[i].name。难道name不是数组吗？你这么赋值ren[i].name和ren[i].name[j]的区别，你有没有想过？？

这是题目 输入在第一行给出正整数N（≤10）；随后N行，每行按照格式姓名 生日 性别 固话 手机给出一条记录。其中姓名是不超过10个字符、不包含空格的非空字符串；生日按yyyy/mm/dd的格式给出年月日；性别用M表示“男”、F表示“女”；固话和手机均为不超过15位的连续数字，前面有可能出现+。 在通讯录记录输入完成后，最后一行给出正整数K，并且随后给出K个整数，表示要查询的记录编号（从0到N−1顺序编号）。数字间以空格分隔。

引用 4 楼 user-2的回复:scanf后面的这个有问题：ren[i].guhua,ren[i].shouji，因为ren是结构体对象，在访问结构体成员name, birth,guhua、shouji的时候,这些成员又是数组，而且数组的长度不统一，很可能导致问题出现！再者，输入某个结构成员变量，应该指明，而不是整体赋值。 输入变量应指明是什么意思

引用 2 楼 X�Y�J 的回复:不是，我试过把数组长度设的很长，但还是不行  你试试不要一起输入，分开呢，不知道你输入方式有没有问题 scanf("%s", ) scanf("%s", ) ...


Question: 为什么案件case中会出现未定义标识符求解求解

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


Question: 关于回文质数的一个题


Question: 各位大佬，能帮忙看看这个怎么写吗

#include <stdio.h> #include<string.h> int main( ) {     char str[33];     scanf("%s", str);     union Value {         int v;         unsigned char c[4];     } value;     int  j=0;     value.v = 0;     for (; j<32; j++) {         value.v<<=1;         if (str[j] =='1' )             value.v |= 1;     }     printf("%d.%d.%d.%d\n", value.c[3], value.c[2], value.c[1], value.c[0]);     return 0; }


Question: 大佬们，求51单片机擂台小车的源程序


Question: 大佬求助！一直录入不了信息！

if(fopen_s(...)||fp==NULL) {错错错！}

引用 2 楼 寻开心的回复:fopen_s()返回0恰好表示是打开成功了， 不是0反而是错的 仔细看看函数帮助吧 那这个，应该是怎么回事啊😥

引用 1 楼 SuperDay的回复:fopen_s判断返回NULL应该是不对的，应该判断fp==NULL 是fp，有错误百度改了后用&fp


Question: 求问大佬一个C语言问题。

不计较顺序 从20循环到30  拆数 组数  计较顺序 从20循环到100 拆数 组数  处理三位数 从10循环到30 拆数 组数  处理四位数

最笨的办法 200-3000循环呗 判断是3位还是4位， 三位比较百位数和个位数是否相同； 四位数比较千位和个位同时比较百位和十位


Question: c语言新手求指教

3 1 300 157 结果输出了：9801 还对吗

啊，别沉。。。


Question: 求助 C语言程序设计大一 小问题

醉了，不知道你学的是c语言还是c++，怎么后缀是cpp

引用 4 楼 qq_45973448的回复:醉了，不知道你学的是c语言还是c++，怎么后缀是cpp 影响很大吗 默认就是. cpp 我们老师说过记得打后缀. c 我老没这习惯 就用默认的了

引用 2 楼 寻开心的回复:double 类型的输入输出用 %lf ，  %f对应的是float类型， 不用弄混了  scanf部分，你输入的是1.23456， 但是因为格式指定错误， 实际到手的x确是0  所以后面什么算法都无效 这样啊 明白了 谢谢你 哈哈😄

int tmp =x * 100 +0.5 double y = tmp /100.p return y


Question: 作业啊

引用 2 楼 寻开心的回复:堆栈溢出 stack overflow 猜测 很可能是别处的死循环之类的缘故造成堆栈被大量占用，运行到这里刚好再次用到堆栈导致溢出， 只看只一小块儿代码无从定位 如果是死循环之类的，可以从调用代码堆栈当中应该可以找到，是哪个环节被无限循环 确实，你说对了，因为我定义了o这个变量，在for循环的条件中写成了0

有人知道咋回事吗，怎么弄都不行啊


Question: 求助！！！为什么这个代码写出来是这样的？？？

for ( I<=number-1; I>=0; I++ )  I<=number-1 这是一个布尔表达式，结果是0；   此时，i因为前面的for循环的缘故是5，这个循环就相当于是 for （I=5; I>=0; I++). 所以输出了a[5]这个越界的数组内容


Question: 有向带权图的关键路径问题，求大佬帮忙看一下为什么死循环了

有人吗，。。自顶一下


Question: 求助  C语言小白关于数组的问题

唉，输入后面的有问题，m，i，j三个量的关系没搞清，你去看看m你是怎么用的

谢谢大家  希望大家可以帮我解答一下


Question: c语言入门者


Question: 简单的指针问题

又发明了新语法了呗

fun test是啥意思呢？

用指针 void test(void *tmp) {   if(tmp) { *((int*)tmp) = 3; } }


Question: 关于数组的问题

引用 2 楼 qq_45946336 的回复:[quote=引用 1 楼 user-2的回复:]来讨论代码的论坛贴图求助我也是长见识了,何况还是旋转过的. 电脑课急着发没注意，不好意思，那个图点开就是正的[/quote] 复制粘贴代码也不费事,另外那个图点开还是倒着的

引用 1 楼 user-2的回复:来讨论代码的论坛贴图求助我也是长见识了,何况还是旋转过的. 电脑课急着发没注意，不好意思，那个图点开就是正的

来讨论代码的论坛贴图求助我也是长见识了,何况还是旋转过的.


Question: 请问，这道题用函数的递归调用怎么写啊

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


Question: c语言malloc的问题

引用 6 楼 libralibra的回复:一条街造了很多玻璃房子,早都造好了,因为是玻璃的,能看里面是什么东西. 你土豪,花钱找开发商买了10栋,开发商给你10个房本,宣布这10个房子属于你了,里面随便换东西. 第11栋不管有没有房本,你都能看见里面是什么. 其实第11栋不要房本也能看,只要你知道你的10栋在哪里,挨着走过去就能找到.可是如果你换了不属于你的房子里面的东西就犯法了(程序可能出错) 大哥感谢(❁´ω`❁)，看完你的就明白了。我这样的菜鸟很希望有你这样的大佬指点。万分感谢

引用 1 楼 @矛盾综合体的回复:首先你需要明白，地址一致存在，不管你用没用，就好像硬盘就给你安好了，没有拆掉，他就在那里，这是计算机制作时就定好的，至于你执行这个malloc等语句，只是你告诉计算机，这段内存你在用，然后让一个指针指向这段内存的地址，然后你可以通过这个指针进行操作 运算等。 举个例子：现在有数据恢复这种技术，利用的基础原理就是计算机不会主动删除信息，只会判决用没用，有用就做一个标记。 所以在写链表的时候需要注意内存泄露等安全问题。 多谢大佬解答。万分感谢。感谢

C语言不检查数组下标是否越界。

a+i 只是一个加法计算而已  和 1+1 没什么区别

是一直不是一致


Question: 复制二维数组，哪里错误了，看不出来

第二个for循环，你将r写成了c， for(r=0;c<ROWS;r++)应该是for(r=0;r<ROWS;r++) 而且我想问一下row参数没用的话做什么？完全复制一个二维数组，不论的话，应该将行列都作为参数传递到函数，进行复制，不要用宏 这样你的函数适用性就大大降低，只能拷贝一类数组了。


Question: 要是可以的话，有人能教教我吗？谢谢大家！

引用 5 楼 一条咸鱼八百里 的回复:[quote=引用 1 楼 @矛盾综合体的回复:]实际上应该尽量少用gets的，因为存在越界问题（具体可以自己找找），然后重点谈谈你问的问题，首先先讨论一下为什么有gets这个函数 gets是一个行缓存输入，相比较于scanf而言可以接受到空格之类的一些特殊字符，怎么判定你输入完成呢？行缓存，输入一行就算完成 如果没有一行就要结束，就以\n作为结束标志。不过个人建议用fgets，而且用gets基本上会报警告（尽管不影响运行）。 至于为什么运行结束，那是因为你输入n的时候按键的回车键被gets接收，然后后面的被m接收，所有产生了你的问题。但是怎么解决呢？ 最直接的，调换运行输入顺序，把gets提到前面去，后面接两个scanf。第二种方法，用getchar接收掉第一个scanf后面的回车，也就是在 第一个scanf和gets中间加一个getchar。 对了，这个20分数我要怎么给你呀？(像"百度知道"是要发帖人点一下"最佳"，分数才会给答题人的)[/quote]  首先非常感谢您的心意，我以前一直逛的是问答和博客区，很少在论坛区逛，所以这个也不怎么会，应该有采纳类似的吧！ 不过也没什么，积分这东西不重要，你懂了，才重要。再次感谢！

引用 1 楼 @矛盾综合体的回复:实际上应该尽量少用gets的，因为存在越界问题（具体可以自己找找），然后重点谈谈你问的问题，首先先讨论一下为什么有gets这个函数 gets是一个行缓存输入，相比较于scanf而言可以接受到空格之类的一些特殊字符，怎么判定你输入完成呢？行缓存，输入一行就算完成 如果没有一行就要结束，就以\n作为结束标志。不过个人建议用fgets，而且用gets基本上会报警告（尽管不影响运行）。 至于为什么运行结束，那是因为你输入n的时候按键的回车键被gets接收，然后后面的被m接收，所有产生了你的问题。但是怎么解决呢？ 最直接的，调换运行输入顺序，把gets提到前面去，后面接两个scanf。第二种方法，用getchar接收掉第一个scanf后面的回车，也就是在 第一个scanf和gets中间加一个getchar。 对了，这个20分数我要怎么给你呀？(像"百度知道"是要发帖人点一下"最佳"，分数才会给答题人的)

引用 2 楼 不闻窗外事的回复:把你的scanf改成  scanf("%d %d %s", &m, &n, s);,再试下 这边题目要求三行输入啦……不过还是谢谢你呀！(•͈ᴗ•͈ૢૢ)❊⿻*

引用 1 楼 @矛盾综合体的回复:实际上应该尽量少用gets的，因为存在越界问题（具体可以自己找找），然后重点谈谈你问的问题，首先先讨论一下为什么有gets这个函数 gets是一个行缓存输入，相比较于scanf而言可以接受到空格之类的一些特殊字符，怎么判定你输入完成呢？行缓存，输入一行就算完成 如果没有一行就要结束，就以\n作为结束标志。不过个人建议用fgets，而且用gets基本上会报警告（尽管不影响运行）。 至于为什么运行结束，那是因为你输入n的时候按键的回车键被gets接收，然后后面的被m接收，所有产生了你的问题。但是怎么解决呢？ 最直接的，调换运行输入顺序，把gets提到前面去，后面接两个scanf。第二种方法，用getchar接收掉第一个scanf后面的回车，也就是在 第一个scanf和gets中间加一个getchar。 哦！这样啊！谢谢大佬！⊙∀⊙

引用 6 楼 @矛盾综合体的回复:[quote=引用 5 楼 一条咸鱼八百里 的回复:] [quote=引用 1 楼 @矛盾综合体的回复:]实际上应该尽量少用gets的，因为存在越界问题（具体可以自己找找），然后重点谈谈你问的问题，首先先讨论一下为什么有gets这个函数 gets是一个行缓存输入，相比较于scanf而言可以接受到空格之类的一些特殊字符，怎么判定你输入完成呢？行缓存，输入一行就算完成 如果没有一行就要结束，就以\n作为结束标志。不过个人建议用fgets，而且用gets基本上会报警告（尽管不影响运行）。 至于为什么运行结束，那是因为你输入n的时候按键的回车键被gets接收，然后后面的被m接收，所有产生了你的问题。但是怎么解决呢？ 最直接的，调换运行输入顺序，把gets提到前面去，后面接两个scanf。第二种方法，用getchar接收掉第一个scanf后面的回车，也就是在 第一个scanf和gets中间加一个getchar。 对了，这个20分数我要怎么给你呀？(像"百度知道"是要发帖人点一下"最佳"，分数才会给答题人的)[/quote]  首先非常感谢您的心意，我以前一直逛的是问答和博客区，很少在论坛区逛，所以这个也不怎么会，应该有采纳类似的吧！ 不过也没什么，积分这东西不重要，你懂了，才重要。再次感谢！[/quote] 谢谢你！！！真的十分感谢！


Question: 使用libjpeg-turbo进行编解码，如何实现多线程？

应该是每一行上下问相关了，jpeg不清楚，但是gif的下一帧就会依赖上一帧，估计jpeg类似。如果图片切片后每个切片相互独立就可以多线程，不然就要想办法处理了

那你问题都没描述清楚一点

引用 1 楼 user-3 的回复:楼主什么逻辑？单线程不对，用了多线程就能解决问题了？ 这不是我的意思，单线程没问题，我想要多线程加速

楼主什么逻辑？单线程不对，用了多线程就能解决问题了？


Question: 大神帮忙看看，最后的printf的逻辑，给小弟捋一下，感谢

大致明白了，怎么给你加分

宏定义只是替换，所以最后一个print替换后是 2*（3+（3+1）*5+1）=48

#define 不要忘记是宏，  宏的作用是完整的替换代码， 带参数的宏也不会对参数做任何的计算处理的

有个小坑  #define N 3 #define Y(n) ((N+1)*n) 代入  2*(N+Y(5+1)) = 2* （ 3  + ((3+1）*5+1 )  = 2*  （ 3 + 4*5 + 1 ） = 2 * 24 = 48  这就是使用#define 需要注意的地方 正确的定义应该是这样的 #define Y(n) ((N+1)*(n))  这样结果才是54

这有啥不明白的吗？


Question: 有一个关于数组的问题想请教一下

因为 数组不是指针

sizeof是空间总大小，不是数组有几个元素，数组元素个数要这样  sizeof(num)/sizeof(num[0])


Question: 大佬们，看下这道题怎么做

引用 5 楼 寻开心的回复:那句s[k-1] = ch 造成的 。  文件结束符号0被‘2’取代了，原来的c是在之间的交换中产生的 printf输出都告诉你了，不知道的地方再继续加printf看呗 还看不明白，把printf改成 for（x=0； X<7,x++) printf("%c", s[x] ); 把str的每个字符都输出出来，包括字符0，那样更清楚 我懂了，万分感谢哈哈

引用 3 楼 寻开心的回复:因为第三个字符被设置成为了 0， 0表示字符串结束了 那么2c又是哪来的值

因为第三个字符被设置成为了 0， 0表示字符串结束了

引用 1 楼 寻开心的回复:#include<stdio.h> #include<string.h> void fun(char*s,int k,char ch) { char c; unsigned int i; for(i=k-1;i<strlen(s);i++) { c=s[k-1]; s[k-1]=s[i+1]; s[i+1]=c; printf("%d %s\n", i, s); } printf("%d %d %c %s\n", k-1, i+1, ch, s); s[k-1]=ch; s[i+1]=0; printf("%d %d %s\n", k-1, i+1, s); } int main() { char c[20]="abcdefg"; fun(c,3,50); puts(c); return 0; }   帮你加了几个printf函数，你看看输出结果，就知道了 不会做断点，就多这样做几个输出 谢谢大佬，这办法不错呀，但是小弟还有个不明白，那个第i=6的时候为啥得ab


Question: 新手求助

代码没问题吧，你的错误是什么，运行结果不对吗？你的运行结果是啥

引用 2 楼 t_vvvv 的回复:[quote=引用 1 楼 fireyou的回复:]代码没问题吧，你的错误是什么，运行结果不对吗？你的运行结果是啥 我的运行结果和样例输出一样，但是在oj上提交后显示答案错误……[/quote] 代码没有问题，不需要考虑出发时间晚于到达时间的情况，能达到题目所要求的功能

引用 1 楼 fireyou的回复:代码没问题吧，你的错误是什么，运行结果不对吗？你的运行结果是啥 我的运行结果和样例输出一样，但是在oj上提交后显示答案错误……


Question: 哪里错了刚学的不懂 没看出哪里错了

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

引用 3 楼 棉猴 的回复：#include <stdio.h> void qinmishu(); int main(int argc, char* argv[]) { 	qinmishu(); 	return 1;  }  void qinmishu() { 	int a, b, s, c=0, d = 0; 	for(a=1; a<=500; a++) 	{ 		for(b=1; b<a; b++) 		{ 			if(a%b==0) 			{ 				c = c+b; 			} 		} 		for(s=1; s<c; s++) 		{ 			if(c%s==0) 			{ 				d+=s; 			} 		} 		if(d==a && a<c) 		{ 			printf("%d %d\n", a, c); 		} 		c = 0; 		d = 0; 	}  } VC++6.0调试结果 谢谢🙏

在判断d==a之后是不是应该给d清一下0。不然，d每次都是基于上次的值继续加。

直接贴代码吧


Question: 救救孩子，C语言题目

自己写 往后挪就要先挪尾巴， 但是别忘记了， 字符串结尾要有一个'\0'字符作为结束。


Question: 指针函数求助

如果我没看错的话，你用的是VC6.0 。给你个代码进行参考吧。  #include<stdio.h> #include<stdlib.h>  typedef void* VoidPtr; typedef int* IntPtr;  /* \ brief 升序排序 */ int asc(VoidPtr a, VoidPtr b) { 	return *(IntPtr)a - *(IntPtr)b; }	  /* \ brief 降序排序 */ int des(VoidPtr a, VoidPtr b) { 	return *(IntPtr)b - *(IntPtr)a; }   int main(int argc, char* argv[]) { 	// 假设数组 	int arr[] = { 5,6,0,1,2,3,8,9,4,7 }; 	// 求数组大小 	int size = sizeof(arr) / sizeof(int); 	// 全部进行升序 	qsort(arr, size, sizeof(int), asc); 	// 假设指定的位置是6 	int n = 6; 	// 进行指定位置降序排序 	qsort(&arr[6], size - n,sizeof(int), des); 	// 打印结果 	for (size_t i = 0; i < size; i++) 	{ 		printf("%d\t", arr[i]); 	} 	return 0; }


Question: 请大神知道下这段代码怎么理解

把#define的文本替换就行


Question: C语言数据结构作业，大佬们可以给点建议吗?

你最好请教你们老师，这题目怎么看。

引用 5 楼 清晨与猫鱼的回复:我相信你这题目意思很多人看得出来，但是你给出的数据，能看懂的估计就只有你自己了。 这是老师布置的原题，我也看不太懂

引用 3 楼 清晨与猫鱼的回复:这就不合适了，毕竟这是你的作业，会不会也是靠你自己。 我死了啊啊啊啊……

这就不合适了，毕竟这是你的作业，会不会也是靠你自己。

引用 1 楼 清晨与猫鱼的回复:我写了 4篇关于C数据结构的代码实现，在我的博文里，分别是 动态数组，单链表，二叉树，AVL自平衡树。你可以参考一下，这算不算建议呢。 可以按照上面信息给个代码参考参考吗？


Question: 急！急！51单片机


Question: 指针编写函数求助

#include<stdio.h>  int average(int *p, int n, int *pmax, int *pmin) { 	int max = p[0], min = p[0]; 	int aver = 0; 	for (int i = 0; i < n; i++) 	{ 		if (max < p[i]) 			max = p[i]; 		if (min > p[i]) 			min = p[i]; 		aver += p[i]; 	} 	*pmax = max; 	*pmin = min; 	aver = (int)(1.0*aver / n); 	return aver; } int main() { 	int score[10] = { 50,60,70,80,90,100,89,68,78,95 }; 	int pmax=0, pmin=0; 	int aver = average(score, 10, &pmax, &pmin); 	printf("平均值=%d\n", aver); 	printf("最大值=%d\n", pmax); 	printf("最小值=%d\n", pmin); 	getchar(); 	return 0; } 仅供参考

终于看到 void main 是哪儿来的。 这是什么学校老师留的作业啊    问题不难， 自己写吧。  有错误再贴代码（别贴图），发问题


Question: c语言 文件管理问题

引用 9 楼 寻开心的回复:sum=0 把丢哪里去了？没有初始化 在第三次打开之前， printf一次sum，看看是多少 然后截图，有问题的数据输出 您还没睡啊 有劳您了 明早我再试试

初始化后printf sum一直是0 为什么没进行求和咧

引用 13 楼 寻开心的回复:哦， 原因是 文件用a方式打开的，自动定位到文件的尾巴了， 所以读不出来数据 应该是r+方式打开读写操作 yeah 总算整明白了 太谢谢了

不行啊 我试过了 一下是复制的代码 #include"stdio.h" main() { 	FILE *f1; 	int number, sum,i; 	printf("Contents of DATA file\n"); 	f1=fopen("DATA","w"); 	for (i=1;i<=30;i++) 	{ 		scanf("%d",&number); 		if(number==-1) break; 		putw(number,f1); 	} 	fclose(f1); 	f1=fopen("DATA","a"); 	while((number=getw(f1))!=EOF) 	{ 		sum+=number; 	} 	putw(sum,f1); 	fclose(f1); 	f1=fopen("DATA","r"); 	printf("\nContenes of DATA file\n"); 	while((number=getw(f1))!=EOF) 	    printf("%d",number); 	fclose(f1);     return 0; }

越改越乱  求和并写入部分的while int sum=0； while（（number=getw（f1）） ！= EOF ） sum+=number； putw（sum，f1）； fclose（f1）  最后的输出的while不要改

最后我用 	while((number=getw(f1))!=sum) 	    printf("%d",number); 	while((sum=getw(f1))!=EOF) 	    printf("%d",sum); 输出文件里的数据   只能显示number不显示sum是怎么回事呢 能不能这样写呢？

还循环什么啊？！ while自身就是循环读数据，直到读完为止 while前sum=0； while内 sum += number 就完了。 还弄循环搞什么啊

我如果第二个for语句从i等于2开始 如何实现停止循环了

while ( .... ) {     if (I=1) {. // 给I赋值1，         sum=number;     }     for (I=1; I<=30; I++ ) {.   // 干嘛要把number 加上30次呢          sum = sum + number;     } }  你自己跟踪跟踪sum的变化，不会debug调适就多打几行printf在这里 这段逻辑混乱

快来位大神教教孩子吧

引用 楼主 weixin_45812125的回复:题目和我编的程序如图（第五题）请各位前辈看看问题出在哪儿了 该怎么改 多谢 如何实现sum的添加和输出呢？


Question: STM32单片机如何使正在运行的数码管暂停并显示当前数字？

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

数码管是要不停扫描才能显示的，你应该暂停更新数字的定时器，但维持扫描的定时器


Question: 帮忙看看PTA 估值一亿的AI核心代码 测试点3、4不通过

测试点3可能是can youp这种，不能替换而是直接输出；测试点4不清楚，我提几个要注意的点：一是大小写转换别把A和Z漏掉了；二是考虑会不会重复替换比如can I会不会先替换成can you再替换成I can，还有can you you这种，虽然这个好像不在测试点里；三是要替换的字符串处于边界的情况有没有考虑周到；四是下划线_这个特殊的符号和字母连在一起比如"_I"不算独立的I。

你不贴自己的代码，谁知道哪里有错 引用 2 楼 qq_24683975 的回复:[quote=引用 1 楼 636f6c696e的回复:]本题要求你实现一个稍微更值钱一点的 AI 英文问答程序，规则是：  无论用户说什么，首先把对方说的话在一行中原样打印出来；  消除原文中多余空格：把相邻单词间的多个空格换成 1 个空格，把行首尾的空 格全部删掉，把标点符号前面的空格删掉；  把原文中所有大写英文字母变成小写，除了 I；  把原文中所有独立的 can you、could you 对应地换成 I can、I could—— 这里“独立”是指被空格或标点符号分隔开的单词；  把原文中所有独立的 I 和 me 换成 you；  把原文中所有的问号 ? 换成惊叹号 !；  在一行中输出替换后的句子作为 AI 的回答。  你不按题目写有错误不是很正常的么？ 我输出结果和题目没有问题，他说的要求我都试过了[/quote]

这道题题目细节很多，容易出错的就是边界没控制好，比如替换 I can.，要替换字符串的两端有各种符号，另外就是替换I的替换应在can you，could you之前

引用 1 楼 636f6c696e的回复:本题要求你实现一个稍微更值钱一点的 AI 英文问答程序，规则是：  无论用户说什么，首先把对方说的话在一行中原样打印出来；  消除原文中多余空格：把相邻单词间的多个空格换成 1 个空格，把行首尾的空 格全部删掉，把标点符号前面的空格删掉；  把原文中所有大写英文字母变成小写，除了 I；  把原文中所有独立的 can you、could you 对应地换成 I can、I could—— 这里“独立”是指被空格或标点符号分隔开的单词；  把原文中所有独立的 I 和 me 换成 you；  把原文中所有的问号 ? 换成惊叹号 !；  在一行中输出替换后的句子作为 AI 的回答。  你不按题目写有错误不是很正常的么？ 我输出结果和题目没有问题，他说的要求我都试过了


Question: 大佬们

引用 1 楼 不闻窗外事 的回复:3、变量的命名是有规范的，一般只能使用字母和数组还有下划线，而且数字好像不能作为首字母 5、加法的优先级好像大于&&和|| 10、&&这个符号只要前面的为假就不会再计算后面的内容了，所以n=(c>b)根本没有运算，所以c还是原来的值 n还是原来的值


Question: 大佬们

3.实现作为合法变量名只能以下划线或者字母开头，不能以数字开头，然后变量名只能有下划线或者字母数字，不可以有其他字符 5.这里最简单就是非零即真，以及注意惰性运算（可以查查） 10.重点就是惰性运算了，因为&&前面部分已经为假，后面的计算机不会运算，所以后面的赋值也就没有进行了，所有n就没有变化


Question: c语言程序题

不知道你说指win32的菜单还是控制台窗口下的“菜单”，后者的话，那只是一些选项，你通过printf输出，每一项前面标个数字或字母，然后等待用户输入，你通过判断用户的输入进行对应的处理。 增删改，典型的链表程序啊，如果不会链表的话，用结构体数组也是可以的。


Question: 求各位大佬帮忙解决

二路归并排序 比如 【1 3】 【2 4】 第一步：首先看两个子序列[1,3] [2,4]的第一个元素，1和2对比，把较小的1放在结果的第一位，结果是[1]，删除1。 第二步：看两个子序列[3]，[2,4]的第一个元素，3和2对比，把较小的2放到结果里，结果是[1,2]，删除2。 第三步：看两个子序列[3] [4]的第一个，3和4对比，把较小的3放在结果，结果是[1,2,3]，删除3。 第四步：经过前面三步，只剩下一个子序列[4]，把[4]放在结果，得到最终结果[1,2,3,4]。

引用 1 楼 fireyou的回复:将a和b都copy到一个新的数组中，再对数组中的元素进行排序输出 自己尝试写一下，有问题再提问 老师没教过让我们预习，看不懂


Question: 字符串逆序，求大佬解答！

引用 3 楼 fireyou的回复: void fun(char *x) { 	if(*x){ 		fun(x+1); 		printf("%c",*x); 	}  }  谢谢大佬非常感谢

引用 2 楼 weixin_40290083的回复: 谢谢大佬非常感谢

引用 1 楼 羅昇的回复: void f(char *p) {   if (!p || *p == 0)     return;   f(p + 1);   printf("%c", *p); }  谢谢大佬非常感谢

引用 3 楼 fireyou的回复: void fun(char *x) { 	if(*x){ 		fun(x+1); 		printf("%c",*x); 	}  }  这个方法太简单啦，又容易懂！


Question: 救救孩子吧，就是弄不对。

是否是因为结尾必须输出两行，你在if（n==1）那里，%d后面加个\n试试，如果不能打话，你把完整的代码发出来，不要只发一半，最好不要截图

引用 1 楼 user-3的回复:问题是啥？那里不对？ 就是想得满分，但是1测试点就是一直显示格式错误。

问题是啥？那里不对？

引用 4 楼 羅昇的回复: #include<stdio.h> int main() {   int i, n, a[100];   scanf("%d", &n);   for (i=0; i < n; i++)     scanf("%d",&a[i]);    for (i = 0; i < n; i += 2)     printf("%d", a[i]);   printf("\n");    for (i = 1; i < n; i += 2)     printf("%d", a[i]);   printf("\n");    return 0; }  老哥，咱俩代码测试点刚好错的一样，参考你的运行结果，最后改对了。竟然要在输入1时，打印两个回车太坑了这破题。


Question: 大佬们帮帮我吧，纠结好长时间了。

引用 2 楼 fireyou的回复:难道不是选B吗？ 没看到b错了吗？ 这就是我的问题，你还问一问😂

难道不是选B吗？

应该选C，补码 如果用long型数据，你是没有耐心等到程序运行结束，把long num换成char测试下就知道 了

引用 2 楼 fireyou 的回复:难道不是选B吗？  重要的事情说三遍  补码  补码 补码


Question: C语言找错误

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

double a scanf("%lf", &a) 这样才匹配


Question: 把输出这个月有多少天，换成输出是今年的第几天

printf("请输入年份，回车结束\n");     scanf("%d",&y);     if((y%4==0&&y%100!=0)||(y%400==0&&y%3200!=0)||y%172800==0)         printf("%d是闰年\n",y);     else         printf("%d是平年\n",y);  先解决这个闰年和平年的判断正确性的问题

w=d+y/4-y/100+y/400; 这是做什么的，你定的哪天是星期一，总有一天是要星期一的吧，比如2018年1月1号，没有这个基础在的吗，就好比参照物


Question: VS2019数学函数计算有错误

寻开心大哥是高手，还是他来讲吧。

引用 33 楼 luj_1768 的回复:哎呀，有效数据有关的事，看上去大家不太懂。总有效数字是18位，简化计算有效位是16位，如果能得到后三位的有效数字，可以通过校正算法获得全部数位的精确值。 给讲一下吗？

高精度就用bigdecimal类来处理

一入程序深似海

过来看看哈哈哈

引用 2 楼 liups的回复:函数库通常是不会有错误的，就算有，通常也不是楼主能发现的 有道理啊 不过有时候运气

引用 楼主 要上天的拉布拉多的回复:VS里边的math函数库的pow函数，似乎有错误，当计算15的15次方时，计算结果的后三位是不对的。 这个不是废话吗？高精度计算有专门的库的

应该是溢出了，有一个大数计算的例子，供参考～  #include <stdio.h> #include <stdlib.h> #include <string.h>  #define MAX_NUM_LEN 2048  int cal_factorial(unsigned char *num_list, int num_size, int n);  int cal_val(unsigned char *num_list, int num_size, int base, int num) {     int i = 0, j;     int len = 1, tmp, carry_bit;      num_list[1] = 1;      while (i < num) {         carry_bit = 0;         for (j = 1; j <= len; j++) {             tmp = num_list[j] * base + carry_bit;             num_list[j] = tmp % 10;             carry_bit = tmp / 10;             if (j >= len && carry_bit != 0)                 len++;             if (num_size-1 < len) {/* overflow */                 printf("Overflow!\n");                 return num_size-1;             }         }         i++;     }      return len; }   int main(void) {     unsigned char num_list[MAX_NUM_LEN];     int num_len, i;     int base, power;      memset(num_list, 0, sizeof(num_list));     printf("Please input two numbers: ");     scanf("%d%d", &base, &power);      if (base < 0 && power % 2)         num_list[0] = 1; /* negative number */     else         num_list[0] = 0;     base = abs(base);      num_len = cal_val(num_list, MAX_NUM_LEN, base, power);     printf("len = %d\n", num_len);     if (num_list[0])         putchar('-');     for (i = num_len; i >= 1; i--)         printf("%d", num_list[i]);     printf("\n");     return 0; }   int cal_factorial(unsigned char *num_list, int num_size, int n) {     int carry_bit, i, j, len = 1;     int tmp;      num_list[1] = 1;     for (i = 2; i <= n; i++)     {         carry_bit = 0;         for (j = 1; j <= len; j++) {             tmp = num_list[j] * i + carry_bit;             num_list[j] = tmp % 10;             carry_bit = tmp / 10;             if (j >= len && carry_bit != 0)                 len++;             if (num_size -1 < len) { /* overflow */                 printf("Overflow!\n");                 return num_size-1;             }         }      }      /*     for (i = len; i >= 1; i--)//逆序输出数组就是结果         printf("%d", a[i]);     printf("\n");     */     return len; } 供参考～

引用 24 楼 早打大打打核战争 的回复:[quote=引用 15 楼 liups 的回复:] [quote=引用 14 楼 早打大打打核战争 的回复:] [quote=引用 13 楼 liups 的回复:] [quote=引用 12 楼 liups 的回复:] 或者说参数超出允许（能正确处理）的范围了。 当然，都只是个人推测 sin returns the sine of x. If x is greater than or equal to 2^63, or less than or equal to –2^63, a loss of significance in the result occurs, in which case the function generates a _TLOSS error and returns an indefinite (same as a quiet NaN).  以上引用自MSDN98（针对VC6.0的） 2的63次方大约是9.2233720368548e+18，所以这个不是BUG！是参数超出范围了。[/quote]  sin的输入参数是float/double/long double，如果输入整型会转换为浮点型，VC6的限制只能说是它自身的问题，不是理由，况且按这个说明。输入超出范围VC6会输出NaN，而不是一个错误结果。而且为什么别的编译器可以正确得出结果，VC++ 32位编译器不能？ [/quote] 我认为你这是牵强附会了！也许其他编译器能处理1e22，但是肯定也有其限制，不可能是随便输入什么都行的。[/quote]  输入范围−2^63 到 +2^63的限制实际来自于x86 FPU的fsin指令（注意C数学库的sin并没有写这个限制），但是intel文档上明确说了输入超过范围，st(0)保持未改变，也就是fsin(-1e22)应该输出-1e22，但是VC++ 32位编译器（实测VS2015）sin(-1e22)的结果既没有返回NaN，也不是-1e22，而是一个错误值-0.4121434 [/quote] 学习了

顶一下dddddddddddsss

是你写错了吧

引用 15 楼 liups 的回复:[quote=引用 14 楼 早打大打打核战争 的回复:] [quote=引用 13 楼 liups 的回复:] [quote=引用 12 楼 liups 的回复:] 或者说参数超出允许（能正确处理）的范围了。 当然，都只是个人推测 sin returns the sine of x. If x is greater than or equal to 2^63, or less than or equal to –2^63, a loss of significance in the result occurs, in which case the function generates a _TLOSS error and returns an indefinite (same as a quiet NaN).  以上引用自MSDN98（针对VC6.0的） 2的63次方大约是9.2233720368548e+18，所以这个不是BUG！是参数超出范围了。[/quote]  sin的输入参数是float/double/long double，如果输入整型会转换为浮点型，VC6的限制只能说是它自身的问题，不是理由，况且按这个说明。输入超出范围VC6会输出NaN，而不是一个错误结果。而且为什么别的编译器可以正确得出结果，VC++ 32位编译器不能？ [/quote] 我认为你这是牵强附会了！也许其他编译器能处理1e22，但是肯定也有其限制，不可能是随便输入什么都行的。[/quote]  输入范围−2^63 到 +2^63的限制实际来自于x86 FPU的fsin指令（注意C数学库的sin并没有写这个限制），但是intel文档上明确说了输入超过范围，st(0)保持未改变，也就是fsin(-1e22)应该输出-1e22，但是VC++ 32位编译器（实测VS2015）sin(-1e22)的结果既没有返回NaN，也不是-1e22，而是一个错误值-0.4121434

精度问题，不算BUG

很难很深奥~大家是在学术研究还是解决实际问题？

精度问题。通常这种情况，直接用py就没有任何问题了，py支持任意大的整数。用C还得自己构造大整数，麻烦。

有资料吗，我也是有想往软件方面靠

要是能正确就不正常了， 15^15 的结果本来就没法用 double 精确表示，不信的话你可以手动把 15^15 算出来赋给一个 double，然后 printf 一下试试。

15^15是4.3789389038086e+17 而MSDN中查询得知： pow does not recognize integral floating-point values greater than 2^64, such as 1.0E100.  2的64次方是1.844674407371e+19  没有溢出！

我也想过溢出的问题，pow函数求15^15只是最后两位不对，但是16^16又是对的


Question: int，float，double，char

引用 4 楼 不闻窗外事的回复:这个应该是与编译器有关，一般正常来说float和double都可以正常转为int，但是由于double和float与int在内存中的计数方式不同，所以可能是会出现0的，但是我使用的gcc编译器好像就不会这样，都是可以正常转的 嗯，我下次换一个编译器试试

看内存怎么存，以及看函数怎么处理内存数据。

这个事儿的根源还要看前两天的一个帖子上反应的问题 double  d = .... ; printf（“%d”， d） 然后结果输出为0了。  检测结果堆栈里面放了一个8字节的，低位4字节是0， 所以推导出了前面的那个结论    这个函数不是常规函数，是这种参数数量可变的函数

真的吗，今天上课老师打的时候出现的错误

引用 楼主 qq_45914759 的回复:表明一下今天学到的，不喜勿喷，发现错误，望大佬指明，非常感谢   在float函数调用中不可以用int型的数，传过去会为零，其他类型还没试，试了在发帖别瞎说  形参float 实参int 不会导致参数是0

有个球意义啊，  实验出错会出什么效果吗？  double数据用int数据也未必次次都是0， 碰巧了而已  有这个闲功夫还不如干点别的呢


Question: 编程题求证

你这个不合题义，只能输入整形，那是数列，而非函数

没什么需要改的了 非要改可以考虑 y变量去掉 if else 改 ?: 写在printf里面 printf("y=%d\n", x>=0 ? 2*x+1 : x*x-1);

最后的printf加个换行符

引用 4 楼 weixin_45718499 的回复:[quote=引用 3 楼 user-4的回复:]硬要说有什么问题的话，就是当输入为字符或者是浮点类型数据的时候，输出会有异常，可以考虑加个输入错误的处理函数。 y=x*x-1；有什么函数能直接表示x*x吗？[/quote]x*x 就是最好的表达 别骚操作

引用 3 楼 user-4的回复:硬要说有什么问题的话，就是当输入为字符或者是浮点类型数据的时候，输出会有异常，可以考虑加个输入错误的处理函数。 y=x*x-1；有什么函数能直接表示x*x吗？


Question: 请大神指导下这段代码里“inline bool operator < (const candim &r) const”的作用是什么？

这是自定义了一个比较运算符 ,<号。       if(ret = memcmp(usr_id , r.usr_id  , sizeof(usr_id ) - 1)) return (ret < 0); 这一句，首先使用内存比较来比较两个user_id,如果两者不等，那么，如果user_id较小，则返回TRUE,否则返回FALSE.  如果这一句未返回，那么就是相同的user_id,则比较vcard_no.也是类似的，vcard_no较小，则返回TRUE.

感谢大神指点！这段时间在学代码，还请您有时间多来指导下


Question: 求助

自己写代码 出错了再跳上来询问


Question: 基本语法求教：*argv[argc-1]  、 argv[--argc]　下标的区别？

if((bg=(*argv[argc-1]=='&'))!=0) 对 bg 赋值的结果(？？？)，与 0 作比较，目的是什么？ 能不能详细讲一下

引用 5 楼 user-4 的回复:argc-1不表示"argc 的值等于本身减　1"吧 引用 5 楼 user-4 的回复:argc-1不表示"argc 的值等于本身减　1"吧 ---- 先谢过各位了。 引用 6 楼 oria2006 的回复:假设 argc = 2 argc-1 执行后 argc 还是等于 2 --argc 执行后argc 等于 1  bg=(*argv[argc-1]=='&'）这条语句的意思是，判断argc字符串数组中argc-1的位置是不是字符"&"，如果是就等于1，不是就等于0 ----*argv[argc-1]=='&' 判断argc字符串数组中argc-1的位置是不是字符"&"，如果是就等于1，不是就等于0 -----这个，我懂。问题是，下面的 ：if((bg=1)!=0) 或 if((bg=0)!=0) 是什么意思？( bg=1) 或 (bg=0) 是不是 总是等于 1？

if((bg=(*argv[argc-1]=='&'))!=0) !0 = 0 是什么意思？

argc-1 没改变argc的值 --argc改变了argc的值 就这个区别

看了524页不会连这个都没搞清楚吧

*argv[argc-1]  、 argv[--argc]，  下标　argc-1　和下标　--argc　都表示　argc 的值 等于本身减　1。二者有什么区别吗？为什么这样用？ 区别在于 argc-1本身不改变argc，--argc改变了argc，也就是小了1

argc-1不表示"argc 的值等于本身减　1"吧


Question: 新手求助

谁说的是等于pt[3]啊，这个类型都不对  除非pt是char ** 这样的指针， 否则都不可能编译通过吧  假定 p = pt + 1  *（pt+1）【2】   和 * p【2】 一样 *p[2] 这个和p【3】 是一个类型吗？！    类型都不匹配，何来的等价

pt是指针数组的地址的话还有点才有意义。


Question: 初学者学校习题 求助！

可是输入整型的话 怎么样才能满足浮点的输出要求呢

浮点没有奇偶！平均值才是浮点！


Question: 如何中序建树，数据结构c语言

什么叫中序建树？ 我刚写的一个关于二叉树的博文，你可以参考一下。 https://blog.csdn.net/BCMY0110/article/details/103382519

现在的学生真是让人摇头。


Question: 求教各位

当然可以。你可以尝试写代码，有问题的地方来提问

1<a<2  优秀 3<a<4  良好  你说的这种方式是不恰当的。正确的方式是使用xml,或者ini文件


Question: 请问为什么同一个函数运用了return 1/0/-1,3个

引用 1 楼 user-1的回复:为什么_swap交换的是char？ 这个是我在这里面找的，


Question: c语言结构体

遍历结构体， 看结构体的姓名是否跟查找的姓名相同


Question: c语言结构体数组指针问题

struct stu {     char name[8];     char num[15];     float score[4];     float sum;     float aver;  } st[]; 这里要么定义一个最大的数组，要么放一个指针等待被赋值   int main(void) {     int n, i, j;     struct stu *p=NULL;      printf("请输入学生人数：");     scanf("%d",&n);      p=(struct stu*)malloc(sizeof(struct stu)*n); // 这里申请了内存，注意是放到p里面了  // // 从这个前后关联代码来看， st的定义应该是。 全局的指针类型， 前面的内存申请后，赋值给st才对 //     for(p=st ;p-st<n;p++)  //这里p赋值st， 前面申请的指针丢了。 st还是处于一个奇怪的状态中     {  // 下面的录入，内容都是放到未知空间去了          scanf("%s%s",p->num, p->name);          for(i=1;i<=4;i++)         {             scanf("%f",p->score[i]); // 这个要求float指针， 结果参数是一个double类型，显然也不对         }     }  // 从循环提出来之后， p还指向哪里呢， 下面这个调用也是瞎搞     Sum(p, n);     Sort(p, n);     Aver(p, n);  后面的不用看了，前面的先解决了再说吧。 一会儿用p，一会儿用st， 可是这两个东西都没有处理好。


Question: c语言编程的一些小问题

在case后面的break没有加上去，在c的底层实现的时候，如上，case 2 ，满足的时候，后面没有跟上break；会自动往后面运行，后面的case与brak均不起作用


Question: 这个gcd对怎么做呐

引用 1 楼 寻开心的回复:临时写了一个代码，没有仔细测试 #include<stdio.h> #include<stdlib.h> #define RANGE 2001 short gcdArray[RANGE][RANGE]; // 数组的值就是二维下标的最大公约数 int countAB[RANGE]; // 保存ab区间内的，最大公约数是数组下标的数对儿数量 int countCD[RANGE];  short gcd(short x, short y) // 网络上抄袭的求最大公约数的算法 {     while(y^=x^=y^=x%=y);     return x; } int main() {     memset(countAB, 0, sizeof(int)*RANGE);     memset(countCD, 0, sizeof(int)*RANGE);     int i, j;     for ( i=1; i<RANGE; i++)         for ( j=i; j<RANGE; j++)             gcdArray[i][j] = gcdArray[j][i] = gcd(i,j);     short a, b, c, d;     scanf("%hd %hd %hd %hd", &a, &b, &c, &d);     for( i=a; i<=b; i++ )         for ( j=i+1; j<=b; j++)             countAB[gcdArray[i][j]]++;     for (i=c; i<=d; i++)         for (j=i+1; j<=d; j++)             countCD[gcdArray[i][j]]++;     int count = 0;     for (i=1; i<RANGE; i++)         count += countAB[i]*countCD[i];     printf("%d", count);     return 0; } 谢谢了，我回去测试一下


Question: 请问各位老师们，我的这个万年历为什么没有日期

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


Question: C语言作业不会写，救救孩子吧

这种小屁孩还是好好收拾一顿的好。  1 totaolTree = 500米一共501个点  2 把区域排个序，小的在前大的在后  3 从头开始，对区域循环一遍        判断和下一个区域是否相交， 相交则合并相交区域，继续下一个区域       如果和下一个区域不相交，计算区域长度，用totalTree-=此区域长度 输出totoalTree  就这思路了，代码自己写吧


Question: 请问字母怎么改变？

引用 3 楼 addddddee的回复:给你个我使用的代码 BOOL Decode(BYTE* lpDataBuf,int& nDataLen,const BYTE* lpDecodebuf){ 		//if(nDataLen != (Decodebuf.GetSize()/2)){//Decodebuf的数据大小可能没有更新 		//	ASSERT(FALSE); 		//	return FALSE; 		//} 		nDataLen = nDataLen;//Decodebuf.GetSize()/2;ASSERT( Decodebuf.GetSize()%2 ==0); 		 		for(int i=0;i<nDataLen;i++){ 			lpDataBuf[i] = lpDecodebuf[i*2+1] -lpDecodebuf[i*2] - (i*3); 		} 		return TRUE; 	} 	void Code(const BYTE* lpDataBuf,int nDataLen,BYTE* lpCodebuf){//lpCodebuf的大小最小为nDataLen*2 		//if(Codebuf.GetSize()!= (nDataLen*2)) 		//	Codebuf.SetSize(nDataLen*2);  		srand((unsigned)time(NULL));  		for(int i=0;i<nDataLen;i++){ 			lpCodebuf[i*2] = rand()%255; 			lpCodebuf[i*2+1] = lpDataBuf[i] + lpCodebuf[i*2] + (i*3); 		} 	} 我感觉我学了个假c

引用 1 楼 寻开心的回复:第一次加密： 循环字符串。判断字符串当中字母是否是数字， 是的话把它的值加上 ‘a’-‘0’。 第二次加密：循环字符串， 每个字符加上k， 然后判断结果如果大于‘z'，那么把数字再加上一个’a'-‘z' 代码自己写 嗯，谢谢，这个(2)我想了好长时间，都没想到怎么改。


Question: 递归实现杨辉三角（c语言）


Question: 救救孩子吧

非常感谢 由于有点急，没有收到回复，所以再发了一次 ，谢谢解答 我明白了

105 实际上表示两个数的和 大于9 ‘0’是48， 两个数字字符a和b求和是否大于9，转化成为整数求和就是  ( a-48) + (b-48) >9     和 a+b > 96 + 9 = 105 等价啊  程序就是把字符到数字之间的转换整合到一起来写的 48就是‘0’ 58 就是 ‘9’+1


Question: 救救孩子吧

发这么多贴做什么啊 ，有一个就够了   另一个帖子里面给你解释了  两个字符对应的数字相加是否大于9 a-‘0’ + b-‘0’  >9.     等价于。a+b > 9 + '0' + '0' = 105  48 就是 ‘0’ 58 就是 ‘9‘+1


Question: C语言定义变量地址问题

引用 9 楼 qq_45778098 的回复:[quote=引用 7 楼 liups的回复:][quote=引用 6 楼 qq_45778098 的回复:] [quote=引用 5 楼 liups的回复:]我的看法：应该是连续的，但是并没有标准规定它是连续的，所以编程中不应该使用“假定它就是连续的”这一特点！ 老师说，不同编译环境得到的内存地址可能相同，可能不相同[/quote] 你老师说得没错，但是我不是说相同与否。而是类似这样： 假如int * p=&a; 那么 *p可以访问a，如果先来一个p++，然后*p实际上就可以访问b了。这种情况通常是会发生的，但是不能这样写程序[/quote] 如果是这样的话数组的作用就淡化了，大致明白了[/quote] 更正一下，写了一个测试程序，结果很有意思，地址不是增加的，反而是减少的！ 先放代码： #include <iostream> using namespace std; int main() {     int a,b,c;     a=b=c=8;     int *p,*pb;     p=&a;     pb=&b;     *p=7;     p--;     *p=9;     cout <<a<<' '<<b<<' '<<c<<' '<<(*p)<< endl;     system("pause");     return 0; } 再放结果，如图：

引用 7 楼 liups的回复:[quote=引用 6 楼 qq_45778098 的回复:] [quote=引用 5 楼 liups的回复:]我的看法：应该是连续的，但是并没有标准规定它是连续的，所以编程中不应该使用“假定它就是连续的”这一特点！ 老师说，不同编译环境得到的内存地址可能相同，可能不相同[/quote] 你老师说得没错，但是我不是说相同与否。而是类似这样： 假如int * p=&a; 那么 *p可以访问a，如果先来一个p++，然后*p实际上就可以访问b了。这种情况通常是会发生的，但是不能这样写程序[/quote] 如果是这样的话数组的作用就淡化了，大致明白了

如果是这样的话数组的作用就淡化了，大致明白了

引用 6 楼 qq_45778098 的回复:[quote=引用 5 楼 liups的回复:]我的看法：应该是连续的，但是并没有标准规定它是连续的，所以编程中不应该使用“假定它就是连续的”这一特点！ 老师说，不同编译环境得到的内存地址可能相同，可能不相同[/quote] 你老师说得没错，但是我不是说相同与否。而是类似这样： 假如int * p=&a; 那么 *p可以访问a，如果先来一个p++，然后*p实际上就可以访问b了。这种情况通常是会发生的，但是不能这样写程序

引用 5 楼 liups的回复:我的看法：应该是连续的，但是并没有标准规定它是连续的，所以编程中不应该使用“假定它就是连续的”这一特点！ 老师说，不同编译环境得到的内存地址可能相同，可能不相同

引用 3 楼 不闻窗外事的回复:[quote=引用 2 楼 qq_45778098 的回复:] [quote=引用 1 楼 不闻窗外事的回复:]你可以打印看看，这个正常应该是连续的，但也不一定 printf("%p  %p  %p", &a, &b, &c); 老师还让做一个2k*8的存储器，你知道怎么做吗[/quote] 是指二维数组吗？不太懂[/quote] 哦哦，是实物，要买面包板，线什么的

引用 2 楼 qq_45778098 的回复:[quote=引用 1 楼 不闻窗外事的回复:]你可以打印看看，这个正常应该是连续的，但也不一定 printf("%p  %p  %p", &a, &b, &c); 老师还让做一个2k*8的存储器，你知道怎么做吗[/quote] 是指二维数组吗？不太懂

连续的，也许又不连续的，不过目前未见过

引用 11 楼 寻开心 的回复:函数内的变量地址是放到栈里面的， 一个一个的放，从栈顶向下，所以地址越来越小  堆的地址是向上的，一个一个的new或者malloc，地址是增加的 学习了！其实是受数组内元素的地址变化规律影响，形成了一种错误的思维定式

引用 1 楼 不闻窗外事的回复:你可以打印看看，这个正常应该是连续的，但也不一定 printf("%p  %p  %p", &a, &b, &c); 老师还让做一个2k*8的存储器，你知道怎么做吗


Question: c语言

1、看不明白你的需示， 2、自己先写写，有问题再提问，不能直接求代码。


Question: 这道题用递归函数怎么写？

#include <stdio.h> double get(int n, int a = 1, int b = 2) { 	if (n == 0) 		return 0; 	return b / (double)a + get(--n, b, a + b); } int main() { 	double c = get(2); 	return 0; }

int An(int n) {     if (1==n) return 2;     if (2==n) return 2;     return An(n-1) + An(n-2); }  int Bn(int n) {   if ( 1==n) return 1;   if ( 2==n) return 2;   return Bn(n-1) + Bn(n-2); };   An Bn知道了 ，后面的就可以做了吧


Question: 遍历从后往前？删除*的题目

你可以从前遍历试试，代码能把你写死。任务语言都没有规定数组从前向后遍历，到底怎么遍历要看你的需求适合哪种遍历

引用 1 楼 user-1 的回复:你的代码没有问题呀 因为是要处理最字符串最后的连续的*，所以要从尾部开始遍历字符串。  char *p = str;     printf("Input string");        gets(str);               while(*p) p++;         p--;  可以修改为   char *p;     printf("Input string");        gets(str);     p = a + strlen(str) -1; 谢谢你！我头次用CSDN！我不明白为什么我这个是从尾部开始遍历的，我百度了很久都没找到答案。 P--之后留在字符串的尾部，但是为什么能从后往前回到非*字符呢？一般情况我们不都是从前往后遍历吗！再次谢谢！


Question: 小白提问——求职顺序怎么理解?

引用 3 楼 寻开心的回复:对于函数参数里面的这些运算的顺序，c语法没有硬性规定谁先谁后 不同的编译器处理的结果可能不一样 因此，建议一直都是不要在这儿搞事情 学到了，大佬，看书上的迷糊，自己跑更迷糊了。谢谢大佬

引用 1 楼 user-3的回复:怎么感觉你给的答案是错的呀？ 不应该是4 4 3吗？ 运行了，确实是这样的

我觉得也是4，4，3

怎么感觉你给的答案是错的呀？ 不应该是4 4 3吗？


Question: 大佬们帮帮忙！C语言编程题：取字符串s从下标beg开始到end-1结束，每个step个去一个，具体要求如下图？

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

引用 3 楼 user-2 的回复:你的代码呢？一行都没有写吗 我解决了，搞定了~谢谢关注 #include <stdio.h> #include <stdlib.h> typedef unsigned long size_t; void pick(char *s, char *sub, int beg, int end, int step) { int i, j = 0; for (i = beg; i < end; i += step) { sub[j++] = s[i]; } while (sub[j]) { sub[j] = '\0'; j++; } } size_t len(char *s) { int i = 0, n = 0; for (; s[i]; i++) { n++; } return n; } int main() { char *s = "Stringhandling"; char *t = (char *)malloc(sizeof(char) * len(s)); pick(s, t, 2, 8, 2); printf("%s\n", t); free(t); return 0; }

你的代码呢？一行都没有写吗

九九孩子，大哥们

顶一下，麻烦大佬们看看。


Question: 打印下面图形，行数n由键盘输入（n的值在1—9之间）。如：输入行数为4

printf("%d", (j<=i ? j : j-i));改一下，改成 printf("%d", (j<=i ? j : 2*i-j));

for example  int main() {       int n, i, j;     scanf("%d", &n);     if (n > 9 || n < 1) return -1;     for (i=1; i<=n; i++) {         for (j=0; j<n-i; j++) {             printf("%s", " ");         }         for (j=1; j<=2*i-1; j++) {             printf("%d", (j<=i ? j : j-i));         }         printf("\n");                   }     return 0; }


Question: C语言，救救孩子

int count = 0;     for (i = 100; i < 1000; i++)     {         if (x == (i / 100 + i%100/10 + i % 10))         {             count++;             printf("i = %d \n", i);         }              }     printf("count = %d \n", count);


Question: 大佬看看哪里错了为什么总是段错误

引用 5 楼 寻开心的回复:scanf("%s %s %d %d %d",&stu[i].no,&stu[i].name,&stu[i].cj1,&stu[i].cj2,&stu[i].cj3);  第一个地方应该是%c而不是%s， 第二个地方name本来就是地址，不用再&取地址了 刚刚试了过了谢谢。。。

引用 3 楼 一条不会飞的鱼的回复:scanf("%s %c %d %d %d",&stu[i].no,&stu[i].name,&stu[i].cj1,&stu[i].cj2,&stu[i].cj3); char [ ] 数组用 %s，单个char 用 %c 刚刚试了下还是段错误

引用 1 楼 不闻窗外事的回复:scanf("%s %s %d %d %d",&stu[i].no，char类型使用%c，不是%s 可%c只能输入一个字符


Question: 请大神指导一下这段代码怎么理解？

引用 4 楼 HilliardLiu 的回复:感谢大家，我主要是这里面std::map<candim, canval>，这两个符号都没见过，这是容器的表示法？ 学习一下c++模板编程

candim,canval可能是结构体类型吧 ，std::map<candim, canval>中 ，candim类型是key,  canval类型 是 value， 组成一个map容器对象,  typedef 是给std::map<candim, canval> 起个别名 。std::map<candim, canval>等同于bizMap, bizMap can_Map;  bizMap can_ZYTMap;是新建两个map对象

就是自定义了一种类型bizMap，这个类型是std::map<candim, canval>，然后声明了两个这个类型的变量

自定义bizMap的类型为std::map<candim, canval>


Question: 南阳理工593

如果泛泛而论，你只要懂这道题的核心算法，知道他要你掌握什么就行了； 如果严谨的说，题目的样例输入和样例输出，是输入了两组数据，输出了两个结果，而不是输入一组数据输出一个结果，再输入一组数据，再输出一个结果


Question: 我真的不知道哪里错！！！

两张图放的位置反了字数字数

引用 2 楼 一缕阳光宣泄、整个世界的回复:现在写代码都这么玩的吗，都不考虑溢出吗？ 不是溢不溢出的问题啊兄弟，问题是n=10的时候循环了11次

现在写代码都这么玩的吗，都不考虑溢出吗？

引用 5 楼 寻开心的回复:从代码上直接看是没道理的。 i如果是11，根本就进不了循环体。   既然有那个输出，结果必然是控制循环体的参数 i<=n当中的n被改变了  a[8] ，下标可用范围0到7 你输入的x是1到9， 输入9的时候对a[8] 进行了访问，这就越界了 因为a是局部变量和其他的局部变量内存相邻越界之后会改变其他变量的数值，具体谁会被改变和编译器有关系，不确定 你这儿很可能是把n给改变了  至于直接放数字在for的范围控制语句当中，因为 i<=10，这里10是固定值，不会被越界的操作影响 大哥是真的牛逼牛逼啊啊啊

你在循环体里面，增加一个printf （“i=%d， n=%d\n”，i，n）的输出来验证它吧 看看是不是你输入9之后，n被改变了

我这里编译器正常，你最好自己调试一下，看看i是如何变化。 提示一下，数组下标是从0到n-1,如果越界了，将会出现未知错误。


Question: 字符指针函数问题

if(*str=='ch')改成 if(*str==ch)//去掉单引号，ch变量本身就是个字符

写的很不错，只不过我发现了两个问题。 一个你的函数，输出的i有没有发现从来没有变过 另一个调用的时候：index ( *str, 'i')；你这个相当于是调用index（‘i’,'i'）。应该改为index（str,'i'） 其他都写的很好，这两个问题指出来后相信对你不是什么问题

毛病一大堆，  # include<stdio.h>  int Index(char *str,char ch);  //index的定义放到这里， 而且不要用index这个名字，和系统定义的有冲突  int main() {  char *str="information"; printf("%d\n",Index ( str, 'i'));   // 这里传参是str，而不是*str，  str自身就是char*类型的，  *str反而是char类型了 printf("%d\n",Index ( str, 'f')); printf("%d\n",Index ( str,'x')); return 0;  }   int Index (char*str,char ch)  {    int i=0,flag=0;   for(; *str!='\0'; str++, i++)  // 这里补充了一个i++， 否则i始终是初始化的0而已   {   if(*str==ch){   flag=1;break;  }  }   if(flag==1) return(i+1);   if(flag==0) return(-1); }


Question: qsort快速排序

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


Question: getchar () 与putchar () 的浅层理解

然而scanf也可以读取'\n'。 getchar() 是从stdin 读取一个字符 等价于 getc(stdin) 。，putchar()是往 stdout 写入一个字符，等价于 putc(ch, stdout) 。 scanf()系列函数，从各种资源读取输入，按照 format 转译，并将结果存储到指定位置，通常说，scanf格式化读取。 你可以去C参考手册看更详细的解释。


Question: C语言怎样定义一个六边形迷宫并绘制出路线


Question: C语言随机座位表


Question: 初学C语言

这是学校ppt上的题目 电脑输出结果是37，13 我们自己算的是36，13

这个跟编译器有关。有的编译器甚至会b先三次自加后再求表达式的值，b是13，然后会打印出 39 13 纠结这个没意义，不要写这种代码。。。

不是36，13？

这个a不是应该等于36吗 用的vc6.0


Question: C-Free下编译运行提示运行程序错误，每次编译都会出现运行程序错误

#define是预处理，在程序编译之前就要处理，所以在你没有输入a,b,c之前disc的值已经被定义了，和你输入具体的a、b、c的值没有关系。 #include<stdio.h> #include<math.h> float disc = 0.0f;//-----------将disc定义为全局变量-------------- double x1, x2; void m(float a, float b, float c) { 	printf("方程式有两个不相等的实根：\n"); 	x1 = (-b + sqrt(disc)) / (2 * a); 	x2 = (-b - sqrt(disc)) / (2 * a); 	printf("方程式的根是：%.2lf\t%.2lf", x1, x2); } void n(float a, float b, float c) { 	printf("方程式有两个相等的实根：\n"); 	x1 = x2 = (-b) / (2 * a); 	printf("方程式的根是：%.2lf\t%.2lf", x1, x2); } void f(float a, float b, float c) { 	printf("方程式没有实根"); } int main() { 	float a, b, c; 	printf("请输入a,b,c的值：\n"); 	scanf("%f%f%f", &a, &b, &c); 	float disc = b*b - 4 * a*c;//------在输入a、b、c的值之后计算disc的值---------- 	if (disc>0)  		m(a, b, c); 	else if (disc == 0)  		n(a, b, c); 	else  		f(a, b, c); 	return 0; } VS2015调试的结果

1你这个考虑到a是0了吗？  分母是0的时候求根根式要特殊处理的吧   否则除法要造反的  2 #define disc b*b-4*a*c 没有多大意义   这个定义导致a，b，c必须是全局变量，或者每个用到它的函数都要有a,b，c这个三个变量   比如，把m(float a, float b, float c ) 改成 m(float a1, float b, float c) 立刻编译不通过   #define disc(a,b,c)  b*b-4ac   这种定义才根据被普遍性  3 不要忽略编译器的任何警告


Question: 我对随机数的了解加深了


Question: c小白求问

这就是字符换和数组的区别 字符串在定义以及键盘输入，以及字符串函数操作的时候都会默默的在尾巴补充0 字符数组不会这么干，它更强调的是一个一个字符， 0也是字符的一种，数组当中完全可以在若干个字符中间放一个或者多个0  你的代码在把b内容放到a的后面之后， 是要补充一个0在尾巴的，因为这里用的都是字符数组  你的代码有越界的可能，小心处理


Question: C语言程序，没有错误，但是运行不出来

for (n = 0; n<current; n++) {         stu[n].num = malloc(10 * sizeof(char));         stu[n].nam = malloc(5 * sizeof(char));     }     //为结构体动态分配内存      printf("请输入学生人数 ：\n");     scanf("%d", ¤t);  改成下面，顺序交换一下  printf("请输入学生人数 ：\n");     scanf("%d", ¤t);      for (n = 0; n<current; n++) {         stu[n].num = malloc(10 * sizeof(char));         stu[n].nam = malloc(5 * sizeof(char));     }  学好，姓名这里也改下 去掉 &          printf("请输入学生的学号:\n");         scanf("%s", stu[i].num);          printf("请输入学生的姓名:\n");         scanf("%s", stu[i].nam);

还有下次贴代码，把格式弄一下，不然很多人都不会看

这里有问题：scanf("%s",&stu[i].num);  改成 scanf("%s",stu[i].num);  stu[n].num=malloc(10*sizeof(char)); 这个没报错？void*应该要强制转换一下吧


Question: 为什么这样子输出的最后一个数是零

我觉得与编译器应该是有关的，double可以强转为int，所以最后一个正常应该不为0，或者你这样写 printf("%f%f%d",c,a, （int）b);

只可意会，不可言传。浮点数读取 和 存储都和整型是不一样的。double长度是8字节，你读取4个字节用的整型方式，读取到的字节是 00 00 00 00  结果自然为0咯。


Question: 【c语言入门题】新手指针运用不熟，感谢解答。

int main （）  {     while (1) {           char *p ........     } }  所有的变量和初始化，都框到while体里面去， 就没有初始化的弊端了

引用 15 楼 寻开心的回复:最后的输出换行是多余的吧。 自己试试 您好，请问您知道怎么写这个循环语句，可以输入数据多次吗？

引用 15 楼 寻开心的回复:最后的输出换行是多余的吧。 自己试试 我试了一下，不是这个问题。 我觉得或许是不能重复输入数据的问题 但我不知道怎么写这个循环语句 如果写while（1）的话，oj就显示runtime error segmentation fault

最后的输出换行是多余的吧。 自己试试

引用 13 楼 寻开心 的回复:str[][10] 越界，跑偏了  我将数组扩大后，可以得到正确结果了，但oj上还是显示我答案错误是为什么？  #include<stdio.h> #include<string.h> int main() {     char *p,str[100][100],c,a[100];     int i,j,count=0,num=0,com;     p=str[0];     for(i=0;;i++)     {         j=0;         while((c=getchar())!='\n'&&c!=' ')             str[i][j++]=c;         if(c==' '){str[i][j]='\0';num++;}         else if(c=='\n'){str[i][j]='\0';num++;break;}     }     for(i=0;i<num-1;i++)     {         for(j=0;j<num-i-1;j++)         {             com=strcmp(str[j],str[j+1]);             if(com>0)             {                 strcpy(a,str[j]);                 strcpy(str[j],str[j+1]);                 strcpy(str[j+1],a);             }         }     }     for(i=0;i<num;i++)     {         if(count==0)printf("%s",str[i]);         else printf(" %s",str[i]);         count++;     }     printf("\n");     return 0; }

str[][10] 越界，跑偏了

输入的字符串最多要9个字符， 多了就造成ptr【】【10】越界，影响到别人来了呗

引用 10 楼 寻开心 的回复:你这个编译都过不去 str[i]  是字符串， 你和一个空字符如何做比较呢   for(i=0;;i++)     {         scanf("%s",str1[i]);         if(str1[i][0]==' ')         {             num=i;             break;         }         printf("i=%d  str1=%s", i, str1[i])     }  永远也退不出这个循环， 用scanf你就返回不了空格  您好，我新写了一个有输出的代码： #include<stdio.h> #include<string.h> int main() {     char *p,str[100][10],c,a[100];     int i,j,count=0,num=0,com;     p=str[0];     for(i=0;;i++)     {         j=0;         while((c=getchar())!='\n'&&c!=' ')             str[i][j++]=c;         if(c==' '){str[i][j]='\0';num++;}         else if(c=='\n'){str[i][j]='\0';num++;break;}     }     for(i=0;i<num;i++)     {         for(j=0;j<num;j++)         {             com=strcmp(str[i],str[j]);             if(com<0)             {                 strcpy(a,str[i]);                 strcpy(str[i],str[j]);                 strcpy(str[j],a);             }         }     }     for(i=0;i<num;i++)     {         if(count==0)printf("%s",str[i]);         else printf(" %s",str[i]);         count++;     }     printf("\n");     return 0; }  当我随便输入几组数据时结果正确，比如： 输入Mhh KaKa HaMaMa LaLa 输出HaMaMa KaKa LaLa Mhh  但当我输入Michael KangKang HangMeiMei LiLei 却会输出HangMeiMeiKangKang KangKang LiLei LiLei 请问这是怎么回事呢？

引用 8 楼 寻开心 的回复:scanf（“%s“， str）； 你输入abc def kdkdkd会车 str里面只容纳abc三个字符  scanf（“%s%s”, str1, str2） 你输入 abc             def会车 str1 是abc str2 是def 中间的那些空格都送给马克思了      char str1[100], str2[100];     scanf("%s%s", str1, str2);     printf("%s\n%s\n", str1, str2); 你可以自己测试测试  不好意思，我还是不太清楚我的代码没有输出的原因是什么。 我写了一个简单的代码输入数据到二维数组里，再将二维数组里的数据逐个原样输出，但还是在输入数据后按回车无输出 代码如下： #include<stdio.h> #include<string.h> int main() {     char str1[100][10];     int i,count=0,num=0;     for(i=0;;i++)     {         scanf("%s",str1[i]);         if(str1[i]==' ')         {             num=i;             break;         }     }     for(i=0;i<num;i++)     {         if(count==0)printf("%s",str1[i]);         else printf(" %s",str1[i]);         count++;     }      return 0; }

引用 6 楼 寻开心的回复:不行 scanf 输入字符串的时候遇到空格自动截断， 过滤掉了。 你可以用gets函数读取一行，这是可以把空格输入进来的， 然后逐个字符去判断空格 好的，我试试，谢谢！

引用 3 楼 寻开心 的回复:贴代码出来看才知道 一般说来是陷入死循环或者等待你继续输入的状态才是这样没有反应的  if(a[i]==' ')         {             num=i;             break;         } 我想用这个来表示数据输入的结束，请问可以这样用吗？

引用 3 楼 寻开心 的回复:贴代码出来看才知道 一般说来是陷入死循环或者等待你继续输入的状态才是这样没有反应的  #include<stdio.h> #include<string.h> int main() {     char a[100][10];     int i,k,j,num=0,count=0;     for(i=0;;i++)     {         scanf("%s",a[i]);         if(a[i]==' ')         {             num=i;             break;         }     }     for(i=0;i<num;i++)     {         k=i;         for(j=i+1;j<num;j++)             if(strcmp(a[k],a[j])>0)                 k=j;         if(k!=i)         {             char temp[100];             strcpy(temp,a[k]);             strcpy(a[k],a[i]);             strcpy(a[i],temp);         }     }     for(i=0;;i++)         printf("%s ",a[i]);     return 0; }

引用 1 楼 寻开心的回复:弄个数组。char str【1100】； gets读取一行到str中，然后把字符串根据空格拆分出来放到一个数组，对这个数组排序，比较大小用strcmp函数，输出  自己写代码  指针不熟悉，刚好可以用来练习 我的代码总是在输入数据后按回车键却没有输出，请问您知道这是为什么吗？


Question: 大一萌新QWQ请教各位前辈一道C语言指针习题

#include<stdio.h> #include<string.h> void fun(char *ptr[10]) {     int i, j, flag;     for(i=0; i<10; i++)     {         for ( j=0; j<10-1; j++ ){             flag=strcmp(ptr[j],ptr[j+1]);             if(flag>0)             {                 char *c;                 c= ptr[j];                 ptr[j] =  ptr[j+1];                 ptr[j+1] = c;             };         }     }     printf("\n----Result-----\n");     for(i=0;i<10;i++)         printf("%s\n",ptr[i]); }  int main() {     int i;     char  *ptr[10],s[10][30];     for(i=0;i<10;i++) {         scanf("%s",s[i]);         ptr[i] = s[i];     };     printf("\n---input----\n");     for ( i=0; i<10; i++)         printf("%s\n", ptr[i]);     printf("\n");     fun(ptr);     return 0; }

奥。 你的ptr指针设置还有问题 for (I=0; I<10; I++) ptr[I] = s[I]  要有这个

{   flag=strcmp(s[i],s[i+1]);     if(flag>0)     {char *c; 这个不可以     strcpy(c,s[i]);     strcpy(s[i],s[i+1]);     strcpy(s[i+1],c);} }  这段代码不行 这样定义 c是野指针。  应该char c[30]   你的这个办法是保持s【】数组内的指针不变，指针的内容交换的， 要strcpy多次 其实还有一个办法， 交换s【】数组内的指针啊     if(flag>0)     {char * c;      c = s[I];      s[I] = s[I+1];      s[I+1] = c; } 这样多简单

#include<stdio.h> #include<string.h> void fun(char *ptr[10],char s[10][30]) { 	int i,j,flag; 	ptr[0]=&s[0][0];     for(i=0;i<10;i++) {   flag=strcmp(s[i],s[i+1]); 	if(flag>0)     {char *c;     strcpy(c,s[i]);     strcpy(s[i],s[i+1]);     strcpy(s[i+1],c);} } 	for(i=0;i<10;i++) 	for(ptr[i]=&s[i][0];s[i][j]!='\0';j++) 	printf("%s",*(*(ptr+i)+j)); }  void main() { 	int i,j; 	char  *ptr[10],s[10][30]; 	ptr[0]=&s[0][0]; 	for(i=0;i<10;i++) 	scanf("%s",s[i]); 	fun(ptr,s); } 引用 2 楼 寻开心 的回复:那个就是字符串数组啊 s【0】， s【1】等等 以及ptr【0】，ptr【1】等等 每个都是一个字符串  for 对 I从0到10循环  {     scanf("%s", s[I]);    // 这种方式输入字符串就好了     ptr[I] =. &s[I][0] }  比较的时候，直接strcmp（ptr[x], ptr[y]) 或者 strcmp(s[x], s[y])就可以了   char * ptr【10】 这是一个数组，每个元素是一个char*类型， 让他等于 s【i】【0】的地址就可以了 char  s[10][30]  是一个二维数组， 里面每个元素是一个char， 但是s[i] 就是s[i][0]的地址，把它当作字符串，需要注意字符串尾巴要有个‘\0’字符，否则就不知道要多长了。 好在scanf输入字符串的时候，会自动在尾巴补充上这个字符串结束符请问前辈我按您的讲解改了改 可为什么还是什么都没输出来QWQ 麻烦能帮我再订正下好吗 谢谢前辈

flag=strcmp(s[i]+j,s[i+1]+j);你这个地方比较的可不是字符串，比较字符串  for(i=0;i<10;i++)     flag=strcmp(s[i],s[i+1]); 这样才行

用scanf指定字符串格式，输入s[i]的时候，注意别超过29个字符，否则就不好玩儿了。

求教前辈感觉指针这里好难QWQ


Question: c语言入门程序，无法引用函数

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

引用 1 楼 ともり なお的回复:你的函数没有调用啊… emm…我基本啥都不会，求教

你的函数没有调用啊…

还是多看书吧。  scanf后，再加一行 ReadScore（num， score， n）；


Question: 求大佬教，为什么总是runtime error

error C4703: 使用了可能未初始化的本地指针变量“head” error C4703: 使用了可能未初始化的本地指针变量“p1”


Question: 求大佬教，为什么总是runtime error


Question: 高手们帮我看看我这个程序为什么运行出来是0

还有，虽然不知你为什么用double x，但既然用了double，输入的时候请用scanf("%lf",&x)

子函数f里面，k没有赋初始值，所以第一次for就判定失败了，直接跳出

每天回帖即可获得10分可用分！每天回帖即可获得10分可用分！每天回帖即可获得10分可用分！每天回帖即可获得10分可用分！每天回帖即可获得10分可用分！每天回帖即可获得10分可用分！每天回帖即可获得10分可用分！每天回帖即可获得10分可用分！每天回帖即可获得10分可用分！每天回帖即可获得10分可用分！每天回帖即可获得10分可用分！每天回帖即可获得10分可用分！每天回帖即可获得10分可用分！每天回帖即可获得10分可用分！

2*i/(2*i-1)*2*i/(2*i+1)  这里始终是整数的运算 把第一个2改成2.0就好了 否则这里是整数运算，尽管m是浮点数，课整数运算的结果始终是0有个屁用


Question: 压缩字符串

引用 1 楼 寻开心 的回复：全局变量 char c = array【0】  int count=1； for 1开始的循环      如果当前元素和c相等， 计数器加一 继续      如果当前元素和c不等， 输出c（count）， 然后c=当前元素，count=1 再输出一次c（count） 完活儿写出来了，谢谢你

太懒了，这种题目自己不写代码，还来问人。至少你先写了代码，不通过再请人指点。

压缩算法的一种嘛

引用 3 楼 寻开心 的回复:你这个是统计字符数量，外加输出排序，不是压缩 cccaaabbaa  你会输出a5b2c3这样，而不是c3a3b2a2 还真是，搞错题了

void fun(char *str) {     int hash[256];     memset(hash, 0, sizeof(hash));     char i = 0;     while (str[i] != 0)     {         hash[str[i]]++;         i++;     }      for (i = 0; i < 256; i++)     {         if (hash[i] > 0)             printf("%c (%d) ", i, hash[i]);     } }


Question: 新人编程求助

#include<stdio.h> /*函数fun功能是：将二维数组的第k行的元素依次与第0行元素交换 1 2 3 4 5 6 7 8 9 当k的值为2，变换为 7 8 9 4 5 6 1 2 3 */ void fun(int** s, int k) { 	int temp; 	int i; 	for (i = 0; i < 3; ++i) 	{ 		temp = s[k][i]; 		s[k][i] = s[0][i]; 		s[0][i] = temp; 	} }  int main() { 	int k; 	int n = 3, m = 3; 	scanf("%d", &k); 	int** a = new int*[n]; 	for (int i = 0; i < n; ++i) 	{ 		a[i] = new int[m]; 	}  	for (int i = 0; i<n; i++) 		for (int j = 0; j<m; j++) 			scanf("%d", &a[i][j]);   	fun(a, k);  	for (int i = 0; i < n; i++) 	{ 		for (int j = 0; j < m; j++) 		{ 			printf("%d\t", a[i][j]); 		} 		printf("\n"); 	} 	for (int i = 0; i < n; ++i) 	{ 		delete[] a[i]; 	} 	delete[] a; 	return 0; } VS2015调试结果  请参考《C++中动态分配多维数组》 《C++中二维数组的使用》 《C++二维数组》 希望能够帮到你！

fun函数应该是遍历列数，将第k行的数依次与第0行的元素交换，你看你写的把列都固定了，这怎么换，另外数组定义最好用常量，你可以把他定义的大一点，然后用其中的一部分，你这多半是dev那几个老古董了，要vs直接被打死

还没学习动态数组相关知识

你的编译器没给你报错吗？你数组定义得用常量，除非你就用动态数组。还有就是你的fun函数得重新想一想


Question: 哪里出错了，结果总不对

没有初始化temp，while都没进去

你这个值比给定的更精确，是在它要求的那个基础上多算了一步得到的结果 因为你是先加了结果再去判断，所以多了一步 while(1){ 		term *= i; 		i++; 		temp = f / term; 		if ( temp<1.0e-5) break; 		s += temp; 		printf("i=%d,s=%lf\n",i, s);  	}; 这样就和答案一致了

赋初值为1，结果为2.718282，为什么还不对呢？


Question: ）输入由0~9组成的任意长度的数字字符串，将其转换为整数。例如输入“65535”字符串，转为整数65535。要求用函数实现。

简单三个字 做不到 我只说一次  任意长这种概念别随口说出来  这个宇宙就不支持任意长

stoi, stol, stoll.

自己写 有问题可以贴代码来提问， 直接要原码的木有，只要的去百度


Question: 五个学生四门成绩，计算平均分，并用平均分进行排序

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

sum 数组少了一个  冒泡第二层循环控制有问题

#include <stdio.h>  int main() {     int i,j,k,t;     float a[5][4],sum[5]={0};     printf("\t\t课程1\t课程2\t课程3\t课程4\n");     for(i=0;i<5;i++) {         printf("%d号学生",i+1);         for(j=0;j<4;j++)             scanf("%f",&a[i][j]);     }      for(i=0;i<5;i++)         for(j=0;j<4;j++)             sum[i] += a[i][j];      for(i=0;i<5;i++) {         for(j=0;j<5-i-1;j++) {             if(sum[j]<sum[j+1]) {                 t=sum[j];                 sum[j]=sum[j+1];                 sum[j+1]=t;             }             for(k=0;k<4;k++) {                 t=a[j][k];                 a[j][k]=a[j+1][k];                 a[j+1][k]=t;             }         }     }      printf("\t\t成绩表\n");     printf("\t课程1\t课程2\t课程3\t课程4\t平均分\n");     for(i=0;i<5;i++) {         printf("\n%d号学生:",i+1);         for(j=0;j<4;j++)             printf(" %.1f\t",a[i][j]);         printf(" %.1f",sum[i]/4);         printf("\n");     }     return 0; }

引用 1 楼 寻开心的回复:同一个问题，不用多次发帖的 把对sum做排序的代码也写出来，然后排序过程当中交换sum数据的时候，同步交换a数组的内容就出来了 就差这一个步骤了 老哥介意私聊吗，我改了之后出现了一些新的奇怪的问题

#include<stdio.h> #define N 5 main() { 	int a[N][5],i,j,n,x,y,z; 	printf("请输入学号和考勤分、内务分\n"); 	for(i=0;i<N;i++) 	for(j=0;j<3;j++) 	{scanf("%d",&a[i][j]);} 	for(i=0;i<N;i++) 	{ 		for(a[i][3]=0,j=1;j<3;j++) 		{a[i][3]+=a[i][j];} 	} 	printf("请输入查询的学号："); 	scanf("%d",&n); 	i=0; 	while(i<N&&a[i][0]!=n) 	{i++;} 	if(i<N) 	{ 		printf("该生的考勤分、内务分、总分为："); 		for(j=1;j<4;j++) 		printf("%4d",a[i][j]); 		printf("\n"); 	} 	else printf("你要找的学生不存在\n");  	for(i=0;i<N-1;i++) 	{ 		for(j=i+1;j<N;j++) 		{ 			for(z=0;z<4;z++) 			if(a[i][3]<a[j][3])	 			{ 				x=a[i][z]; 				a[i][z]=a[j][z]; 				a[j][z]=x; 			}	 		} 	} 	for(i=0;i<N;i++) 	{a[i][4]=i+1;} 	printf("输出排序后的成绩表\n"); 	printf(" 学号  考勤分 内务分 总分 名次\n"); 	printf("-----------------------------\n");  	for(i=0;i<N;i++) 	{ 		for(j=0;j<5;j++) 		printf("%6d",a[i][j]); 	printf("\n"); 	}	 }  //   你可以参考一下我写的这个题


Question: 第一次发现写PTA不包括头文件的，为啥呢

编译器的事儿 有的不包含标准的头文件也允许，但是不是所有的都支持。 比如Xcode就会报错


Question: C语言100以内数字随机猜数游戏

srand((unsigned)time(NULL)); for(i=1;i<100;i++)          n=rand()%(100);  这里生成100次随机数也没有意思啊 后面的代码没毛病

#include<stdio.h>  #include<time.h> #include<stdlib.h>  int main() { 	int i, n, m, a = 0; 	srand((unsigned)time(NULL)); 	for (i = 1; i < 100; i++) 	{//-------------添加大括号---------------- 		n = rand() % (100);  		while (1) 		{ 			printf("请输入一个100以内的正整数:"); 			scanf("%d", &m); 			if (m > n) { printf("猜大了\n"); a++; } 			if (m < n) { printf("猜小了\n"); a++; } 			if (m == n) { printf("系统产生的100以内的随机数为 ：%d\n", m); a++; break; } 		} 		printf("你一共输入了 %d\n", a); 	}//-------------添加大括号---------------- 	return 0; }


Question: 弹出式窗口到底是什么？

引用 2 楼 寻开心 的回复:只是一种特定的窗口风格， 有边框线，有系统菜单的形式 跟WS_OVERLAPPEDWINDOW的区别是什么？我还以为弹出式窗口是一直位于最顶层的那种，结果不是

层叠窗口。         类似于多文档应用里面，每个文档的窗口；   弹出窗口        应用里面弹出的消息对话框那种；   子窗口       相当于对话框里面的一个个控件窗口  精简一下上次回复的内容。

引用 6 楼 寻开心 的回复:这种都是随便百度一下就可以找到答案的问题，还在这儿不断的问 不是啊，你真的没仔细看我的问题啊，“弹出”的意思我暂时可以理解为像对话框一样弹出的窗口，那么重叠式窗口的“重叠”是指什么？你的回答就好像是“A式窗口是怎样的”，而我问的是“为什么叫A式，这个A代表的什么意思”。这个“重叠”是指什么重叠？我寻思是和其他窗口之间的矩形重叠，但弹出式窗口也可以，所以应该不是指这

这种都是随便百度一下就可以找到答案的问题，还在这儿不断的问  WS_POPUP WS_OVERLAPPED WS_CHILD 　　重叠的窗口 　　一个重叠窗口是顶层窗口有一个标题栏，边框和客户区，它的目的是作为一个应用程序的主窗口。 它也可以有一个窗口菜单，最小化和最大化按钮和滚动条。 重叠的窗口作为主窗口使用通常包括所有这些组件。 　　通过CreateWindowEx函数中指定的WS_OVERLAPPED或WS_OVERLAPPEDWINDOW风格，一种应用程序创建一个重叠的窗口。 如果您使用WS_OVERLAPPED风格，窗口有一个标题栏和边框。 如果您使用WS_OVERLAPPEDWINDOW风格，窗口有一个标题栏，边框大小，窗口菜单，最小化和最大化按钮。 　　弹出窗口 　　弹出窗口是顶级窗口，并连接到桌面窗口的子窗口的列表。 应用程序通常使用对话框弹出窗口。 主要的区别弹出和重叠的窗口是弹出式窗口不需要有标题和重叠的窗口必须有标题。 当一个弹出窗口没有标题，它可以创建无边框。 弹出式窗口可能拥有其他顶级窗口或由其他顶级窗口或两者拥有。 所有弹出窗口都具有WS_CLIPSIBLINGS风格，即使是没有指定。 弹出窗口不能创建与CW_USEDEFAULT值无论是位置或窗口的大小。 弹出窗口，使用CW_USEDEFAULT会存在，但不会有任何大小或没有能力或两者兼而有之。 重叠的窗口通常是保留给应用程序的主窗口，而事实上，有时也被称为主窗口或框架窗口。 弹出窗口通常用于与用户在对话框的形式和消息框。 　　一个弹出窗口是一个特殊类型的重叠窗口的对话框，消息框使用，以及其他外部的应用程序的主窗口中出现的临时窗口。 标题栏的弹出式窗口选择，否则，弹出窗口作为窗口重叠的WS_OVERLAPPED风格相同。 您创建一个通过指定CreateWindowEx WS_POPUP风格的弹出窗口。 要包含一个标题栏，指定WS_CAPTION样式。 使用WS_POPUPWINDOW风格创建一个弹出窗口，具有边框和窗口菜单。 该WS_CAPTION样式必须结合WS_POPUPWINDOW风格使窗口菜单中可见。 　　子窗口 　　子窗口必须有一个父窗口，并只限于其母公司的客户区。 这是在子窗口和重叠和弹出窗口的主要区别。 子窗口家长可以顶层窗口或其他子窗口。 子窗口的位置，从他们的父窗口的左上角，而不是从上层作为屏幕的左侧是顶层窗口。 子窗口是夹在他们父母的客户区。 在一个对话框中的控件的子窗口，其母公司是对话框。 子窗口创建不能为任何位置或窗口的大小CW_USEDEFAULT值。 子窗口，使用CW_USEDEFAULT会存在，但不会有任何大小或位置或两者兼而有之。 　　有一个子窗口WS_CHILD样式，并只限于它的父窗口的客户区。 应用程序通常使用子窗口功能区划分成一个父窗口客户区。 您创建一个通过指定CreateWindowEx函数WS_CHILD样式的子窗口。 　　一个子窗口必须有一个父窗口。 父窗口可以是重叠的窗口，弹出一个窗口，甚至是另一个子窗口。 您指定的父窗口时调用CreateWindowEx。 如果您指定在CreateWindowEx WS_CHILD样式，但没有指定一个父窗口，系统不创建窗口。 　　一个孩子，但没有一个窗口客户区的其他功能，除非他们明确要求。 应用程序可以请求一个标题栏，窗口菜单，最小化和最大化按钮，边框，滚动窗花一个孩子，但一个子窗口不能有菜单。 如果应用程序指定一个菜单句柄，或者当它注册孩子的窗口类或创建子窗口，菜单句柄将被忽略。 如果没有指定边框样式，系统将创建一个无边框窗口。 应用程序可以使用无国界划分一个子窗口的父窗口的客户区的划分，同时保持对用户不可见。

引用 4 楼 寻开心 的回复:那是另外一种风格的窗口 #define WS_OVERLAPPEDWINDOW (WS_OVERLAPPED       | /                                     WS_CAPTION          | /                                     WS_SYSMENU          | /                                     WS_THICKFRAME      | /                                     WS_MINIMIZEBOX   | /                                       WS_MAXIMIZEBOX) ■ 重叠窗口(overlapped window)，具有应用程序主窗口的全部特点。它的非客户区包括一个可伸缩的框架、菜单条、标题栏和最小化、最大化按钮。 ■ 弹出窗口(popup window)，具有消息框或者对话框的全部特点。它的非客户区包括一个固定大小的框架和一个标题栏。  ■ 子窗口(child window)，具有类似按钮控件的全部特点。它没有非客户区，窗口的处理过程负责绘制窗口的每个部分 可以问下这个“重叠”是什么意思吗？除了最大化最小化这些，弹出式窗口应该都有，那么何谓“重叠”呢？

只是一种特定的窗口风格， 有边框线，有系统菜单的形式


Question: 求大佬帮助，写了一个关于链表的c程序，没有错误但运行不出结果

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h>   typedef struct Node { 	int element; 	struct Node* next; }Node,* NodePtr;  NodePtr recursiveInsert(NodePtr frist, NodePtr newNode) { 	if (!frist) 	{ 		newNode->next = frist; 		return newNode; 	} 	if (frist->element > newNode->element) 	{ 		newNode->next = frist; 		return newNode; 	} 	frist->next = recursiveInsert(frist->next, newNode); 	return frist; }  void insert(NodePtr node, int element) { 	NodePtr p = (NodePtr)malloc(sizeof(Node)); 	p->element = element; 	node->next = recursiveInsert(node->next, p); }  void printNode(NodePtr node) { 	while (node) 	{ 		printf("%d\n", node->element); 		node = node->next; 	} }  int main(int argc, char* argv[]) { 	int n; 	scanf("%d", &n); 	int* p = (int*)malloc(sizeof(int) * n);  	for (int i = 0; i < n; i++) 	{ 		scanf("%d",p+i); 	} 	Node node;		 	node.next = NULL;  	for (size_t i = 0; i < n; i++) 	{ 		insert(&node, p[i]); 	} 	printNode(node.next); 	free(p); 	return 0; }   我把 核心代码给你写好了，你就稍微完事一下就行、

与其说改，不如说，重写。我今天倒是写了一个  单链表博文，但是没有写升序插入这些方法。

引用 1 楼 BCMY0110 的回复：看这开头就觉得太骚气了吧， int n;  int a[n+1]  scanf("%d",&n);   这还能跑也是很厉害了。那该咋改一下啊dalao，新生在线求助，写了一晚上了


Question: 求解释

引用 楼主 user-0的回复:这红字为什么getchar是清除缓冲区非法字符 多谢 为什么ret！=1 是重新输入的步骤


Question: 地图移动时四个角有问题，地图打印信息框出现问题

运用的编译器codeblocks 17.01版


Question: PTA组个最小数

引用 2 楼 寻开心 的回复:先是排序 排序后，从头开始找第一个非0的数字，然后让它和第一个交换， 需要注意的是，第一个也许根本就不是0呢  a[0]=a[n];  a[n]=0; 这么写太绝对了。要么增加一个判断n是否是0，要么就强制a【0】和a【n】做交换   还有一个特例，我输入10个0会如何呢， 结果你是输出一个0还是10个0，还谢谢大佬，大佬天天开心一生平安

if(a[0]==0) { for(i=0;i<10;i++)  {  if(a[i]==0) {         n=n+1; }  } }


Question: 程序设计

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

求关于这道题的算法设计，让时间复杂度尽量低一点


Question: 江湖救急

我可能问了你一个在你看来是一加一等于几的问题，但是在我这里却是不可描述难度的问题。所以这么和你说吧，你所提到的三个定义，我都没见过，其次你后面说的几个问题在几个小时前我也是两眼抹黑的。然后现在的问题是我找到了这几个问题的答案但是不能在一个程序里面统一起来。你发的网址我打开了，不过里面的文件层面的讲解和我学的不是一个类型。所以用不了。否则我其他的知识点接不过去。不过还是要谢谢你给我把实现这个程序的步骤告诉我，我原本只是感觉到应该这样，但是因为完全没有接触过这类问题所以无从下手，没有方向。现在起码知道该从哪里入手。嗯，再次表示对你的感谢。

字符串函数strlen可以计算字符串的长度， 多个字符串挨个调用一遍比较一下就知道哪一个最大了 如果使用c++的string类型， 自带的length（）函数会返回字符串的长度  真个代码因该是这样的步骤  读取一个整数m 如果m<1 直接返回就是了 打开一个文件，以写入的方式打开 循环m次      从键盘读取字符串      把字符串写入打开的文件 关闭文件  定义三个变量 int maxLen 和 string maxString， tempString 打开文件 循环m次      读取一行到tempString      如果是第一次读取，maxLen = tempString.length(); maxString=tempString； continue;      用tempString的长度和maxLen比较，是否更新maxLen和maxString的内容 关闭文件 打开新的文件，用写的方式 把maxString输出到新的文件 关闭新文件  整个流程当中没有什么难点存在 你的问题是在哪里？  string类不会可以用char数组代替也可以； 还是文件读写不会？ 文件操作可以参考： https://www.runoob.com/cplusplus/cpp-files-streams.html

引用 3 楼 寻开心的回复:这里用到的都是基本的问题， 关于哪一个部分的功能不会，可以把会的做好，不会的单独留出来 不会的部分，可以分享样例的代码给你 替做作业不是这个论坛要做的事儿，提供技术支持没有问题 其次，一个问题的存在，本身解决的过程就有多种多样的，我不否认我想直接知道答案，因为时间有点紧（两小时前拿到题目），但是给出答案的过程是解答一方决定的，答案是探讨出来的还是直接被得出来的不是我所能决定的。

引用 3 楼 寻开心的回复:这里用到的都是基本的问题， 关于哪一个部分的功能不会，可以把会的做好，不会的单独留出来 不会的部分，可以分享样例的代码给你 替做作业不是这个论坛要做的事儿，提供技术支持没有问题 其实可以这么理解，从在main函数中创建一个文件。然后在所有字符串中找到最长的那个字符串并且存储在其它位置不会。前辈能指点一二吗

引用 1 楼 寻开心的回复:这里不负责提供这种基本功能的源代码  自己写，遇到具体问题，贴代码上来 这超出我的知识储备，突然碰到一个作业题需要立即处理，我也很尴尬嘞

这里不负责提供这种基本功能的源代码  自己写，遇到具体问题，贴代码上来


Question: 二维数组

你要对sum做冒泡排序吧 写出那个代码， 在交换sum对数据的时候，同时交换a数组的数据 for  I    for. j      if sum 比较后要交换 sun[x] 和 sum[y] 的 话 {                t = sum[x];  sum[x]=sum[y]. sum[y]=t; // 这样交换sum数据， 那么同步补充上下面的                for ( k=0; k<4; k++ ) {                          t = a[x][k]; a[x][k]=a[y][k]; a[y][k]= t;                }. // 这样取保a里面的数据和sum里面的数据还是对应关系      }

引用 7 楼 寻开心的回复:录入数据放到struct student这个结构数组student【100】里面 录入的过程就同时计算出平均分儿放到avg变量里面 然后你不是要根据平均分儿排序吗？  比如30个学生， 排序需要一个算法， 冒泡是所有书里面都有的算法 比较是在冒泡排序过程中的比较， 比较后根据结果交换数据的时候，把整个结构当中所有内容都交换，不是只交换avg一个数据 其实我暂时还不了解结构数组 #include <stdio.h>  int main() { 	int i,j; 	float a[5][4],sum[4]={0}; 	printf("\t\t课程1\t课程2\t课程3\t课程4\n"); 	for(i=0;i<5;i++) { 		printf("%d号学生",i+1); 		for(j=0;j<4;j++) 		scanf("%f",&a[i][j]); 	} 	for(j=0;j<4;j++) 		for(i=0;i<5;i++) 			sum[i] += a[i][j]; 	 	printf("\t\t成绩表\n"); 	printf("\t课程1\t课程2\t课程3\t课程4\t平均分\n"); 	for(i=0;i<5;i++) { 		printf("\n学生%d:\t",i+1); 		for(j=0;j<4;j++) 		printf(" %.1f\t",a[i][j]); 		printf(" %.1f",sum[i]/4); 		printf("\n"); 	} 	return 0; } 如果在这个基础上如何实现排序呢

引用 3 楼 寻开心的回复:struct Student {     int id;     int. score[4];     float avg; } student[100];  录入成绩的同时，计算平均分儿梵高avg里面  按照冒泡排序的思路，对student【ℹ】。avg和studnent[j].avg 做比较，交换数据就行了 如果单纯比较平均分是不是用不太上冒泡排序

引用 3 楼 寻开心的回复:struct Student {     int id;     int. score[4];     float avg; } student[100];  录入成绩的同时，计算平均分儿梵高avg里面  按照冒泡排序的思路，对student【ℹ】。avg和studnent[j].avg 做比较，交换数据就行了 如果单纯用冒泡排序的话，怎样实现整个学生成绩排序

引用 3 楼 寻开心的回复:struct Student {     int id;     int. score[4];     float avg; } student[100];  录入成绩的同时，计算平均分儿梵高avg里面  按照冒泡排序的思路，对student【ℹ】。avg和studnent[j].avg 做比较，交换数据就行了 我不太明白老哥写的程序比如说第一行

引用 1 楼 寻开心 的回复:又是这个问题 都是一所学校的学生吗  还是给一样的答案， 自己写代码， 遇到问题贴上来提问，要源码的自己百度去我不太明白怎样实现比较平均数，实现所有成绩重新排序


Question: 来个大佬帮帮忙


Question: C语言冒泡排序实现一组数据的排序


Question: 求助结构体问题

提交自己有问题的代码上来提问  如果只要源码， 自己baidu吧


Question: C语言

这个论坛不负责提供最基础问题的源码的  你可以自己做，只要是自己写的， 有任何问题都可以发上来提问


Question: 求大佬解答

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

晕，你贴一下，代码啊。  把那个定义放到哪儿去了？  错误原因就是ad没有定义。

引用 1 楼 寻开心的回复:你的程序就一个错误 ad 没有定义  在ad=。。。。语句之前加一行 float ad； 不行   变成7个了


Question: 关于C语言基础的题

引用 1 楼 寻开心的回复:任何一本C语言教程书上都会有的东西，还是好好看书吧  直接要代码的自己百度去  写的再烂，只要是自己写的，发上来就有答复 受教了，谢谢您的回复


Question: 大哥哥姐姐们帮帮我吧

引用 1 楼 寻开心的回复:int i = 0,o,n,b[1000]; scanf("%d",b[i]);   scanf("%d",b[i]);   这个要取地址啊。  &b[i] 真是谢谢了，每次都是你说的

引用 1 楼 寻开心的回复:int i = 0,o,n,b[1000]; scanf("%d",b[i]);   scanf("%d",b[i]);   这个要取地址啊。  &b[i] 谢谢你 ，，，，谢谢

因为没有那个&， 数组第一个元素并没有被保存到数组当中， 所以你自然也找不到它了


Question: 请教大神，程序运行了数码管怎样不亮，怎样修改程序才可以使数码管显示2000


Question: 用C语言与栈实现输入任意有括号中序表达式转后序表达式并完成计算功能。

你这个是c语言，用c++的头作甚 删除 #include 《iostream》 这行


Question: 求大神指点，急求

泰勒展开式算的位数不够

应该是精度问题，你尝试设置成其他高精度类型

解决了，忘记把最后一项加上了


Question: 新人请教一下问题程序运行崩溃问题

引用 1 楼 寻开心 的回复：BitTree * CreBiTree( ) {     BitTree * bt;    ElemType x;     scanf("%c",&x);    if(x==' ')            bt=NULL;     else{           bt=(BitTree *)malloc(sizeof(BitTree));          bt->data=x;          bt->lc= CreBiTree();          bt->rc =CreBiTree();      }  return bt;  // 缺少这句 }  这是你的通病， 都没有return， 没有return就无法做后续的处理 其他的几个函数也是这个问题真的感谢你了

引用 2 楼 寻开心 的回复：PreOrder 的顺序不对， 应该是先左树  自己的数值 再右树    左中右的次序； 你的中左右是中序输出了  NodeCount的计数不对， 没有return， 算法是 ｛       int c = 1;       如果左子树不空 c+=NodeCount（左子树）       如果右子树不空 c+= NodeCount(右子树）       return c； ｝类似你的HightTree算法  后面堆一坨的东西就没兴趣看了。要想别人帮助，起码把东西弄的让人看起来不烦吧谢谢你的帮忙，这个代码太长他自己变成这样的


Question: codeblocks报错问题

有人吗有人吗有人吗有人吗

试过下载一个odbe32.lib文件放在lib文件夹里还是没有用


Question: 我想问一下一道车辆限行的题为什么我输入任何数字回答都是no？

我知道了，是我太粗心了


Question: C++编程问题

引用 4 楼 寻开心 的回复:？   [quote=引用 3 楼 千梦一生 的回复:] 我个人认为他是提示地这种错误，我地猜测，你可以尝试验证一下：  char a = -128,b = -128; int c = a-b; 也许希望地结果是-256。但这个时候c的结果会不会是0？你试试吧，我觉得它提示的就是这个意思  什么个意思，难道这个c不应该是0吗？ 怎么可能是-256啊 即便是加法，它也应该是-256 而不是0，除非是char c = a+b 才有可能溢出为0[/quote]  我？好是我没写代码验证。 我的意思是，如果我猜测正确的话。那么他报错就是这个意思。  编译器推测 int c = a-b;这是时候的业务需求可能实际上是想要得到-256（不然又何必扩大数据宽度）。但按照运算规则得到的答案将是0，而不是你（可能）期望的-256。所以爆出一个警告。

str+++j 到底是 str+(++j)还是 (str++)+j

？   引用 3 楼 千梦一生 的回复:我个人认为他是提示地这种错误，我地猜测，你可以尝试验证一下：  char a = -128,b = -128; int c = a-b; 也许希望地结果是-256。但这个时候c的结果会不会是0？你试试吧，我觉得它提示的就是这个意思  什么个意思，难道这个c不应该是0吗？ 怎么可能是-256啊 即便是加法，它也应该是-256 而不是0，除非是char c = a+b 才有可能溢出为0

这是个警告，而且告诉你解决方案了，强制类型转换就可以了。。 或者使用同样的类型就行了。

这只是警告 未必是错误 必须熟知自己要处理的数据的范围，如果确信没有问题，要避免这个警告可以加上一个强制转换 如果确实是问题，就要更改变量的类型，让前后能够匹配


Question: 帮忙改下

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

发你调整后的代码 看截图， 出错就是在有执行语句的parr = ..... 这个赋值语句上 他前面对parr的定义并没有报错啊

引用 2 楼 寻开心的回复:啥意思， 全局变量里面居然有表达式了？   代码要放到函数体里面的， parr= malloc 那一行是执行代码，不能这样定义 我昨天晚上也想到了，然后把那个表达式放主函数了，还是有错误。说没有给parr说明类型。

图片有些重复，前三个就可以了


Question: 求素数

引用 8 楼 636f6c696e的回复:到现在都没有一个的素数定理，从这块着手别想了。 你的程序是错误的，才会让你有素数有规律的错觉 用1~8八个数字构成各位不重复的8位数 而你的打印中每个都有重复数字 [quote=引用 7 楼 與蘤舊縐 的回复:] [quote=引用 5 楼 636f6c696e 的回复:] 这么多数字求素数，你不会预先把sqrt(10^9)的素数先求出来放到表里面么？ 恕我愚钝，没摸明白意思，或者说想到了几种可能，但不知道是哪种 我本来想的优化方案是是否可以找到一个小范围内的所有素数，因为有些素数前面加上几位之后依旧是素数，所以想是否可能通过这些找到的素数直接找更多的素数，但首先是不能确定范围，因为有些非素数前面加上几位也变成了素数，其次就没有其次了~~数学撑不住 如果先求素数再判断是否满足不重复八位数的条件，这样的思路对于多线程比较好操作，当然多开线程纯属耍赖[/quote][/quote] 是的，一开始没发现，不过也知道并不行

到现在都没有一个的素数定理，从这块着手别想了。 你的程序是错误的，才会让你有素数有规律的错觉 用1~8八个数字构成各位不重复的8位数 而你的打印中每个都有重复数字 引用 7 楼 與蘤舊縐 的回复:[quote=引用 5 楼 636f6c696e 的回复:] 这么多数字求素数，你不会预先把sqrt(10^9)的素数先求出来放到表里面么？ 恕我愚钝，没摸明白意思，或者说想到了几种可能，但不知道是哪种 我本来想的优化方案是是否可以找到一个小范围内的所有素数，因为有些素数前面加上几位之后依旧是素数，所以想是否可能通过这些找到的素数直接找更多的素数，但首先是不能确定范围，因为有些非素数前面加上几位也变成了素数，其次就没有其次了~~数学撑不住 如果先求素数再判断是否满足不重复八位数的条件，这样的思路对于多线程比较好操作，当然多开线程纯属耍赖[/quote]

生成八位数的部分稍微改一下就好，还是请教思想问题

引用 1 楼 SuperDay的回复:不重复不重复不重复！重要的事情说三遍 还有，你这个是C语言吗？ 是写错了，还没发现，至于语言，我早说了不是c，我只是来请教思想，无关语言

不重复不重复不重复！重要的事情说三遍 还有，你这个是C语言吗？

引用 5 楼 636f6c696e 的回复:这么多数字求素数，你不会预先把sqrt(10^9)的素数先求出来放到表里面么？ 恕我愚钝，没摸明白意思，或者说想到了几种可能，但不知道是哪种 我本来想的优化方案是是否可以找到一个小范围内的所有素数，因为有些素数前面加上几位之后依旧是素数，所以想是否可能通过这些找到的素数直接找更多的素数，但首先是不能确定范围，因为有些非素数前面加上几位也变成了素数，其次就没有其次了~~数学撑不住 如果先求素数再判断是否满足不重复八位数的条件，这样的思路对于多线程比较好操作，当然多开线程纯属耍赖

引用 4 楼 寻开心 的回复:全排列的方法很多种，很少直接嵌套8重循环的， 因为这个方法不具备通用性 随便改一下，用1~7来做同样的题目，你的算法就要改变 生成全排列是很有规律的事儿， 但是素数不是，素数就是没有特别显著的规律，就本题目来说除了个位数只能是137之外  不过你倒是可以试试用最快的筛素数法，把所有八位的素数都找出来看看用多久 筛素数法需要开个char类型，大小87654321字节，现代计算机应该也内存足够  筛素数法是个好办法，感谢推荐，如果这样的话，可能到是反着求更快点，即先找素数，再确定素数是否满足不重复八位数的条件

这么多数字求素数，你不会预先把sqrt(10^9)的素数先求出来放到表里面么？


Question: 如何分析调用数组的c（苏小红版C语言程序设计8.1）

定义了一个静态整型数组a，并赋初值，将a传入函数，并改变形参的值，打印a数组，观察值是否改变

分析过程不外乎三种办法 1  纸上，一步一步的推进 2  debug调试，跟踪变量 3  每执行一句打印一个结果出来 比如：   在 b[j]=j; 这一行下面增加一句       printf（“ j= %d b【j】=%d\n”， j， b【j]】）；  自己看看输出， 就知道了函数里面是如何变化的了


Question: c语言的题目，希望能给出代码

自己写吧，这题目只要会数组就不难

双重循环     外层 i 从0到N-1       内层 j从i+1到N          判断矩阵[i][j]  和 [j][i] 是否不等， 不等就不是对称，输出结果直接返回就好    输出对称  注意一下，i，j 的循环范围  代码自己写


Question: static作用

for (; i < 3; i++)     {         static int i=1;         i+=fun(i);         printf("%d\n",i);     } 等同于 int j = 1; for (; i < 3; i++)     {         j+=fun(j);         printf("%d\n",j);     }

简单的说，把循环体内所有出现的i， 都当成另外一个变量j来想就清楚了。  因为static int I=1；的这个定义。  和static无关， 是int I的定义，让这个I和for循环的I产生了区别

这又是谁出的烧脑的题啊  int I=0； I=fun（I）； // 此时I=0  for （ ； i<3; I ++ ) {     static int I=1;   这里重新定义了I，而且是static类型，每次进来都保持上次结果     I += fun（I）；  // 此时的i使用的是，static I； 已经不是for语句的I了    printf（I）； // 2，6， 42就是这里输出的 } printf(i) // 输出3，这个是 for里面的I。 循环体内的i出了循环体就无效了   这是c语言， 如果是c++， 在循环体内用::i还是可以继续引用全局的i的。c里面没有这个定义

你把static理解成为全局变量来理解， 只是这个变量只在这个循环体内有效 static int I=1；  只有在第一次进入循环体的时候才是1， 属于定义时候的初始化 此后再次进来的时候，还是上次的数值


Question: 一个c程序的问题

把main里面所有放到一个函数里就是函数方式


Question: 如何实现定义一个n阶的二维数组？

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

应该是想搞一个一开始未知行列的二维数组吧 初学者一般就定义一个大的，然后根据需要选择其中的一部分使用就行 不然可以自己根据需要分配内存空间，但初学应该学不到这里

int a[3][3]= {{1,2,3}, {4,5,6}, {7, 8, 9}}; int b[3][3] = {1,2,3,4,5,6,7,8,9 }; 两个一样


Question: 这道题如何设计输入未知个数的编程呢？

可以使用结束符，ctrl+D(linux), ctrl+Z(window)，对应的是文件结束符

自己写代码，再烂也可以发上来提问  要原码的自己百度就行了


Question: C语言！！！！！

引用 7 楼 自信男孩 的回复：#include "stdio.h"  int main() {     int a, n, s, t;     printf("Please input a,n:\n");     scanf("%d%d", &a, &n);     if (n <= 0) {         printf("s= %d", 0);          return 0;     }     s = 0;     t = a;     //printf("%d + ", t);     while (n>1)     {         s = s + t;         t = (t * 10) + a;         //printf("%d + ", t);         n--;     }     s += t;     //printf("%d\n", t);     printf("s=%d", s);     return 0; }  供参考～%d+ 还有 n--/是什么意思 求指教

引用 4 楼 WQR1994 的回复：那怎么会s未定义……我加上了 但是.. 输入了a 和n之后 没结果

引用 3 楼 user-4 的回复:a值不变  循环第一句是 t = a; 不停重置 t 等于你一直加相同数 我那个while循环里面第一句不是用了 t=a了吗

那怎么会s未定义……

a值不变  循环第一句是 t = a; 不停重置 t 等于你一直加相同数

引用 1 楼 WQR1994 的回复:应该是没初始化吧,加上s=0; 改为 int s=0 也不对啊

应该是没初始化吧,加上s=0;


Question: 郑州轻工业大学第十一届蓝桥杯选拔赛

#include <stdio.h> #include <string.h> #include <ctype.h>   int encrypt(int ch, int n) {     if (islower(ch))         return 'a' + (ch - 'a' + n) % 26;     if (isupper(ch))         return 'A' + (ch - 'A' + n) % 26;      return ch; }   int main() {     char str[100];     scanf("%s", str);     int i,a;     a=strlen(str);     for(i=0;i<a;i++)     {         str[i] = encrypt(str[i], 3);     }   供参考～


有知道的大佬可以回个话不？


Question: C语言书上的题

百度“C语言单词缩写”


Question: 排序求解

引用 楼主 txrainyun的回复:这里为什么会输出奇怪的数字呢？求解 #include <stdio.h>int main( ) { int n,i,j,t,a[10] ;scanf( "%d" , &n) ; for(i=0;i<n;i++ )scanf("%d" ,&a[i]);for(i=0; i<n-1;i++ ){ for(j=0;j<n-1-i;j++) if(a[j]<a[j+1])t=a[j]; a[j]=a[j+1] ;a[j+1 ]=t; } } for(i=0;i<n;i++){ if(i==n-1) pr intf( "%d\n" ,a[i]);else printf("%d ",a[i]);return 0;

不知道   不给出代码， 神仙也猜不出来啊


Question: 求帮忙

直接要代码的，一律不给  自己写错了的，可以发上来提问

直接要代码的，一律不给  自己写错了的，可以发上来提问


Question: 郑州轻工业大学第十一届蓝桥杯校内选拔赛题解

这个题要了解字符串数组的输入和判断其长度以便于控制循环的次数，然后就是出现第一个元音时要跳出循环用break语句，但是早知道要在if语句中结束。


Question: C-Free下编译运行提示运行程序错误，运行简单的没问题，稍微复杂的就不行了

警告应该是没有 #include <stdlib.h> 因为malloc原型是在这个头文件里面  什么叫简单运行可以，稍微复杂就不行了呢？  代码当中除了head->date没有被利用属于废物节点之外， 其他输入的数据都是串联在后面了，单项链表已经形成了。


Question: 想问一下我的问题在哪里？

好的，谢谢你的回复。

直接改算法： 做一个255大小的数组，模拟ascii表 读取字符串， 有哪个字符把数组对应的部分设置为1 输出就简单了，按照ascii表的顺序，找到数字，大写，小写的区域，对应数组不是0的就输出


Question: 帮忙看下叭哪里不对啊

两重循环范围都少了一次， 结果对是瞎猫遇到死耗子了

你这结果不是对的吗，有啥问题吗

不用了我搞错了哈哈，麻烦大家了哈


Question: 數值排序

引用 1 楼 寻开心 的回复：你的数组大小就是6， 而且已经录入6个了，而且看代码是做过了冒泡排序的。 再加上一个数字就是7个。  打算如何处理多出来的一个呢？ 把最后挤掉，还是把第一个挤掉呢？我下面有寫‘’輸入刪除的數字’‘當我輸入數字他就要從陣列去找到數值並刪除，然後再重新排列陣列順序


Question: 用数组统计不及格人数

我主要不知道函数调用那个返回值咋返回，然后也没写清楚😂略略略略略略

谢谢你～我们学的调用函数😂，也是用if语句的哈哈哈

#include <stdio.h> int main() { 	int a[10]; 	int i=0,jg=0,bjg=0; 	for(i=0;i<10;i++){ 	scanf("%d",&a[i]); 	if(a[i]<60) 	bjg++; 	else if(a[i]>=60&&a[i]<=100) 	jg++; 	else  	printf("请输入有效值；"); 	} 	printf("及格的为：%d人，不及格的为%d人",jg,bjg); } 我也是新学者，我自己尝试写了一下，你可以参考看看。。

很简单的一个。 先定义一个空间为40的数组，然后让用户输入所有学生的数值，用scanf输入到数组里。再用一个for循环判断所有的数值是否及格，不及格一次i+1，最后输出i。 最后，不要期望别人直接给你成品程序。


Question: fflush(NULL)是什么意思？

我觉得是不是楼主应该换一份学习资料。

fflush(NULL)  把所有打开的用于输出的缓冲的内容都写入流文件


Question: 二维数组作参数调用函数

要不你把void z函数放到main前面，要么在MAIN前加函数声明


Question: 求疑～

一楼都跟你说了问题，还说不知道

引用 2 楼 SuperDay的回复:[quote=引用 1 楼 user-2的回复:][quote=引用 楼主 你喜欢水吗？的回复:]题目描述 输入3个整数，输出它们的1次幂、2次幂和3次幂。 输入 输入3整数，用空格隔开 输出 输出3行，每行3个整数，分别是它们的1次幂、2次幂和3次幂，每个整数占9列，不足9列左对齐 #include<stdio.h>  int main() {     int i,j;     char ch[3];     for(i=0;i<3;i++)     {     scanf("%d",&ch[i]);     }     for(i=0;i<3;i++)     {     j=ch[i];     printf("%-9d",j);     printf("%-9d",j*j);     printf("%-9d",j*j*j);     }     return 0; } 提交时提示答案错误，有点不解，希望大神解释一下。。。。 这个字符串定义好像是应该是整形 后面printf循环最后再printf（“/n”）就回换行 [/quote] 换行符是"\n"而不是"/n"，三个整数定义int i, j, k;就好了，完全不必要用数组[/quote] 可以直接编，但就是有点不知道这错在哪里了

引用 1 楼 user-2的回复:[quote=引用 楼主 你喜欢水吗？的回复:]题目描述 输入3个整数，输出它们的1次幂、2次幂和3次幂。 输入 输入3整数，用空格隔开 输出 输出3行，每行3个整数，分别是它们的1次幂、2次幂和3次幂，每个整数占9列，不足9列左对齐 #include<stdio.h>  int main() {     int i,j;     char ch[3];     for(i=0;i<3;i++)     {     scanf("%d",&ch[i]);     }     for(i=0;i<3;i++)     {     j=ch[i];     printf("%-9d",j);     printf("%-9d",j*j);     printf("%-9d",j*j*j);     }     return 0; } 提交时提示答案错误，有点不解，希望大神解释一下。。。。 这个字符串定义好像是应该是整形 后面printf循环最后再printf（“/n”）就回换行 [/quote] 换行符是"\n"而不是"/n"，三个整数定义int i, j, k;就好了，完全不必要用数组

引用 楼主 你喜欢水吗？的回复:题目描述 输入3个整数，输出它们的1次幂、2次幂和3次幂。 输入 输入3整数，用空格隔开 输出 输出3行，每行3个整数，分别是它们的1次幂、2次幂和3次幂，每个整数占9列，不足9列左对齐 #include<stdio.h>  int main() {     int i,j;     char ch[3];     for(i=0;i<3;i++)     {     scanf("%d",&ch[i]);     }     for(i=0;i<3;i++)     {     j=ch[i];     printf("%-9d",j);     printf("%-9d",j*j);     printf("%-9d",j*j*j);     }     return 0; } 提交时提示答案错误，有点不解，希望大神解释一下。。。。 这个字符串定义好像是应该是整形 后面printf循环最后再printf（“/n”）就回换行

引用 楼主 你喜欢水吗？的回复:题目描述 输入3个整数，输出它们的1次幂、2次幂和3次幂。 输入 输入3整数，用空格隔开 输出 输出3行，每行3个整数，分别是它们的1次幂、2次幂和3次幂，每个整数占9列，不足9列左对齐 #include<stdio.h>  int main() {     int i,j;     char ch[3];     for(i=0;i<3;i++)     {     scanf("%d",&ch[i]);     }     for(i=0;i<3;i++)     {     j=ch[i];     printf("%-9d",j);     printf("%-9d",j*j);     printf("%-9d",j*j*j);     }     return 0; } 提交时提示答案错误，有点不解，希望大神解释一下。。。。 知道问题是啥了，谢了

三个整数不是用char [3]类型，而是int [3]类型，并且实际上不需要数组，定义int i, j, k;就可以了，代码都发上来了，都不会复制吗？

引用 5 楼 SuperDay的回复:一楼都跟你说了问题，还说不知道 我这里少粘贴了printf("\n"),但加上之后依然是错的


Question: 有没有现成的关于信号处理算法库？

引用 5 楼 TravelWithSongs 的回复:滤波类的看见的都是大家手撸的，暂且对这个不太了解 谢谢  网上手撸的代码，与那些知名的库结果还是有些不同的，不够可靠  比如使用fftw 的变换结果，就和numpy 和 scipy 库的fft变换结果一致，其它网友手撸的代码，结果就不同

滤波类的看见的都是大家手撸的，暂且对这个不太了解

引用 2 楼 TravelWithSongs 的回复:傅里叶变换 fftw ，至于别的不知道了 找到了，可以用，谢谢 还需要别的：淲波、希尔伯特变换，了解吗？

网上找了几个FFT 变换的 C 代码，处理结果好像都不对。 与Python  numpy 处理结果对不上  import numpy as np  r = np.fft.fft([1,2,3,4,5])

傅里叶变换 fftw ，至于别的不知道了


Question: 为什么我的螺旋数组运行后是这样？

引用 1 楼 user-1的回复:printf 打出来的是地址，能不大嘛 一语惊醒梦中人，谢谢！

printf 打出来的是地址，能不大嘛


Question: C 语言求独特平方数

四位是完全平方数的很少  int I; for ( I = sqrt(1000); i<sqrt(10000); i++ ) {. // for (i=32, i<100; i++ )      int k = I * i;      int a = k % 100; int b =. k/100;      if (a +b  == i ) printf("%d", k);  }  // 对于i=55情况，  k=3025。 a=30， b=25， 可输出

#include <stdio.h>  int Verify(int i);  int main(void) {     for (int i = 1000; i < 10000; ++i)     {         if (Verify(i))             printf("%d\n", i);     }      return 0; }  int Verify(int i) {     if (i < 1000 || i>9999)         return 0;      int b, e;     b = i / 100;     e = i % 100;     if (i == (b + e) * (b + e))         return 1;     else         return 0; }


Question: vs2008 c语言 double输入错误，请指教！

引用 2 楼 csucxy 的回复:区分数字1和字母l。 +1

非常感谢各位指教！谢谢了！

区分数字1和字母l。

%LF（小写） 不是 %一F


Question: 二维数组作参数，调用函数

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

请参考《C++中二维数组与指针》 《C++二维数组》 希望能够帮到你！

推荐 一个数组和动态数组的 blog  https://blog.csdn.net/jean7155/article/details/103339492 我今天写的学习总结笔记。欢迎交流啊

wow是的诶，感谢啦

void z(int[100][100]);  这一句要放到 int main（） 的前面。   z函数实现体里面，你仔细想想，既然是交换数据， j是要从0到100循环吗？ 你现在这样循环结果， 比如x【1】【2】 和x【2】【1】 是不是会被交换了两次？！！ 第一次i=1， j=2；  交换；  第二次 i=2， j=1的时候， 是不又交换了一次。   这样交换两次，是不是就白玩儿了啊   所以z里面的双重循环是不能那样写的。

引用 2 楼 jean7155的回复:请百度一下 动态数组相关知识。 例如下面的代码  int m=2; int n=3; int ** mArray = new int*[m];     for (int i=0; I<n; i++) {         mArray[i] = new int[m]();     }  还没有学到这块，继续学习了，感谢

可以尝试一下int **x


Question: 求帮助

试一试scanf %d%d%d


Question: 数组中插入一个元素

insert函数这样设计不行啊 要想插入一个元素到数组的指定位置，需要把原位置开始到结尾的内容全部向后移动一位，还要知道要插入的数值 这样的话insert函数需要四个参数， 数组， 数组长度，要插入的位置，要插入的数值  假如 void insert(int * p, const int lent , const int pos , int value)  {      用i从数组最后一个位置开始，一直到pos位置， 做一个循环          p[I+1] = p[I     p[I] = j; };

一个接一个地移动，把位置让出来以后，再插入。


Question: 简单数据类型及switch语句判定执行问题

引用 1 楼 寻开心 的回复:case 0:         .....         break; case 1:  你少了break语句，所以又执行case 1下面的命令了case 0: ...... 这个语句里面两句都有break;语句啊，没少啊？ 我在case 1: ...... case 2:后面加break语句，它就没有输出‘$’但还是会输出‘*’'#'，这是怎么回事？

case 0：       switch（b==0） ｛             case 0：                  break;            case 1：                  break；      ｝  break; 没有这个， 下面的case 1部分也被执行了 case 1：

引用 3 楼 寻开心的回复:你的case是第二重的， switch c 的 但是针对第一重 switch （a）里面的case 0， 1什么的，都没有break  break只退出一重 那switch（c）是因为c==2，才执行case 2：吗？ 如果是1就执行case 1：吗？如果是0就执行default吗？


Question: 用指针进行字符的移动

引用 3 楼 寻开心的回复:先保存 p+n 位置的数据到t  从p+n开始，一直到p+strlen（c）-2做循环      每个位置的值都是下个位置的值  最后一个位置的值设置为t  这样的代码很简单，自己尝试去写。 思路就是上面这样 好的，我试试，谢谢您

引用 1 楼 寻开心的回复:getchar(); for(i=0;c[i]!='\0';i++) { scanf("%c",&c[i]);  }   scanf("%d",&n);  这个部分直接修改成     scanf("%s%d", c, &n);  就好了，一次性把字符串接收进来，不要一个字符一个字符的，那需要判断是否遇到会车结束了， 增加程序复杂度  输出用puts 或者 printf（“%s”， c） 这样的 这个地方对了，能麻烦你再帮我看一下指针这里哪里出错了吗？我这样并不能得到正确的输出答案


Question: 大佬大佬大佬帮忙

这是linux系统下的控制台操作， 你要在哪儿输入啊？？winows系统下是肯定没这个玩意儿


Question: 一个C语言语法的问题！！

引用 6 楼 这是一个正经昵称的回复:while里的就是循环的条件，为真继续为假退出，每次循环f先自加1，然后取p[f]指向的字符，判断字符是不是和0 - +相等，相等就继续。那么不想等的时候自然是到了字符.的位置，此时打印p+f就是.字符和它以后的 那么这个逗号就是一个逗号运算符了呗

引用 2 楼 这是一个正经昵称的回复:循环到遇到不是-,0,+的位置就是.了，然后p偏移到.的位置再打印就是.和后面的内容，就是.1 非常感谢，但是我想知道他的运行过程，我分析代码时候完全看不出来这个代码功能。

这个while循环里边执行的过程是什么样的呢。或者说这个能够拆分成什么样的代码呢？

对不起阿，刚刚那个打错了了，附上新的代码 #include<stdio.h> void main() { 	int f = -1; 	char* p = "-000000.1"; 	while (++f, p[f] == '0' || p[f] == '-' || p[f] == '+'); 	 	printf("%s",p+f); 	 }结果


Question: 字符串中数字转化*，但是循环无法执行

引用 3 楼 user-1的回复:[quote=引用 2 楼 qq_45818304 的回复:] [quote=引用 1 楼 user-1的回复:]嵌套循环都用i一个计数？      不可以吗？？？？？？？？？[/quote] 没有说不可以，只是达不到你要的效果，你的问题不是为什么没有效果吗？你的循环内部改变了计数，那么只循环一次就结束了。[/quote] 谢谢谢谢~~我改了改运行出来了

引用 2 楼 qq_45818304 的回复:[quote=引用 1 楼 user-1的回复:]嵌套循环都用i一个计数？      不可以吗？？？？？？？？？[/quote] 没有说不可以，只是达不到你要的效果，你的问题不是为什么没有效果吗？你的循环内部改变了计数，那么只循环一次就结束了。

引用 1 楼 user-1的回复:嵌套循环都用i一个计数？      不可以吗？？？？？？？？？

嵌套循环都用i一个计数？


Question: 编程题

scanf("%d %d",&a,&b); if(a>b)printf("%d",b); else printf("%d",a);

输入会不会 比较会不会 输出会不会 都不会? 看书

没自己写的代码的， 不答复 只要原码的，百度去找好啦


Question: 线程运行完一个时间片后就一定会被切换吗？

又见楼主，每次都发这么高深的帖子，真是厉害啊

引用 6 楼 六道佩恩 的回复:[quote=引用 5 楼 gouyanfen 的回复:] 忘记回答一个问题，有关时间片的长度，上面说的临界值的问题，这个临介值就可以看做是一个时间片的长度，这个用硬中断来保证，CPU会提供，其实要搞清楚这个，可以买单片机无操作系统状态写测试，应该就容易理解清楚。 所以都是分配 不同时长的时间片*1，而不是分配 相同时长的时间片*n 是吗？[/quote] 最小单位肯定是*1,硬中断之后重新调度，这个具体能不能获得连续的时间片，不切换，需要看调度算法。

引用 5 楼 gouyanfen 的回复:忘记回答一个问题，有关时间片的长度，上面说的临界值的问题，这个临介值就可以看做是一个时间片的长度，这个用硬中断来保证，CPU会提供，其实要搞清楚这个，可以买单片机无操作系统状态写测试，应该就容易理解清楚。 所以都是分配 不同时长的时间片*1，而不是分配 相同时长的时间片*n 是吗？

肯定是看线程优先级来定义不同的时间片的时长,比如操作系统在设计时系统核心进程需要在任何时候能够及时响应，就必需给他最多的时间片来处理，那么系统核心线程就一定会占用更长的时间片，只有在没有需要处理时才会分配时间片给用户线程。而且核心线程失去时间片的时间也有一定有限制的，比如不可以超过一个临界值就必须切回来才可以保证系统的流畅性。

应该。。。与线程的调度算法以及优先级有关吧

应该。。。与线程的调度算法以及优先级有关吧


Question: 求解

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

引用 4 楼 qq_45852575 的回复:[quote=引用 3 楼 这是一个正经昵称的回复:]a[0] 改 a[i] 那么，i从哪里来？ 之所以是a[0],那是因为，传进去的是aa[i]的地址，指针指向的位置就是 i 这里，你姑且可以当做是创建了一个数组, 然后a[0]=aa[i],a[1]=aa[i+1]...a[n]=aa[i+n]  然后第二个，void没有返回值，但是可以执行return。然后这个题并不是函数返回的原因，是因为传了b的地址 &b进去，通过指针修改此地址上的值，原来的变量的值一样会被改动的，char b的时候分配了一个char大小的内存存放数据‘a’，然后&b是地址，b就是*（&b）就是代表此地址的值，通过&b修改值为‘b’那么*（&b）自然也就变成了'b'，就是char b变成了‘b’ 感谢,有点明白了，第二个问题是否是，第一次执行void函数输出b，B         第二次由于b被改变了地址就变不回来了，而a还是原来的'A'[/quote]  b改变的不是地址，是通过地址改变了存放的数据，比如科技大道213号(char b存放处)原来是个小平房（'a'），现在把写了地址的纸条（指针）给了建筑工人（函数fun（）），他们找过来把平房（数据'a'）拆了盖（*c=*c+1）成了楼('b')，那么我再按地址（char b地址）来找东西，找到的就是这楼('b')。

引用 3 楼 这是一个正经昵称的回复:a[0] 改 a[i] 那么，i从哪里来？ 之所以是a[0],那是因为，传进去的是aa[i]的地址，指针指向的位置就是 i 这里，你姑且可以当做是创建了一个数组, 然后a[0]=aa[i],a[1]=aa[i+1]...a[n]=aa[i+n]  然后第二个，void没有返回值，但是可以执行return。然后这个题并不是函数返回的原因，是因为传了b的地址 &b进去，通过指针修改此地址上的值，原来的变量的值一样会被改动的，char b的时候分配了一个char大小的内存存放数据‘a’，然后&b是地址，b就是*（&b）就是代表此地址的值，通过&b修改值为‘b’那么*（&b）自然也就变成了'b'，就是char b变成了‘b’ 感谢,有点明白了，第二个问题是否是，第一次执行void函数输出b，B         第二次由于b被改变了地址就变不回来了，而a还是原来的'A'

引用 5 楼 这是一个正经昵称的回复:[quote=引用 4 楼 qq_45852575 的回复:] [quote=引用 3 楼 这是一个正经昵称的回复:]a[0] 改 a[i] 那么，i从哪里来？ 之所以是a[0],那是因为，传进去的是aa[i]的地址，指针指向的位置就是 i 这里，你姑且可以当做是创建了一个数组, 然后a[0]=aa[i],a[1]=aa[i+1]...a[n]=aa[i+n]  然后第二个，void没有返回值，但是可以执行return。然后这个题并不是函数返回的原因，是因为传了b的地址 &b进去，通过指针修改此地址上的值，原来的变量的值一样会被改动的，char b的时候分配了一个char大小的内存存放数据‘a’，然后&b是地址，b就是*（&b）就是代表此地址的值，通过&b修改值为‘b’那么*（&b）自然也就变成了'b'，就是char b变成了‘b’ 感谢,有点明白了，第二个问题是否是，第一次执行void函数输出b，B         第二次由于b被改变了地址就变不回来了，而a还是原来的'A'[/quote]  b改变的不是地址，是通过地址改变了存放的数据，比如科技大道213号(char b存放处)原来是个小平房（'a'），现在把写了地址的纸条（指针）给了建筑工人（函数fun（）），他们找过来把平房（数据'a'）拆了盖（*c=*c+1）成了楼('b')，那么我再按地址（char b地址）来找东西，找到的就是这楼('b')。[/quote] 非常感谢你的耐心讲解 ，我懂了

引用 1 楼 这是一个正经昵称的回复:第一个，sum函数传入一个指针，通过指针把当前指向的值改成后一个的值，以此类推循环过后0 1 2 3地方的值都变成了4。 第二个，传入了b的地址和a的ASCII值，分别加1后打印字符为b B，函数返回后由于b是通过地址修改了指向内存的字符，而a不是，所以打印为A b 最后一个，我觉得答案不唯一吧，首先声明函数，那么函数参数肯定和下面用的时候是一样的，照搬就是第一个空。第二个，我觉得这个指针用不用都行吧，用的话初始化他为&a，不用就NULL或者0吧。然后如果用指针就传x给函数，没用就&a。然后while里要对指针指向的值进行运算，所以用*a。 第一个问题中    a【0】=a【1】不应该改成a【i】=a【i-1】吗 第二个中void函数不是不能返回？ 感谢


Question: C语言编程题

自己写， 出错再提问 要原码的，自己百度找去


Question: 请问为什么运行正确，但提交错误呢？


Question: 怎么会有两种情况？想了半个小时没想通，望细说！


Question: 简单逻辑运算问题

引用 3 楼 user-1的回复:这程序不是有毛病吗？第二个else不会到了，w=y 我运行到是没出现什么问题

这程序不是有毛病吗？第二个else不会到了，w=y

引用 1 楼 user-1的回复:a=0所以!a等于1，1是真 那这题：求x和w的值：   int x=0, y=1, z=2, w; if(x++)w=x;   else if(x++&&y>=1)w=y;   else if(x++&&z>1) w=z; A.0，1     B.1，1   C.2，1  D.3 /*if(x++) 是先判定再加一吗？ 是的话，它是把下面else if语句两句都执行还是？ 不是的话，它就执行w=x；然后退出吗？ 我不太理解if   else语句结构*/

a=0所以!a等于1，1是真

引用 3 楼 user-1的回复:这程序不是有毛病吗？第二个else不会到了，w=y 语句中各case与后面的常量表达式之间必须有空格，这句话有错吗？


Question: C语言小白在线等大神解决.....

printf("\n")


Question: 这个题怎么做啊，在线等，挺急的

这个不是提问题，而是要答案，


Question: 求助啊啊啊 救救我吧 吃蛋问题


Question: C语言问题

实践是检验真理的唯一标准 VS2015调试  scanf()函数没有屏蔽回车，所以c1,c2,c3,c4的值分别是1， 2， 3， 回车 c5和c6的值是4和5 对于屏蔽回车的方法请参考《C++中getchar()的使用方法》


Question: 这里是不是讲错了

尽信书不如不信书 还是自己做实验，用数据来说话

把board改成 	char board[3][3] = { 		{'9', '8', '7'}, 		{'6', '5', '4'}, 		{'3', '2', '1'} 	}; 之后使用 for (int i = 0; i < 9; ++i) 	{ 		printf("board: %c\n", **board + i); 	} 就会得到书上的结果了  原因就是书上介绍的。 您也可以参考《C++二维数组》 希望能够帮到你！

引用 2 楼 寻开心的回复:输出结果会是这样 2 4 6 8 0 1 3 5 7           这是原始顺序， 输出数据的 2 3 4 5 6 7 8 9 :            这都不是了     它是对数组第一个元素不断增加 2 8 3 s O ~ \364 \376   这个也不是了，已经越界，输出不知道什么鬼了 你写的我看懂了，没问题。但是书上那个为什么就直接从9开始了，不应该也从1往后递增吗

不要用这个 1～9 的二维数组，那样看不明显  #include<stdio.h> #include <string.h> int main() {     char  p[3][3] =  {'2', '4', '6', '8', '0', '1', '3','5','7'};     int i =0;     for ( i=0; i<9; i++ )         printf("%c ", *(*p+i));     printf("\n");      for ( i=0; i<9; i++ )         printf("%c ", **p+i);     printf("\n");      for ( i=0; i<9; i++ )         printf("%c ", **(p+i));     printf("\n");      return 0; }


Question: 求大神

是否闰年决定2月是28天还是29天 四年一闰， 百年不闰，四百年再闰 做一个12位的数组， 把每个月的天数放里面。 如果是如年2月28天，非闰年29就天 其他的没什么好说的， 代码自己写。  哪怕再烂也自己写出来，有问题贴出代码再问  只要原码的自己百度去


Question: C语言实现栈的插入输出算法

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


Question: 如何输入输出字符串？这道题能用switch-case吗？求讲解

引用 2 楼 S_GKCYY 的回复：[quote=引用 1 楼 SuperDay 的回复:] 又是你！这个代码该从何说起啊？ 缘分呐，哈哈。 我在自学，有问题就只能上论坛啦，也谢谢您教了我很多。 题目我琢磨一下改过来了  #include<stdio.h>  main()   { 	int c; 	char  x , y ; 	scanf("%c",&x); 	 	c=(x<97)+(x<124)+(x<128)+(x==' '); 	switch(c) 	{ 		case 4: printf("space\n"); 				break; 		case 3:  		case 1: printf("digit\n"); 				break;	 		case 2: printf("letter\n"); 		        break; 		default: printf("other\n"); 	} }[/quote]楼主你好，我也是新手没学到你的那个地方 ，我想问一下C＝那一行代码的意思，能解释一下吗，谢谢啦

问题是，根本就不对啊！

能想出来用   c=(x<97)+(x<124)+(x<128)+(x==' ');     switch(c)  这个想法很有创意，不论对不对。  至少这是真的动脑筋想的， 比直接要代码的强的太多了。   有前途

#include<stdio.h> main()  { 	int c; 	char  x , y ; 	scanf("%c",&x); 	 	c=(x<58)+(x<124)+(x==' '); 	switch(c) 	{ 		case 3: printf("space\n"); 				break; 		case 2:	printf("digit\n"); 				break;			 		case 1: printf("letter\n"); 		        break; 		default: printf("other\n"); 	} } 改过来了这个c的赋值方法我刚学，所以练习一下，谢谢您的教导。

c >= '0' && c <= '9'

引用 10 楼 SuperDay 的回复:不是，你的理解方面有点不到位啊 唔。。。不是0~9输出letter？那是啥？

不是，你的理解方面有点不到位啊

引用 8 楼 SuperDay 的回复:数字不明白吗？。。。 是我范围写错了是吧？哈哈哈

数字不明白吗？。。。

引用 5 楼 SuperDay 的回复:数字指的是从0到9的字符 还有，不要迷信case，if也挺好，该用的时候还得if管用 不要想着取巧，中规中矩也是一种优点 谢谢指导，我会好好学的。

数字指的是从0到9的字符。。。恩。。。怎么理解呢？

唔，好吧，更深的我还没学

这个好一点，不过还是差好多

引用 1 楼 SuperDay 的回复:又是你！这个代码该从何说起啊？ 缘分呐，哈哈。 我在自学，有问题就只能上论坛啦，也谢谢您教了我很多。 题目我琢磨一下改过来了  #include<stdio.h>  main()   { 	int c; 	char  x , y ; 	scanf("%c",&x); 	 	c=(x<97)+(x<124)+(x<128)+(x==' '); 	switch(c) 	{ 		case 4: printf("space\n"); 				break; 		case 3:  		case 1: printf("digit\n"); 				break;	 		case 2: printf("letter\n"); 		        break; 		default: printf("other\n"); 	} }

又是你！这个代码该从何说起啊？


Question: 求快速找最大无完全平方因子

引用 11 楼 牧濑EL的回复:顺便问一下题目链接 学校的题目，要连内网

顺便问一下题目链接

分解质因数，然后扫一遍把不重复的累乘起来即可。 比如分解出来n=2*2*2*3*7*11*11 直接输出2*3*7*11 你写的也太麻烦了。

引用 6 楼 牧濑EL 的回复:[quote=引用 5 楼 qq_45697381 的回复:] [quote=引用 4 楼 user-2的回复:]没有，把你说超时的发出来啊 #include<stdio.h>#include<string.h>#include<math.h>#define nuh 1005L#define nu 1005#define N 1000005long long num[nu]={1,1},number=0;                                             int prime[N],cnt=0;int fllag[N]={0};void Prime(){	for(int i=2;i<N;i++){		if(fllag[i]) continue;		prime[cnt++]=i;		for(int j=2;j*i<N;j++)			fllag[i*j]=1;	}}	int main(void){	long long input[20];	long long n;	int flagOne;	int flagTwo;	long long yinshu[10005];	int firstTry,secondTry;		int flag=0;	int fi,se;		Prime();		for(flagOne=0;scanf("%lld",&input[flagOne])!=EOF;flagOne++);		for(flagTwo=0;flagTwo<flagOne;flagTwo++)	{				n=input[flagTwo];		for(firstTry=1;firstTry<n/2+0.6;firstTry++)		{			if(n%firstTry==0)			{			yinshu[flag++]=firstTry;			}		}		yinshu[flag]=n;				for(secondTry=flag;secondTry>=0;secondTry--)		{			for(fi=se=0;yinshu[secondTry]%(prime[fi]*prime[fi])!=0&&prime[fi]*prime[fi]<=yinshu[secondTry];fi++)			{				if(yinshu[secondTry]%(prime[fi+1]*prime[fi+1])!=0&&prime[fi+1]*prime[fi+1]>=yinshu[secondTry])		[/quote] 会不会粘代码……[/quote] #include<stdio.h> #include<string.h> #include<math.h> #define nuh 1005 #define nu 1005 #define N 1000005 long long num[nu]={1,1},number=0;                                              int prime[N],cnt=0; int fllag[N]={0};    void Prime(){ 	for(int i=2;i<N;i++){ 		if(fllag[i]) continue; 		prime[cnt++]=i; 		for(int j=2;j*i<N;j++) 			fllag[i*j]=1; 	} }	   int main(void) {  	long long input[20]; 	long long n; 	int flagOne; 	int flagTwo; 	long long yinshu[10005]; 	int firstTry,secondTry;	 	int flag=0; 	int fi,se;  	Prime();  	for(flagOne=0;scanf("%lld",&input[flagOne])!=EOF;flagOne++);  	for(flagTwo=0;flagTwo<flagOne;flagTwo++) 	{  		n=input[flagTwo];  		for(firstTry=1;firstTry<n/2+0.6;firstTry++) 		{ 			if(n%firstTry==0) 			{ 			yinshu[flag++]=firstTry; 			} 		} 		yinshu[flag]=n;  		for(secondTry=flag;secondTry>=0;secondTry--) 		{ 			for(fi=se=0;yinshu[secondTry]%(prime[fi]*prime[fi])!=0&&prime[fi]*prime[fi]<=yinshu[secondTry];fi++) 			{ 				if(yinshu[secondTry]%(prime[fi+1]*prime[fi+1])!=0&&prime[fi+1]*prime[fi+1]>=yinshu[secondTry]) 				{ 				printf("%lld\n",yinshu[secondTry]); 				secondTry=0; 				break;	 				} 			} 		}   	//	printf("%lld\n",yinshu[secondTry]); 	}  	return 0; }

引用 3 楼 qq_45697381 的回复:[quote=引用 2 楼 user-2的回复:]发出来发出来发出来！ 你也在写这题？？？？？？[/quote] #include<stdio.h> #include<string.h> #include<math.h> #define nuh 1005 #define nu 1005 #define N 1000005 long long num[nu]={1,1},number=0;                                              int prime[N],cnt=0; int fllag[N]={0};    void Prime(){ 	for(int i=2;i<N;i++){ 		if(fllag[i]) continue; 		prime[cnt++]=i; 		for(int j=2;j*i<N;j++) 			fllag[i*j]=1; 	} }	   int main(void) {  	long long input[20]; 	long long n; 	int flagOne; 	int flagTwo; 	long long yinshu[10005]; 	int firstTry,secondTry;	 	int flag=0; 	int fi,se;  	Prime();  	for(flagOne=0;scanf("%lld",&input[flagOne])!=EOF;flagOne++);  	for(flagTwo=0;flagTwo<flagOne;flagTwo++) 	{  		n=input[flagTwo];  		for(firstTry=1;firstTry<n/2+0.6;firstTry++) 		{ 			if(n%firstTry==0) 			{ 			yinshu[flag++]=firstTry; 			} 		} 		yinshu[flag]=n;  		for(secondTry=flag;secondTry>=0;secondTry--) 		{ 			for(fi=se=0;yinshu[secondTry]%(prime[fi]*prime[fi])!=0&&prime[fi]*prime[fi]<=yinshu[secondTry];fi++) 			{ 				if(yinshu[secondTry]%(prime[fi+1]*prime[fi+1])!=0&&prime[fi+1]*prime[fi+1]>=yinshu[secondTry]) 				{ 				printf("%lld\n",yinshu[secondTry]); 				secondTry=0; 				break;	 				} 			} 		}   	//	printf("%lld\n",yinshu[secondTry]); 	}  	return 0; }

引用 6 楼 牧濑EL的回复:[quote=引用 5 楼 qq_45697381 的回复:] [quote=引用 4 楼 user-2的回复:]没有，把你说超时的发出来啊 #include<stdio.h>#include<string.h>#include<math.h>#define nuh 1005L#define nu 1005#define N 1000005long long num[nu]={1,1},number=0;                                             int prime[N],cnt=0;int fllag[N]={0};void Prime(){	for(int i=2;i<N;i++){		if(fllag[i]) continue;		prime[cnt++]=i;		for(int j=2;j*i<N;j++)			fllag[i*j]=1;	}}	int main(void){	long long input[20];	long long n;	int flagOne;	int flagTwo;	long long yinshu[10005];	int firstTry,secondTry;		int flag=0;	int fi,se;		Prime();		for(flagOne=0;scanf("%lld",&input[flagOne])!=EOF;flagOne++);		for(flagTwo=0;flagTwo<flagOne;flagTwo++)	{				n=input[flagTwo];		for(firstTry=1;firstTry<n/2+0.6;firstTry++)		{			if(n%firstTry==0)			{			yinshu[flag++]=firstTry;			}		}		yinshu[flag]=n;				for(secondTry=flag;secondTry>=0;secondTry--)		{			for(fi=se=0;yinshu[secondTry]%(prime[fi]*prime[fi])!=0&&prime[fi]*prime[fi]<=yinshu[secondTry];fi++)			{				if(yinshu[secondTry]%(prime[fi+1]*prime[fi+1])!=0&&prime[fi+1]*prime[fi+1]>=yinshu[secondTry])		[/quote] 会不会粘代码……[/quote] 传到手机上粘的，我在传一次T^T

引用 5 楼 qq_45697381 的回复:[quote=引用 4 楼 user-2的回复:]没有，把你说超时的发出来啊 #include<stdio.h>#include<string.h>#include<math.h>#define nuh 1005L#define nu 1005#define N 1000005long long num[nu]={1,1},number=0;                                             int prime[N],cnt=0;int fllag[N]={0};void Prime(){	for(int i=2;i<N;i++){		if(fllag[i]) continue;		prime[cnt++]=i;		for(int j=2;j*i<N;j++)			fllag[i*j]=1;	}}	int main(void){	long long input[20];	long long n;	int flagOne;	int flagTwo;	long long yinshu[10005];	int firstTry,secondTry;		int flag=0;	int fi,se;		Prime();		for(flagOne=0;scanf("%lld",&input[flagOne])!=EOF;flagOne++);		for(flagTwo=0;flagTwo<flagOne;flagTwo++)	{				n=input[flagTwo];		for(firstTry=1;firstTry<n/2+0.6;firstTry++)		{			if(n%firstTry==0)			{			yinshu[flag++]=firstTry;			}		}		yinshu[flag]=n;				for(secondTry=flag;secondTry>=0;secondTry--)		{			for(fi=se=0;yinshu[secondTry]%(prime[fi]*prime[fi])!=0&&prime[fi]*prime[fi]<=yinshu[secondTry];fi++)			{				if(yinshu[secondTry]%(prime[fi+1]*prime[fi+1])!=0&&prime[fi+1]*prime[fi+1]>=yinshu[secondTry])		[/quote] 会不会粘代码……

引用 4 楼 user-2的回复:没有，把你说超时的发出来啊 #include<stdio.h>#include<string.h>#include<math.h>#define nuh 1005L#define nu 1005#define N 1000005long long num[nu]={1,1},number=0;                                             int prime[N],cnt=0;int fllag[N]={0};void Prime(){	for(int i=2;i<N;i++){		if(fllag[i]) continue;		prime[cnt++]=i;		for(int j=2;j*i<N;j++)			fllag[i*j]=1;	}}	int main(void){	long long input[20];	long long n;	int flagOne;	int flagTwo;	long long yinshu[10005];	int firstTry,secondTry;		int flag=0;	int fi,se;		Prime();		for(flagOne=0;scanf("%lld",&input[flagOne])!=EOF;flagOne++);		for(flagTwo=0;flagTwo<flagOne;flagTwo++)	{				n=input[flagTwo];		for(firstTry=1;firstTry<n/2+0.6;firstTry++)		{			if(n%firstTry==0)			{			yinshu[flag++]=firstTry;			}		}		yinshu[flag]=n;				for(secondTry=flag;secondTry>=0;secondTry--)		{			for(fi=se=0;yinshu[secondTry]%(prime[fi]*prime[fi])!=0&&prime[fi]*prime[fi]<=yinshu[secondTry];fi++)			{				if(yinshu[secondTry]%(prime[fi+1]*prime[fi+1])!=0&&prime[fi+1]*prime[fi+1]>=yinshu[secondTry])

没有，把你说超时的发出来啊

引用 2 楼 user-2的回复:发出来发出来发出来！ 你也在写这题？？？？？？

发出来发出来发出来！

引用 楼主 qq_45697381的回复:In Ruby's mind, there exists a sort of numbers, which are called awesome number. Ruby defines that, a positive integer x is called awesome if and only if there is no such positive integer a > 1 such that a^2 is divisor of x.Sapphire has a magical pocket, which contains all the divisors of n. As a nice present, Sapphire wants to give an awesome number to Ruby. Besides, she wants this number should as big as possible. Therefore, the current issue is what is the biggest awesome number in her pocket.  InputThere're multiple data sets. Each set contains a single line. Each line contains a number, which represents n. 1 <= n <= 1,000,000,000,000  OutputPrint the biggest awesome number in each line.  Sample Input  10 12  Sample Output  10  6  HintIn the 1st case, there exists 1, 2, 5 and 10 in the pocket. 10 is not divisible by any perfect square, so 10 is awesome. In the 2nd case, there exists 1, 2, 3, 4, 6 and 12 in the pocket. 12 is divisible by 4 (4 = 2 * 2). Hence, 12 is not awesome, where 6 is indeed awesome. 限时1000ms，写了好几种方法一直在超时


Question: 为什么会显示这个，怎么解决 error C2449: found '{' at file scope (missing function header?)

#include <stdio.h> int main() {     double x, y;     printf("Enter x:");     scanf("%lf", &x);     if (x != 0)         y = 1 / x;     else         y = 0;     printf("%f(%.1f)\n", x, y);      return 0; }

文件末尾加一行空行试试

void main改成int main，然后函数最后加上return 0; scanf里面x前面加一个& printf里面参数数目不对 其它没发现什么问题

1 又见到著名的void main（）定义了。呵呵。  int main（） 才对    相应的main函数最后加一个 return 0；  2 scanf 里面的x要用指针，  &x 3 最后的printf里面后一个f少了%符号


Question: 用指针实现数组拷贝为啥最后会出现一个框，求解

引用 5 楼 SuperDay 的回复:a=0？ *a = '\0'; ！！！谢谢啦

a=0？ *a = '\0'; ！！！

引用 2 楼 user-2 的回复:照你描述的，直接memcpy不是效率更高吗抱歉啊，我们学指针，老师给的训练题，要是直接用那个就没意义了

引用 1 楼 SuperDay 的回复:说了这么多，你的代码呢？ 在这 #include <stdio.h>  int strcopy(char *a,char *b){     while(*b){ 	*a=*b; 	b++;     a++;  }  	a=0; }  int main(){ 	char buf[64]; 	char *s = "ABCDEFGH";  	strcopy(buf,s); 	printf("%s\n",buf);  	return 0; }

引用 楼主 s_curry_ 的回复:调用一个函数实现拷贝，用指针，while循环，*a=*b，a++，b++，循环结束后，a=0 照你描述的，直接memcpy不是效率更高吗

说了这么多，你的代码呢？


Question: 斐波那契兔子数列问题，在数字达到一定程度出现负数？

引用 3 楼 Cola add ice 的回复:引用 2 楼 liups 的回复:把int换成long long,还不行就上浮点数 换成long long int 之后 每次输出的成年兔子全部变成了0... 很显然，long long需要的格式串是不同于int的！

引用 1 楼 user-2 的回复:int不足以表达那么大的数字，溢出了 但是用long long我每一次输出的成年兔子数变成了0

把int换成long long,还不行就上浮点数

int不足以表达那么大的数字，溢出了


Question: 四则运算计算器相关问题

scanf("%c",&suanfa) 里的 %c 前面加个空格即可。

这个好像跟scanf的特性有关，你试试看在case里面每次使用scanf读取数据之后清理一下缓冲区残留.  fflush(stdin);

不要用exit函数啊，退出需要Ctrl+Z


Question: 求救！

A。。。。。。。。。


Question: 字符串与指针

引用 2 楼 黄哥Python培训的回复:大概是这样的，请自己去修改吧  好的，谢谢你，我试试看。

引用 3 楼 weixin_40290083的回复:不知道是不是符合你的需求。   谢谢你！可以的可以的。

引用 1 楼 user-3的回复:是所有字母之前的星号和所有字母之后的星号吗？ 是的，字母前和字母后的

不知道是不是符合你的需求。

大概是这样的，请自己去修改吧

是所有字母之前的星号和所有字母之后的星号吗？