Question: 大神帮忙看看

用电脑登陆，进入你自己的帖子，找到满意结贴 ，点击给分结贴即可 引用 6 楼 ?Victor.?? 的回复:[quote=引用 5 楼 user-1的回复:]问题解决了要及时结贴！ 怎么结贴呀[/quote]

OK了，把之前的十几个帖子也结了，手机版和电脑版差别好大(✪▽✪)

引用 5 楼 user-1的回复:问题解决了要及时结贴！ 怎么结贴呀

问题解决了要及时结贴！

好的

不明白的函数可以先百度，养成自己先思考查询的习惯 memset将指定长度的内存初始化为特定的值 引用 2 楼 ?Victor.?? 的回复:[quote=引用 1 楼 user-1的回复:] char pStr[1000];  int n;  char pSub[1000]; 后面增加  memset(pStr, 0, sizeof(pStr)); memset(pSub, 0, sizeof(pSub));  即可 谢谢，请问这个memset是干什么用的[/quote]

引用 1 楼 user-1的回复:char pStr[1000];  int n;  char pSub[1000]; 后面增加  memset(pStr, 0, sizeof(pStr)); memset(pSub, 0, sizeof(pSub));  即可 谢谢，请问这个memset是干什么用的


Question: C语言

引用 5 楼 suifengsanjin的回复:[quote=引用 4 楼 weixin_45961963 的回复:] [quote=引用 3 楼 suifengsanjin的回复:][quote=引用 2 楼 weixin_45961963 的回复:] [quote=引用 1 楼 suifengsanjin的回复:]....关系运算符 https://www.runoob.com/cprogramming/c-operators.html 那这个程序中a[i]不是一直等于a[j]吗[/quote]你再看看for循环[/quote] 我是初学者，我感觉i和j的值一直相等，但肯定不对[/quote]...不相等，你可以写个嵌套的for循环 只打印i,j的值看看[/quote] 懂了，先执行里面的再执行外面的

引用 4 楼 weixin_45961963 的回复:[quote=引用 3 楼 suifengsanjin的回复:][quote=引用 2 楼 weixin_45961963 的回复:] [quote=引用 1 楼 suifengsanjin的回复:]....关系运算符 https://www.runoob.com/cprogramming/c-operators.html 那这个程序中a[i]不是一直等于a[j]吗[/quote]你再看看for循环[/quote] 我是初学者，我感觉i和j的值一直相等，但肯定不对[/quote]...不相等，你可以写个嵌套的for循环 只打印i,j的值看看

引用 3 楼 suifengsanjin的回复:[quote=引用 2 楼 weixin_45961963 的回复:] [quote=引用 1 楼 suifengsanjin的回复:]....关系运算符 https://www.runoob.com/cprogramming/c-operators.html 那这个程序中a[i]不是一直等于a[j]吗[/quote]你再看看for循环[/quote] 我是初学者，我感觉i和j的值一直相等，但肯定不对

引用 2 楼 weixin_45961963 的回复:[quote=引用 1 楼 suifengsanjin的回复:]....关系运算符 https://www.runoob.com/cprogramming/c-operators.html 那这个程序中a[i]不是一直等于a[j]吗[/quote]你再看看for循环

引用 1 楼 suifengsanjin的回复:....关系运算符 https://www.runoob.com/cprogramming/c-operators.html 那这个程序中a[i]不是一直等于a[j]吗


Question: 结构体加函数

你那个 结构体里面的score貌似也是整数。 两个整数，你用strcmp来比较 ？

你就不能把代码复制上来吗？！ 弄个破图，看着累死谁啊  错误提示说的是， strcmp需要的参数是两个字符串指针， 你的一个参数是整数，不是字符串指针  看你的strcmp所在的代码， chengji定义为int，这就是错误所在 此外，输入chengji变量的scanf指定的格式还是%lf 表示double， 这个就无法正确输入


Question: 跪求c大佬赐教。

首先不同数据类型的集合肯定是结构体的，至于输入输出的话，前不久回答过这个类似的题目，你可以看看，里面也有结构体的输入和输出之类的操作 c语言-基于链式存储的学生成绩管理系统的设计 急！！！——CSDN问答频道 https://ask.csdn.net/questions/998348


Question: 大佬们，求助！

引用 5 楼 @矛盾综合体的回复:[quote=引用 4 楼 weixin_45818142 的回复:] [quote=引用 2 楼 @矛盾综合体的回复:]如果是比较长度用strlen 但如果找最长字符串 就可以运行[/quote] 我只是建议（还是看你实际需求），如果你的问题已经解决，请采纳，谢谢[/quote] 已解决 感谢感谢感谢感谢

引用 4 楼 weixin_45818142 的回复:[quote=引用 2 楼 @矛盾综合体的回复:]如果是比较长度用strlen 但如果找最长字符串 就可以运行[/quote] 我只是建议（还是看你实际需求），如果你的问题已经解决，请采纳，谢谢

引用 2 楼 @矛盾综合体的回复:如果是比较长度用strlen 但如果找最长字符串 就可以运行

引用 2 楼 @矛盾综合体的回复:如果是比较长度用strlen 这道题是找最小字符串

如果是比较长度用strlen

scanf("%d",&n);gets(str1);这里存在问题，但你输入n的时候，回车键被gets作为行缓存结束标志，所有导致str2中的数据为空，所有你每次比较的时候str2均没有改变（因为他最小），顺便说一句比较strcmp的比较字符串大小不是长度。 解决方法，在中间接收走回车，scanf("%d",&n);getchar();gets(str1);，这样就可以成功接收了


Question: 问题不知道如何描述，请进来看看吧！

m里面，除了下标b引用到m[b]，其它都没有赋值嘛，请记住m是局部变量，出了函数，什么都没留下来的


Question: 约瑟夫问题

int m,n,i; scanf("%d %d\n",&m,&n); 这行代码改成scanf("%d%d",&m,&n); i=Josephus(m,n);  可以解决没有输出的问题  你自己在count++哪里补充一个 printf("%d ", i); 就能看到每次是哪一个被标志为0了， 算法有问题的，原因自己找吧。


Question: 统计各个字符出现的个数

以下是我写的代码： 我不知道哪里错了 运行的时候最后一行 b 1 没显示 求指点！！  #include<stdio.h> int main() { 	int num[80]={0},i=0,j,flag; 	char a[81],c[80]={0}; 	gets(a); 	while (a[i]) 	{ 		flag=0; 		for (j=0;j<i;j++) 		{ 			if (a[i]==a[j]) 			{ 				num[j]++; 				flag=1; 			} 		} 		if (flag==0) 		{ 			c[i]=a[i]; 			num[i]++; 		} 		i++; 	} 	for (i=0;c[i];i++) 	{ 		printf("%c %d\n",c[i],num[i]); 	} 	return 0; }

可以使用map啊，很简单啊， map<char, int>  m;     或者使用数组   char buf[256] = {0};  buf['a'] = 2;  buf['D'] = 1;。。。


Question: 如何把一堆c语言小程序汇总成一个大程序？

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

把小程序中的所有的main函数变为不同的函数名字，建立一个头文件去存放函数名字，新建一个main函数，引用下头文件，然后用stitch, case语句去选择不同的小程序的函数

这个需求挺那什么的！

引用 5 楼 自信男孩 的回复:就是把每个程序里的main去掉，改用一个main，在main里调用所有程序的里的功能函数。 这样可以做，但是会有点不伦不类。建议把功能相近的合并，把需求相关的合并在一起～

你可以头文件里面定义函数（就是写出函数的原型），然后再在一个新建的C文件里面去声明函数（这个新建的C文件里面不能写入main函数），在编译的时候，你先编译声明函数的那个C文件，，使其生成.obj文件。然后再去编译main函数所在的C文件，最终生成.exe文件

楼主的问题提得很好，这个问题更深的可以涉及到Makefile的书写问题，详细的可以在CSDN中搜一下“Makefile”


Question: 求大神指点

这个程序这个输出结果是什么


Question: 为什么这里的for循环不执行，而换成while语句就执行了？求解

#include <stdio.h> #include <math.h> int main() {     double pi=0.0,quarterForPi = 1.0,term=1.0;     int i,x=1;      for(i=1;1;) {         //if(fabs(term) >= 1e-6)         if(fabs(term) < 1e-6)             break;         quarterForPi = quarterForPi + term;         i = i+2;         x = -x;         term = x/i;     }      pi = quarterForPi*4;     printf("pi = %.8lf",pi);     //运行结果始终是4.     /*        int sign = 1;        double pi = 0.0,n=1.0,term=1.0;         while(fabs(term)>=1e-6) {        pi = pi + term;        n = n+2;        sign = -1 * sign;        term = sign/n;        }        pi = pi * 4;        printf("pi = %10.8f\n",pi);        */     return 0;  } 供参考～  不是没执行，而是进入里面就break出来了，感觉是没有执行似得。所以看一下你的break条件，对比一下我的修改～

if(fabs(term) >= 1e-6) break; 这里？  for循环进去后第一行加一个打印看看有没有什么效果

和编译器有关，你打印下true，有的定义为非0，有的定义为-1  你用的编译器很显然true并不是非0


Question: c语言以表格形式输出信息


Question: vc6.0 程序无错 但运行时会崩溃

VC6.0还是尽量不用的好，太老了，确实有很多不兼容的地方

我后来又试了程序 什么也没改 又可以用了 而且应该不是我输入的数据不对导致的

一、无错不是空口说的； 二、运行时输入数据不当也可能崩溃的


Question: windows怎么下载vs

百度网盘也是超慢，我公司电信网络去官网下载半天没动静，家里联通下载几个小时就好了，总共二十多G！

可以的话去官网下载也行，但超级慢

链接：https://pan.baidu.com/s/1JTMkPzCEml7AGdRJnhGsXQ  提取码：xco9  复制这段内容后打开百度网盘手机App，操作更方便哦

官方就有提供下载的，百度一下

不是能先下载一个小的安装包，然后你安装的时候再选择安装哪些工具吗？ https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=Community&rel=15#

先说一下要什么版本！ 另外建议去MSDN I TELL YOU找连接，用迅雷之类的下载


Question: 输入一对数据的时候结果正确，输入多对数据结果错误


Question: 关于scanf，求教！！


Question: 求改正

麻烦去看看printf的输出格式，你不按格式怎么对？

aver=fun(score) ===》 for()循环外面，定义 sum if(i !=10) {     sum +=score; } else     sum = sum /10;  ===关键你的逻辑不好，，并不是每次都需要计算平均值，第二参数

引用 楼主 weixin_45617396的回复:1、10个人的成绩存放在score数组中，编写函数fun，求出平均分，并作为函数值返回，且输出不及格人数。 #include <stdio.h> void main() { 	float fun(int arry[10]); 	float aver; 	int i,score[10]; 	int count=0; 	printf("请输入十位学生的成绩:\n"); 	for(i=0;i<10;i++) 	{ 	   scanf("%d",&score[i]);		 	   if(score[i]<60) 	      count=count+1;     }     aver=fun(score); 	printf("十位学生的平均成绩为:\n",aver);     printf("不及格人数为：\n",count);	        }  float fun(int arry[10]) { 	float s=0.0,k; 	int j; 	for(j=0;j<10;j++) 		s=s+arry[j]; 	k=s/10;     return k; } 哪里错了?我的老是输出不了 运行结果发出来呗。。。


Question: C语言初学者的困难

哦！我明白了，谢谢大佬，第一次发帖就遇您，真是我毕生荣幸啊！

在c/c++语言里面，从运算符的角度， *  和 & 是一对儿        * 取值运算符， 后面跟一个指针表达式， 先进行指针表达式的计算，然后取值。       & 取地址云算法，后面跟一个表达式，先进行表达式运算，然后取地址。  记住他们的名字取值运算符和取地址运算符，就好理解了。

说反了呀。 p是指针， 它本身就是指针。  地址也是指针。 所以，用地址的不加， 要用值的加*  这么说吧。  * 这个操作符叫做 “取值操作符”  记住这个就好理解了。 加*就是取值， 不加*就是地址本身，p始终是地址/指针 。

引用 5 楼 寻开心的回复:你这两个例子都是对应数组的情况， p++ / p-- / p += n 等等，这些都是指针操作  前面说过， 用*还是不用*，要看函数需要的参数是什么类型 scanf需要的是一个地址，地址就是指针， 所以， p++的结果直接就可以用了 而printf需要的是一个数值， 所以是 *p++， 它实际上是要这样理解  *（p++） 也就是说涉及到地址的时候，就应该＋*，涉及到输出数值的时候就不加对吧？

引用 2 楼 寻开心的回复:所有要用到数值的时候，用*p，而不是p， 比如输出数据的时候， printf（"%d", *p）; 但是输入却是scanf("%d",p++)，这里一对比我就混乱了

引用 1 楼 寻开心的回复:int * p; //定义的时候加， 这个时候。int* 是一起的，p是单独的。 说p是整形指针  所有需要指针的时候， 用p而不是*p， 比如读入数据的scanf函数 ，  scanf（“%d”， p）  所有要用到数值的时候，用*p，而不是p， 比如输出数据的时候， printf（"%d", p）;  简单记忆就是，需要指针的时候用p， 需要数值的时候用*p 但是指向数组的指针，用指针表示数组的时候: printf("%d",*p++)这里怎么又要加*呢


Question: vs怎么下载？

其他的等vs安装完成以后，可以在软件第一次安装时，可以安装额外的插件，根据自己的选择去安装自己所需要的插件。官网其他的基本可以不用管。鄙人拙见，希望可以帮到楼主

你重新再去官网下载下，然后在浏览器上的下载的文件打开，别去盘里面找试试， 我刚才重现下载了下，并没有出现你所述的问题，可能是你打开错了文件， 应该没必要装net，我这就没装，就可以直接下载vs2017，还能运行好好的。 “https://visualstudio.microsoft.com/zh-hans/downloads/“”你试试拿这个网址下载

微软官网搜，傻瓜式安装

引用 1 楼 與蘤舊縐的回复:先安装.Net Framework 4.6以上，官网搜 我怎么感觉你这vs下的怪怪的，官网下的后面有这么长一串吗 怎么安装.Net Framework


Question: 求程序编辑

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


Question: 一道问题求助

顶一下顶一下顶一下顶

1 输入n 2 char * * pStr = (char **) malloc( sizeof(char*) * n );  // 用来保存n个字符串的数组 3 char buffer[1001];    for ( I=0; I<n;i++) {       gets(buffer);       char * pT = (char* ) malloc( strlen(buffer) + 1 ); // 要比strl多一个，好放后面的0       strcpy(pT, buffer, strlen(buffer));       pStr[I] = pT; } 4 在执行你的冒泡之前自己输出一遍数据，看看是否正确的记录了字符串数组，测试排序正确之前，先确保数据是正确的    printf("%s\n", pStr[I])  5 bubble（pStart， n）；


Question: c语言时间复杂度

O(m^2*n) 50*50*1000，最多几十毫秒（06年左右的标准）。但要看你循环体里做了什么事

可以，甚至0点000几秒都可以。


Question: 编程思路

引用 11 楼 千梦一生 的回复:[quote=引用 9 楼 weixin_45718499 的回复:] [quote=引用 1 楼 user-7 的回复:] 看不出来有什么问题，个位数是6能被3整除，说明剩下的4位数也能被3整除，所以if(a%3==0)++b;就可以了 我的答案是b=3000，我做编程题，做完后，就是不知道我的答案对不对，有些郁闷，简单一些还好说。  [/quote] 因为我没有运行，有部分地方还写错了。你得改一改：比如 SumT = Sum+(((a/10)/10)/10)%10; ==>SumT = SumT+(((a/10)/10)/10)%10; printf()那儿时伪代码[/quote]  看了下别人的评论，发现还有更简洁的写法：  int a = 0; int number = 0; while(a<10000) { if(a%3 == 0) number+=1; a++; } printf(number);

引用 9 楼 weixin_45718499 的回复:[quote=引用 1 楼 user-7 的回复:] 看不出来有什么问题，个位数是6能被3整除，说明剩下的4位数也能被3整除，所以if(a%3==0)++b;就可以了 我的答案是b=3000，我做编程题，做完后，就是不知道我的答案对不对，有些郁闷，简单一些还好说。  [/quote] 因为我没有运行，有部分地方还写错了。你得改一改：比如 SumT = Sum+(((a/10)/10)/10)%10; ==>SumT = SumT+(((a/10)/10)/10)%10; printf()那儿时伪代码

用（10000-1000）/3 是整除， 没有余数， 直接就可以确定3的倍数的数量了 如果有余数的还要判断余出来的部分是否还有3的倍数存在  如果用9999，因为它也是四位数，你还要 9999 - 1000 + 1 来计算所有的四位数有多少个

int total =0; 	int min_value =1000; 	int max_value =9999; 	for ( int i = min_value;i<min_value+3;i++) 	{ 		if (i%3==0) 		{ 			min_value =i; 			break; 		} 	} 	if (max_value%3 ==0) 		total = (max_value-min_value)/3+1; 	else 		total = (max_value-min_value)/3;  printf("total=%d \n",total);

这题哪有什么难度，先找到符合条件前4位最小数，1002，然后找到最大数9999 ，最后结果=（9999-1002）/3+1=3000

引用 5 楼 天人合一状态中的回复:[quote=引用 4 楼 ²⁰¹⁹₀₉.₀₁清梦的回复:][quote=引用 3 楼 天人合一状态中的回复:]我这写的有问题，手机端好像删除不了，我问下那个getchar函数是什么，你是在oj平台提交代码吗 读取一个字符，但是并没有赋值给任何东西。 一般用于oj，吃掉换行符操作[/quote] 我在oj刷题的时候没有碰到这样的情况，所以我怀疑是这个阻塞函数导致TLE。。[/quote] 对，我发现这里的同学都喜欢在后面加putchar 或者getchar

你这是四位数的吧 #include<stdio.h> int main() {       int i;       for(i=10000;i<100000;i++)       {            if(i%10==6&&i/3==0)            {printf("%d\t",i);}       } return 0; }

引用 1 楼 user-7 的回复:看不出来有什么问题，个位数是6能被3整除，说明剩下的4位数也能被3整除，所以if(a%3==0)++b;就可以了 我的答案是b=3000，我做编程题，做完后，就是不知道我的答案对不对，有些郁闷，简单一些还好说。

引用 7 楼 千梦一生 的回复:不得不说有一定的难度。  int a = 0; int SumT = 0; int number = 0; while(a<10000) { SumT = Sum+a%10; SumT = Sum+(a/10)%10; SumT = Sum+((a/10)/10)%10; SumT = Sum+(((a/10)/10)/10)%10; if(SumT%3 == 0) number+=1; SumT = 0; } printf(number);  这个代码我运行出来没有结果，是不是因为编译软件不同的问题。

引用 4 楼 ²⁰¹⁹₀₉.₀₁清梦的回复:[quote=引用 3 楼 天人合一状态中的回复:]我这写的有问题，手机端好像删除不了，我问下那个getchar函数是什么，你是在oj平台提交代码吗 读取一个字符，但是并没有赋值给任何东西。 一般用于oj，吃掉换行符操作[/quote] 我在oj刷题的时候没有碰到这样的情况，所以我怀疑是这个阻塞函数导致TLE。。

引用 3 楼 天人合一状态中的回复:我这写的有问题，手机端好像删除不了，我问下那个getchar函数是什么，你是在oj平台提交代码吗 读取一个字符，但是并没有赋值给任何东西。 一般用于oj，吃掉换行符操作

emmmm 五位数的范围是[10000,99999]，既然个位数确定了，那满足条件的整数只有（1000-9999）6，所以枚举tmp=1000-9999，int cur=tmp*10+6，if（cur%3） ++b


Question: c语言菜鸟

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

听君一席话，胜读十年书，老师都不说的。最近在期末复习中，没有及时回应。

即然知道 无符号数和有符号混合运算是转换成 无符号数进行的，那么 3-6的结果依然是无符号的 -3在无符号的情况下是 0xfffffffd， 即然是无符号的大于0在这里就成立 你用%x格式printf一下运算的结果就看到了啊

谢谢，谢谢。我看网课老师有讲到补码，不过有点懵

额，有点想开了，不管怎么样实际上都是补码的运算，至于怎么看待要看你的代码，例如你用%u和%d分别打印就会看到不一样的效果，这是你对数据运算后补码的形式看待，像你这种3-6，默认是看出无符号数，但是也不是3，而是将其补码看成其原码，所以才>0


Question: 为什么数组这样用会出现变量损坏的提示？

涉及到了一些字符串的函数，必须考虑到'\0'结束符，包括输入输出、字符串函数等

所有数组越界都会造成对其他的变量修改的问题， 引发各种不确定的后果  字符串是自动在尾巴补一个0，有一定的特殊性

这种问题出现是只针对字符串数组吗？

三个字符的字符串，长度是3，但是占用4字节的内存空间，你数组长度定的太小


Question: 莫名其妙的的问题3

while(scanf("%s",&numble.a1) != EOF)  {  	while(scanf("%s",&numble.a2) != EOF) a1和a2是指针，但是你们申请空间，建议你这样搞 struct dh { char a1[100];  char a2[100]; }numble;

a1和a2都没有初始化


Question: C语言的学生运动会管理

分层实现很简单，C语言写的话也不用定什么接口 经典的mvc模式，你可以百度一下，这个项目比较简单，不需要把每一层都写出了，比如把业务层和数据层并为一层也是可以的


Question: 小白求支援！

.net板块里面有C#

引用 1 楼 不闻窗外事的回复:C#发错位置了，这里是c/C++，不会C# 哦哦，不好意思，但是我没看见有C#的分区啊

C#发错位置了，这里是c/C++，不会C#


Question: 程序编译没问题就是不能够成功运行

printf("%s ",s[i]); 改成 %c


Question: c语言。大佬们，救救孩子吧，我快被这道题目逼疯了QAQ

引用 4 楼 不闻窗外事的回复:拼接分为表头拼接和表尾拼接，我一般比较喜欢表头拼接，按照我给你发的这个，基本上就可以实现表头拼接，拼出一个链表 好的，我试试。谢谢您!!真的非常感谢!(  • ᵕ • )◞♡

引用 2 楼 一条咸鱼八百里 的回复:[quote=引用 1 楼 不闻窗外事的回复:]	for (i = 0; i<n - 1; i++) 	{ 		p1a = (struct x *)malloc(L); 		scanf("%d%d", &p1a->xue, &p1a->fen); 		p2a->next = p1a; 		p2a = p1a; 	}  这个地方不对，   		p1a->next = p2a->next; p2a->next = p1a; 这样拼接，你的拼接都有问题，好好看看；还有， 	if (n>1) 		p1a = (struct x *)malloc(L), scanf("%d%d", &p1a->xue, &p1a->fen), p2a = p1a, heada = p1a;  这是你哪个老师教你的这样写程序，每个语句都分开，不要使用，号放在一条语句里 好的！不好意思，再打扰您一下下:请问链表到底应该怎么拼接呀？我看了好久书了，但是还是拼出上述这样的辣鸡东西……[/quote] 不是告诉你了，这样拼接 	p1a->next = p2a->next; p2a->next = p1a;

引用 1 楼 不闻窗外事的回复:	for (i = 0; i<n - 1; i++) 	{ 		p1a = (struct x *)malloc(L); 		scanf("%d%d", &p1a->xue, &p1a->fen); 		p2a->next = p1a; 		p2a = p1a; 	}  这个地方不对，   		p1a->next = p2a->next; p2a->next = p1a; 这样拼接，你的拼接都有问题，好好看看；还有， 	if (n>1) 		p1a = (struct x *)malloc(L), scanf("%d%d", &p1a->xue, &p1a->fen), p2a = p1a, heada = p1a;  这是你哪个老师教你的这样写程序，每个语句都分开，不要使用，号放在一条语句里 好的！不好意思，再打扰您一下下:请问链表到底应该怎么拼接呀？我看了好久书了，但是还是拼出上述这样的辣鸡东西……


Question: 麻烦大佬们帮忙做做这个题，实在不会，谢谢了

引用 1 楼 user-2 的回复：你用递归肯定是把所有数都给考虑一遍了，你这样想， 你如果要找一个8位这样的数，说明它前7位肯定是质数 如果找7位的，前6位一定是质数。 以此类推 每一个N位质数都是由前一个N-1位质数，再加上一个数构成 这样的话，你就可以考虑剪枝选择一个能构成质数的树，而不是每次都从0-9中挑一个数 比如1位的，2 3 5 7  那么2位的一定是以1位的为基础，23 29 31 37 51 53 57 59 71 73 79 同理3位的也是 改一下代码可以了；能给我提供一个比较具体的思路么，我现在只能想得到要循环做，但还是很蒙


Question: 有大佬看看这个题我哪里有问题么，没有输出，麻烦指导一下

你定义的name变量是char字符类型，不是字符串类型， 你如果需要字符串的话，可以定义name为char name[20];


Question: c primer plus 10.13.1，有这本书的帮我求解一下


Question: 大神们帮帮我，急～

引用 3 楼 不闻窗外事 的回复：char str[10]; fp  = fopen(); fread(str, sizeof(str), 1, fp);  for (int i = 0; i < 10; i++) {     printf("%c", str[9-i]); }这道题就直接这样做是嘛

引用 1 楼 user-3 的回复： freopen("file.txt","r",stdin);我想要具体过程～

freopen("file.txt","r",stdin);


Question: 大神们，这个咋回事啊-学生成绩管理系统

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

引用 3 楼 weixin_46047053 的回复:[quote=引用 2 楼 weixin_46047053的回复:][quote=引用 1 楼 不闻窗外事的回复:]你这个stu定义了吗，是个啥玩意？  结构体吗？ 是结构体，我定义了，这个呢[/quote] 你可以给我改改，我的成绩管理系统吗[/quote] 你如果没有使用typedef，就需要加上struct，在C++不需要加

C语言定义结构体变量需要加上struct，比如struct stu s[]

引用 2 楼 weixin_46047053的回复:[quote=引用 1 楼 不闻窗外事的回复:]你这个stu定义了吗，是个啥玩意？  结构体吗？ 是结构体，我定义了，这个呢[/quote] 你可以给我改改，我的成绩管理系统吗

引用 1 楼 不闻窗外事的回复:你这个stu定义了吗，是个啥玩意？  结构体吗？ 是结构体，我定义了，这个呢

你这个stu定义了吗，是个啥玩意？  结构体吗？


Question: 编写一个函数

构建两个指针，一个用来从头到尾遍历, char*p 一个用来记录当前保留的字符位置 char *q str[]当中放你的字符串 初始化  p  q 为str的首地址; 假定 char ch 是你要删除的字符 while(*p != '\0' ) {     if (*p ！= ch )           *q++ = *p++；     else p++; } *q = '\0';  // 放上结尾字符  其他的自己写

#include<stdio.h> #include<string.h> void fun(char *s) { 	char s1[100]; 	int i=0; 	int j=0; 	for(;s[i]!='\0';i++) 	{ 		if(s[i]!='0') 		{ 			s1[j]=s[i]; 			j++; 		} 	} 	s1[j]='\0'; 	strcpy(s,s1); } int main() { 	int i,j,x,k,a[11]; 	j=0; 	char s[100]; 	scanf("%s",s); 	fun(s); 	printf("%s\n",s); 	/*scanf("%d",&x); 	if(x==0) 	return 0; 	while(x) 	{ 		i=x%10; 		if(i!=0) 		{ 			a[j++]=i; 		} 		x=x/10; 	} 	x=0; 	for(i=j-1;i>=0;i--) 	{ 		x=x*10+a[i]; 	} 	printf("%d\n",x);*/ 	return 0; }    分析：注释的部分是用数值实现的


Question: 登入系统

引用 7 楼 不闻窗外事的回复:[quote=引用 6 楼 coolcooldefish 的回复:] [quote=引用 4 楼 不闻窗外事的回复:][quote=引用 3 楼 coolcooldefish 的回复:] [quote=引用 2 楼 不闻窗外事的回复:] if((fp=fopen("zh.txt","r"))==NULL)  {printf("文件打开失败！");  exit(0);  }  if ((fp=fopen("mm.txt","r"))==NULL)  两个都是fp 哈哈哈  尴尬了  不过账号密码读取还有些问题能帮忙看看吗，比如我账号我设为123但是存到文件里就变成123+一堆乱码到时候读出来我账号怎么输都不对  这应该怎么办[/quote] 那是因为你的数组没有清零，你可以这样定义数组  char a[20] = {0}; 然后就好了 但是不影响功能[/quote] 弱弱的问一句，是把所有数组都规定成这个形式吗[/quote] 你写入文件的那两个数组至少应该定义成这样的，要不然后面就是乱码，其他的根据需求，其实最好都这样定义，比较安全[/quote] 学到了   谢谢大佬

引用 7 楼 不闻窗外事的回复:[quote=引用 6 楼 coolcooldefish 的回复:] [quote=引用 4 楼 不闻窗外事的回复:][quote=引用 3 楼 coolcooldefish 的回复:] [quote=引用 2 楼 不闻窗外事的回复:] if((fp=fopen("zh.txt","r"))==NULL)  {printf("文件打开失败！");  exit(0);  }  if ((fp=fopen("mm.txt","r"))==NULL)  两个都是fp 哈哈哈  尴尬了  不过账号密码读取还有些问题能帮忙看看吗，比如我账号我设为123但是存到文件里就变成123+一堆乱码到时候读出来我账号怎么输都不对  这应该怎么办[/quote] 那是因为你的数组没有清零，你可以这样定义数组  char a[20] = {0}; 然后就好了 但是不影响功能[/quote] 弱弱的问一句，是把所有数组都规定成这个形式吗[/quote] 你写入文件的那两个数组至少应该定义成这样的，要不然后面就是乱码，其他的根据需求，其实最好都这样定义，比较安全[/quote] 那我到时候账号输入不用后面的0吗

引用 6 楼 coolcooldefish 的回复:[quote=引用 4 楼 不闻窗外事的回复:][quote=引用 3 楼 coolcooldefish 的回复:] [quote=引用 2 楼 不闻窗外事的回复:] if((fp=fopen("zh.txt","r"))==NULL)  {printf("文件打开失败！");  exit(0);  }  if ((fp=fopen("mm.txt","r"))==NULL)  两个都是fp 哈哈哈  尴尬了  不过账号密码读取还有些问题能帮忙看看吗，比如我账号我设为123但是存到文件里就变成123+一堆乱码到时候读出来我账号怎么输都不对  这应该怎么办[/quote] 那是因为你的数组没有清零，你可以这样定义数组  char a[20] = {0}; 然后就好了 但是不影响功能[/quote] 弱弱的问一句，是把所有数组都规定成这个形式吗[/quote] 你写入文件的那两个数组至少应该定义成这样的，要不然后面就是乱码，其他的根据需求，其实最好都这样定义，比较安全

引用 4 楼 不闻窗外事的回复:[quote=引用 3 楼 coolcooldefish 的回复:] [quote=引用 2 楼 不闻窗外事的回复:] if((fp=fopen("zh.txt","r"))==NULL)  {printf("文件打开失败！");  exit(0);  }  if ((fp=fopen("mm.txt","r"))==NULL)  两个都是fp 哈哈哈  尴尬了  不过账号密码读取还有些问题能帮忙看看吗，比如我账号我设为123但是存到文件里就变成123+一堆乱码到时候读出来我账号怎么输都不对  这应该怎么办[/quote] 那是因为你的数组没有清零，你可以这样定义数组  char a[20] = {0}; 然后就好了 但是不影响功能[/quote] 弱弱的问一句，是把所有数组都规定成这个形式吗

引用 4 楼 不闻窗外事的回复:[quote=引用 3 楼 coolcooldefish 的回复:] [quote=引用 2 楼 不闻窗外事的回复:] if((fp=fopen("zh.txt","r"))==NULL)  {printf("文件打开失败！");  exit(0);  }  if ((fp=fopen("mm.txt","r"))==NULL)  两个都是fp 哈哈哈  尴尬了  不过账号密码读取还有些问题能帮忙看看吗，比如我账号我设为123但是存到文件里就变成123+一堆乱码到时候读出来我账号怎么输都不对  这应该怎么办[/quote] 那是因为你的数组没有清零，你可以这样定义数组  char a[20] = {0}; 然后就好了 但是不影响功能[/quote] 好的我试试谢谢｡◕‿◕｡

引用 3 楼 coolcooldefish 的回复:[quote=引用 2 楼 不闻窗外事的回复:] if((fp=fopen("zh.txt","r"))==NULL)  {printf("文件打开失败！");  exit(0);  }  if ((fp=fopen("mm.txt","r"))==NULL)  两个都是fp 哈哈哈  尴尬了  不过账号密码读取还有些问题能帮忙看看吗，比如我账号我设为123但是存到文件里就变成123+一堆乱码到时候读出来我账号怎么输都不对  这应该怎么办[/quote] 那是因为你的数组没有清零，你可以这样定义数组  char a[20] = {0}; 然后就好了 但是不影响功能

引用 2 楼 不闻窗外事的回复:if((fp=fopen("zh.txt","r"))==NULL)  {printf("文件打开失败！");  exit(0);  }  if ((fp=fopen("mm.txt","r"))==NULL)  两个都是fp 哈哈哈  尴尬了  不过账号密码读取还有些问题能帮忙看看吗，比如我账号我设为123但是存到文件里就变成123+一堆乱码到时候读出来我账号怎么输都不对  这应该怎么办

存储时最好使用fseek便宜到最后，不然会覆盖之前的


Question: 为何函数运行最后结果总是0？

值太大了，越界了，不要使用int类型，应该使用大数相乘之类的方法实现

int一般占4个byte，作为有符号数最大也就是2^31-1，你的这个超过了计算的最大范围，建议使用double试试


Question: 看下我这个程序哪里有问题。要把几个单词按照a-z排序。

引用 10 楼 the_ray_of_AI 的回复:[quote=引用 5 楼 不闻窗外事 的回复:] [quote=引用 4 楼 the_ray_of_AI 的回复:] [quote=引用 1 楼 不闻窗外事的回复:]你怎么又问这个问题，上次不是给你发了代码了，不对吗 好像还是不对。。。。。[/quote] 那个代码我测试过了，好像没啥问题，把错误信息贴出来看看[/quote] 好吧，我错了，我上次没复制，自己照着写的，漏了很多。谢谢了[/quote] 但我发现一个漏洞，就是加入我输入abcdef在前，zbcde在后，它比较到e就不比较了，这时候顺序就不对了

引用 5 楼 不闻窗外事 的回复:[quote=引用 4 楼 the_ray_of_AI 的回复:] [quote=引用 1 楼 不闻窗外事的回复:]你怎么又问这个问题，上次不是给你发了代码了，不对吗 好像还是不对。。。。。[/quote] 那个代码我测试过了，好像没啥问题，把错误信息贴出来看看[/quote] 好吧，我错了，我上次没复制，自己照着写的，漏了很多。谢谢了

引用 7 楼 the_ray_of_AI 的回复:就是它本来应该把这几个词根据a-z排列然后输出他们的单词以及注释，可根据我目前这个运行结果，它好像并没有排序一样，并且只能输出第一个单词和它的注释。 你再回到你上一次发的那个问题，我发程序都发给你了，你试一下不就完了，这样吧，我再给你发一次 #include<stdio.h>  struct entry { 	char word[15]; 	char defination[200]; }; const int N = 4; void dictionarySort(struct entry Sort[]);  int main(void) {  	int i = 0, j = 0; 	struct entry dictionary[N]; 	printf("please input the words do you want to entry.\n"); 	for (i = 0; i<N; i++) 	{ 		char c = getchar(); 		while (c != '\n') 		{ 			//dictionary[i].word[j]=getchar(); 			dictionary[i].word[j] = c; 			c = getchar(); 			j++; 		} 		dictionary[i].word[j] = '\0'; 		j = 0; 	} 	printf("Please input their defination.\n"); 	for (i = 0; i<N; i++) 	{ 		char c = getchar(); 		while (c != '\n') 		{ 			dictionary[i].defination[j] = c; 			c = getchar(); 			j++; 		} 		dictionary[i].defination[j] = '\0';    //add '\0' 		j = 0; 	} //	for (i = 0; i<N; i++) //		printf("%s %s\n", dictionary[i].word, dictionary[i].defination); 	dictionarySort(dictionary);  	return 0; }  void dictionarySort(struct entry Sort[]) { 	int i, j, k; 	struct entry temp[N]; 	i = 0; 	j = 0; 	while (Sort[i].word[j] != '\0' && Sort[i + 1].word[j] != '\0' && i+1 < N) 	{ 		if (Sort[i].word[j]>Sort[i + 1].word[j]) 		{ 			temp[i] = Sort[i + 1]; 			Sort[i + 1] = Sort[i]; 			Sort[i] = temp[i]; 			i++; 			j = 0; 		} 		else if (Sort[i].word[j]<Sort[i + 1].word[j]) 		{ 			i++; 			j = 0; 		} 		else if (Sort[i].word[j] == Sort[i + 1].word[j]) 			j++; 	} 	for (i = 0; i<N; i++) 		printf("%s %s\n", Sort[i].word, Sort[i].defination);  }

引用 3 楼 从会超 的回复:直接给出程序要求 我给重新写一个把 编写一个名为dictionarySort()的函数，将字典(类似于教科书9.9中定义的结构数组)按字母顺序排序。编写一个程序，从键盘上读取N个单词和它们的定义，将它们存储到字典中，按字母顺序对它们进行排序，并使用它们的定义显示排序后的单词列表。一个词的定义是一个短语可以由几个词，几行，但不超过200个字符。

引用 4 楼 the_ray_of_AI 的回复:[quote=引用 1 楼 不闻窗外事的回复:]你怎么又问这个问题，上次不是给你发了代码了，不对吗 好像还是不对。。。。。[/quote] 那个代码我测试过了，好像没啥问题，把错误信息贴出来看看

引用 1 楼 不闻窗外事的回复:你怎么又问这个问题，上次不是给你发了代码了，不对吗 好像还是不对。。。。。

直接给出程序要求 我给重新写一个把

程序写的有点乱。。。。

你怎么又问这个问题，上次不是给你发了代码了，不对吗


Question: 求解c语言程序设计题目

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


Question: i++和++i的区别是什么

for (i = 1; i < 5; i++) 对于for循环里，i++, ++i没啥区别～

for (i = 1; i < 5; i++)中i++和++i都是相当于for循环的最后一条语句执行的，等价于i++；或者++i；语句结束 但是a = i++中i为后置++，所以会先赋值再++ a=++i，为前置++，优先运行++i，再把i赋值给a，然后语句结束

i++是先赋值后自加，++i是先自加再赋值


Question: 求大佬帮助

引用 1 楼 user-2 的回复:跟编译器有关 不同编译器结果不一样 有的编译器会先执行三个++i，再相加，所以就会18 这种问题没多大意义。  恩，意义不大，这种题基本都是老师考学生的


Question: 用指针编写程序

引用 2 楼 @矛盾综合体 的回复: #include<stdio.h> void fun(int *a,int *b,int x) { 	int i=0; 	for(;i<x;i++) 	{ 		b[i]=a[i]; 		b[2*x-1-i]=a[i]; 	} } void prr(int *b,int x) { 	int i=0; 	for(;i<x;i++) 	{ 		printf("%d ",b[i]); 	} 	printf("\n"); } void main() {    int s[6]={1,2,3,4,5,6};    int s1[12];    fun(s,s1,6);    prr(s1,12); }    结果图 运行环境：gcc     编辑环境：sources insight   结果分析：额，好像也没什么好说的，如果想拓展成任意数组的话，简单的改法，可以先建一个大的数组，然后再通过输入特殊数字结尾标志，记录数组长度去实现 如果还有什么疑问或者其他，可以私信  任意数组的话，可以用malloc函数实现吧

int a[4] = { 1, 2, 3, 4 }; 	int b[8];  	int *pa = a; 	int *pb = b; 	for (int i = 0; i < 4; i++) 	{ 		*(pb + i) = *(pa + i); 		*(pb + 7 - i) = *(pa + i); 	}


Question: c语言编程

引用 1 楼 user-3的回复:#include<stdio.h> #include<string.h> void main() {     char a[100],b[100];     int j=0,n,len,flag,s=0;     printf("请输入一个字符串：\n");     scanf("%s",a);     printf("删除前的字符串：\n");     printf("%s\n",a);     n=strlen(a); // 获取输入字符串的长度     b[0] = a[0]; // 将 a 字符串的第一个值给 b 字符串     len = 1; // 初始化 b 字符串的长度     for(int i=1;i<n;i++)      {         flag = 0; // 添加标识（为0则表示值不同，为1则表示值相同）         for(int j=0;j<len;j++)          {             if(a[i] == b[j]) // 当前 a 字符串中与 b 字符串中相同时跳出循环并且 flag 设置为 1             {                 flag = 1;                 s++; // 计算出相同的值的数量                 break;             }         }         if (!flag) // 当前 a[i] 字符串中与 b 字符串无相等时，将其加入到 b 字符串中         {             b[len++] = a[i];         }     }     b[len]='\0'; // 给 b 字符串添加结束符     printf("\n删除后的字符串：");     printf("%s\n",b);     printf("被删除的个数有%d\n",s); } 第八行scanf("%s",a) 我感觉少个&

字符串的表示中，字符数组a与&a[0]是等价的，所以此处不能加&符号。


Question: C语言

我回答过相关类似的问题，你可以看一下，基本上差不多，那个人的帖子也有任务要求 百度一下：c语言-基于链式存储的学生成绩管理系统的设计 急！！！——CSDN问答频道 https://ask.csdn.net/questions/998348 点击第一个，就可以看到我之前写的代码，可以根据自己的需求进行删改（如果有疑问也可以私信我）

不难的问题，自己先尝试写写吧～


Question: 求大佬帮我把这个成功运行好不好，就两个我不知所云的错误

要么找老师理论，要么自己去找合适的版本呀

但是我们老师提供的就是这四个，那我该怎么办呢，在哪里下载呢？

GLAUX是64的，然后其他三个都是32的

怎么能不清楚呢？自己要编译32位还是64位都不知道吗？拿到的lib看一下是32位还是64位

32位和64位是不能混着用的

32位或是64位是匹配的吗？

而且如果是没有配置那个文件的话，应该还会出现其他未定义的吧

额这个我不太清楚，是我们老师提供的官方文件。

但是我配置了这个文件

SwapBuffers是opengl库里面的API函数，需要链接它的lib；TextOut需要链接gdi32.lib文件

最好把错误提示信息发出来看看


Question: 公交管理系统

引用 1 楼 不闻窗外事 的回复：这不就是一个链表的增删改查吗，很简单，不行就百度下看看有没有没有找到呀

这不就是一个链表的增删改查吗，很简单，不行就百度下看看有没有


Question: win32，当弹出所有者窗口后，点击拥有者窗口会闪烁所有者窗口，怎么做到的？

FlashWindow


Question: 再次求救

int sum(int n, int m) { 	static int total = 0; 	if (n == m)return total+n; 	else return total=n+sum(n + 1, m);  }

感觉不要total就好了

引用 3 楼 weixin_45875618 的回复:[quote=引用 2 楼 @矛盾综合体的回复:]这种求某个阶段之和没必要用递归，感觉有点小题大做，用个基本循环累加就可以，当然用递归也是可以的，按照你的思路用个这样  int sum(int n,int m) { 	int i=n; 	if(i==m) 	{ 		return m; 	} 	else 	{ 		return n+sum(n+1,m); 	} }  我还是想问问为什么我的那个程序会输出随机数鸭#include<stdio.h>  int sum(int n,int m){    int i;i=n;   int total=0;     if(i==m) return total+m;     else total=i+sum(n+1,m);  }  int main(){   int m,n;     scanf("%d %d",&n,&m);    printf("The sum from %d to %d is %d.\n",n,m,sum(n,m));  }[/quote] 很简单，你的sum函数内的返回值设置错误（当然如果刚开始就i=m可能没什么），当i！=m的时候，sum哪里来的，怎么返回，但是其本身所占的空间的值进行打印，每次运行程序所占空间的地址不一定一样，所有就出现这种现象

引用 2 楼 @矛盾综合体的回复:这种求某个阶段之和没必要用递归，感觉有点小题大做，用个基本循环累加就可以，当然用递归也是可以的，按照你的思路用个这样  int sum(int n,int m) { 	int i=n; 	if(i==m) 	{ 		return m; 	} 	else 	{ 		return n+sum(n+1,m); 	} }  我还是想问问为什么我的那个程序会输出随机数鸭#include<stdio.h>  int sum(int n,int m){    int i;i=n;   int total=0;     if(i==m) return total+m;     else total=i+sum(n+1,m);  }  int main(){   int m,n;     scanf("%d %d",&n,&m);    printf("The sum from %d to %d is %d.\n",n,m,sum(n,m));  }


Question: 命令行可选参数到底是啥？

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

引用 1 楼 喜欢做我自己 的回复:int main(int argc,char *argv[])    argc是命令行总的参数个数 argv[]是argc个参数，其中第0个参数是程序的全名，以后的参数命令行后面跟的用户输入的参数， ------------------------ char *argv[]是一个字符数组,其大小是int argc,      主要用于命令行参数argv[]参数，数组里每个元素代表一个参数;  也可以按这样的格式写： int main(int argc, char **argv)


Question: 再次求救

1、函数中如果进入else分支没有返回值 2、total是局部变量，在你这里好像没什么作用 3、int i变量有点多余    int sum(int n,int m)  {      if(n == m)     {         return m;     }    else     {        return n + sum(n+1,m);     } }

啊啊啊，不好意思这个贴忘了，现在发  #include<stdio.h>  int sum(int n,int m){    int i;i=n;   int total=0;     if(i==m) return total+m;     else total=i+sum(n+1,m);  }  int main(){   int m,n;     scanf("%d %d",&n,&m);    printf("The sum from %d to %d is %d.\n",n,m,sum(n,m));  }

还是说明白“这个程序”是那个程序吧，贴代码～

程序呢？


Question: PTA中数组循环右移的问题

引用 9 楼 SuperDay的回复:楼主学编程很积极，这一点值得肯定！但还是不够用心，所以进展有点慢 我也觉得，大佬真是火眼金睛！俺会变的

楼主学编程很积极，这一点值得肯定！但还是不够用心，所以进展有点慢

引用 5 楼 真相重于对错的回复:右移几位就是加几求余 谢谢大哥，俺知道了，可惜俺老早就结贴了，没得分给你了

引用 3 楼 遇见女神的回复:不需要想那么复杂，跟swap一个道理的，左右都可以循环移动。 谢谢大哥哦，一生平安

谢谢大哥，俺知道了，可惜俺老早就结贴了，没得分给你了

引用 1 楼 SuperDay 的回复:又见楼主，第一种方法，m+n必然越界，并且不用交换变量，会覆盖原来的值 第二种逻辑太乱了OMG，大佬我真的是佩服的五体投地，果然是我太嫩了，阿里嘎多，好人一生平安

右移几位就是加几求余

右移几位就是加几求余

不需要想那么复杂，跟swap一个道理的，左右都可以循环移动。


Question: C语言不会啊啊啊啊啊啊帮帮我吧

定义一个数组去存储键入的数据 定义一个数组去存储重复出现两次的数据 判断里面有没有相同的数据仅出现两次，如果有，将其添加到另外定义的数组中 数组里面的元素进行排序 一次输出数组里面的元素

问题解决了记得把帖子结下

#include<stdio.h> void paixu(int *a,int x) { 	int i,j,k; 	for(j=0;j<10;j++) 	{ 		for(i=0;i<x-j;i++) 		{ 			if(a[i]>a[i+1]) 			{ 				k=a[i]; 				a[i]=a[i+1]; 				a[i+1]=k; 			} 		}	 	}	 } void main() {    int i,j,k,x,a[10],b[10];    k=1;       i=x=0;    while(i!=10)    {    		scanf("%d",&a[i]); 		if(a[i]>99999||a[i]<-99999) 		continue; 		b[i]=100000; 		i++;    }      for(i=0;i<10;i++)    {    		for(j=i+1;j<10;j++)    		{    			if(a[i]==a[j]&&a[i]!=100000)    			{    				k++; 				a[j]=100000;    			}    		} 		if(2==k) 		{ 			b[x]=a[i]; 			x++; 		} 		k=1;    }    if(b[0]<100000)    { 	   paixu(b,x); 	   for(i=0;i<x;i++) 	   { 	   		printf("%6d\n",b[i]); 	   }    }    else    {    		printf("None\n");    } }    结果图 运行环境：gcc       编辑环境：sources insight    如有疑问或者其他，可以私信


Question: 怎么用指针编写程序

int a[10]={3,8,6,5,4,4,2,9,9,7};    int *p = a;    int total = 0;    for(int i = 1; i < 10; i = i+2)    {        if(0 == *(p+i) % 2)        {            total += *(p+i);        }    }

定义个 int * 指针，在间隔为2的for循环内通过指针 去遍历这个数组，值是偶数就加。


Question: 代码没错，结果却这样

请及时结贴吧。

scanf()里面尽量不要加无关字符。 你输入的得跟它里面保持一致 你这样写输入就得这么来 c1=w,c2=o

#include <stdio.h>  void main(){ 	 	char c1, c2; 	scanf("%c%c", &c1,&c2);  	printf("%c, %c\n", c1, c2); 	printf("%d, %d\n", c1, c2); }


Question: for循环并列要怎么看？

引用 1 楼 一条不会飞的鱼的回复:for只有第二个值 （b<=5）才是跳出条件 你说的哪张图？我知道会跳出来

for只有第二个值 （b<=5）才是跳出条件


Question: 求大神帮助

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

就是用c语言来口述这个程序

引用 1 楼 @矛盾综合体的回复:刚刚回答完另一个人的帖子，等我找一下代码（你们不会是一个学校的吧）  #include<stdio.h> int palindromic(int x) { 	int i=0; 	while(x) 	{ 		i=i*10+x%10; 		x=x/10; 	} 	return i; } int judge(int x) { 	if(x==palindromic(x)) 	{ 		return 1; 	} 	else 	{ 		return 0; 	} } int main() { 	int x1,x2,key; 	scanf("%d",&x1); 	while(1) 	{	 		x2=palindromic(x1); 		key=judge(x2); 		if(key==0) 		{ 			printf("%d+%d=%d\n",x1,x2,x1+x2); 			x1+=x2; 		} 		else 		{ 			printf("yes palindromic\n"); 			break; 		} 	}     return 0; }    结果 编辑环境：sources insight      运行环境：gcc    如有疑问接受留言和私信 请问一下，这个程序用语言怎么说啊（就是口述的那种），我实在是不会。


Question: 指针等于"\0"  指针后面的字符会怎样

引用 5 楼 weixin_45638884 的回复:[quote=引用 2 楼 自信男孩的回复:]  *p='\0'; 这可不是指针被赋值'\0'，而是指针指向的内存单元被赋值'\0'；这个问题要搞清楚。  注意p前面有一个*号。这是引用，即引用内存指向的内存单元，即指向的是s1的数组（某个位置）。 当然，p  = strstr(s1, s2);strstr的返回值有可能是NULL，因此代码存在健壮性问题。需要加一下判断，若p!= NULL时，*p = '\0';才可以。 否则会出现段错误～ 对呀 所以我说 是p后面的内容呀！[/quote] 不管会不会消失，你都不能再去用后面的内容！所以，研究这个没有意义，又不是要去搞黑客攻击

引用 9 楼 自信男孩的回复:[quote=引用 6 楼 weixin_45638884 的回复:] [quote=引用 3 楼 自信男孩的回复:]后面的不会消失。只是再次用%s或puts输出时，'\0'后面的不会输出。但是后面的内容还在。 因为%s/puts都是输出字符串的，而输出字符串是遇到'\0'就停止输出的。 懂了点啦 就是gets这个函数的问题吧[/quote] 跟gets这句没关系，是因为p  = strstr(s1, s2); *p = '\0';主要是跟*p = '\0';有关系～[/quote] 好 对对 我懂啦 刚才把gets放到里面，输出了一下 确实

引用 6 楼 weixin_45638884 的回复:[quote=引用 3 楼 自信男孩的回复:]后面的不会消失。只是再次用%s或puts输出时，'\0'后面的不会输出。但是后面的内容还在。 因为%s/puts都是输出字符串的，而输出字符串是遇到'\0'就停止输出的。 懂了点啦 就是gets这个函数的问题吧[/quote] 跟gets这句没关系，是因为p  = strstr(s1, s2); *p = '\0';主要是跟*p = '\0';有关系～

引用 7 楼 自信男孩的回复:[quote=引用 5 楼 weixin_45638884 的回复:] [quote=引用 2 楼 自信男孩的回复:]  *p='\0'; 这可不是指针被赋值'\0'，而是指针指向的内存单元被赋值'\0'；这个问题要搞清楚。  注意p前面有一个*号。这是引用，即引用内存指向的内存单元，即指向的是s1的数组（某个位置）。 当然，p  = strstr(s1, s2);strstr的返回值有可能是NULL，因此代码存在健壮性问题。需要加一下判断，若p!= NULL时，*p = '\0';才可以。 否则会出现段错误～ 对呀 所以我说 是p后面的内容呀！[/quote] 不是给你回复了吗？不会消失呢。[/quote] 嗯嗯 只是不输出啦 有个gets函数

引用 5 楼 weixin_45638884 的回复:[quote=引用 2 楼 自信男孩的回复:]  *p='\0'; 这可不是指针被赋值'\0'，而是指针指向的内存单元被赋值'\0'；这个问题要搞清楚。  注意p前面有一个*号。这是引用，即引用内存指向的内存单元，即指向的是s1的数组（某个位置）。 当然，p  = strstr(s1, s2);strstr的返回值有可能是NULL，因此代码存在健壮性问题。需要加一下判断，若p!= NULL时，*p = '\0';才可以。 否则会出现段错误～ 对呀 所以我说 是p后面的内容呀！[/quote] 不是给你回复了吗？不会消失呢。

引用 3 楼 自信男孩的回复:后面的不会消失。只是再次用%s或puts输出时，'\0'后面的不会输出。但是后面的内容还在。 因为%s/puts都是输出字符串的，而输出字符串是遇到'\0'就停止输出的。 懂了点啦 就是gets这个函数的问题吧

引用 2 楼 自信男孩的回复:  *p='\0'; 这可不是指针被赋值'\0'，而是指针指向的内存单元被赋值'\0'；这个问题要搞清楚。  注意p前面有一个*号。这是引用，即引用内存指向的内存单元，即指向的是s1的数组（某个位置）。 当然，p  = strstr(s1, s2);strstr的返回值有可能是NULL，因此代码存在健壮性问题。需要加一下判断，若p!= NULL时，*p = '\0';才可以。 否则会出现段错误～ 对呀 所以我说 是p后面的内容呀！

引用 1 楼 真相重于对错的回复:打印出来都是乱码呀 这个程序是对的呀呀呀#include<stdio.h> #include<string.h> int main(){     char a[81],s1[81],s2[81],*p;     gets(s1);     gets(s2);     while((p=strstr(s1,s2))!=NULL){         strcpy(a,p+strlen(s2));         *p='\0';         strcat(s1,a);             }     puts(s1);     }

打印出来都是乱码呀

引用 18 楼 千梦一生的回复:[quote=引用 16 楼 weixin_45638884 的回复:] [quote=引用 14 楼 千梦一生的回复:][quote=引用 13 楼 千梦一生 的回复:] [quote=引用 12 楼 千梦一生 的回复:] *p = ‘\0’ 我想你是这个意思。 此时你尝试打印p指向的字符串， 将不会有任何打印。 另外： *p = "\0"恐怕会报错。[/quote]  因为*p的宽度是1B，而赋过来的值宽度应该是地址宽度4B云云。强行赋值只能丢失。 例如，原来p所指向的那字符串是 ”hello“。而"\0"（字符串）的地址是0x ff 33 22 11。 如果强行赋值 *p = "\0"。则存储‘h’这个字节的空间内容将变成0x11。 此时输出p的时候可能的结果是：”乱码ello“ 或者另一种情况"\0"（字符串）的地址是0x ff 22 11 00。 如果强行赋值 *p = "\0"。则存储‘h’这个字节的空间内容将变成0x00（‘\0’）。 此时输出p的时候可能的结果是：没有输出[/quote] 我的其实想问的是 在执行完 strcap后 为什么又让*P的内容为空。[/quote]  比如现在p = strstr(str1,str2);后 p 指向了“hello”；的'e'(str1里面的'e') 它此时将p = '\0'我也不知道他想要干嘛。 但结果就是str1原本内存中的'h','e','l','l','o','\0'变成了'h','\0','l','l','o','\0' 此时，如果时puts也好，printf也好，他们函数内部进行打印的时候都是规定以找到'\0'，作为终止。 即此时打印的结果将变成：h 如果这里你不置为'\0'则puts、printf这些函数将会一直打印下去直到遇到'\0'。内存中就是0  总的说：这个程序的功能就是打印出：str1中第一次出现str2字符串的位置之前的字符串[/quote] 对对 就是这个 就是这个答案 谢谢啦

引用 16 楼 weixin_45638884 的回复:[quote=引用 14 楼 千梦一生的回复:][quote=引用 13 楼 千梦一生 的回复:] [quote=引用 12 楼 千梦一生 的回复:] *p = ‘\0’ 我想你是这个意思。 此时你尝试打印p指向的字符串， 将不会有任何打印。 另外： *p = "\0"恐怕会报错。[/quote]  因为*p的宽度是1B，而赋过来的值宽度应该是地址宽度4B云云。强行赋值只能丢失。 例如，原来p所指向的那字符串是 ”hello“。而"\0"（字符串）的地址是0x ff 33 22 11。 如果强行赋值 *p = "\0"。则存储‘h’这个字节的空间内容将变成0x11。 此时输出p的时候可能的结果是：”乱码ello“ 或者另一种情况"\0"（字符串）的地址是0x ff 22 11 00。 如果强行赋值 *p = "\0"。则存储‘h’这个字节的空间内容将变成0x00（‘\0’）。 此时输出p的时候可能的结果是：没有输出[/quote] 我的其实想问的是 在执行完 strcap后 为什么又让*P的内容为空。[/quote]  比如现在p = strstr(str1,str2);后 p 指向了“hello”；的'e'(str1里面的'e') 它此时将p = '\0'我也不知道他想要干嘛。 但结果就是str1原本内存中的'h','e','l','l','o','\0'变成了'h','\0','l','l','o','\0' 此时，如果时puts也好，printf也好，他们函数内部进行打印的时候都是规定以找到'\0'，作为终止。 即此时打印的结果将变成：h 如果这里你不置为'\0'则puts、printf这些函数将会一直打印下去直到遇到'\0'。内存中就是0  总的说：这个程序的功能就是打印出：str1中第一次出现str2字符串的位置之前的字符串

引用 15 楼 真相重于对错的回复:[quote=引用 4 楼 weixin_45638884 的回复:] [quote=引用 1 楼 真相重于对错的回复:]打印出来都是乱码呀 这个程序是对的呀呀呀#include<stdio.h> #include<string.h> int main(){     char a[81],s1[81],s2[81],*p;     gets(s1);     gets(s2);     while((p=strstr(s1,s2))!=NULL){         strcpy(a,p+strlen(s2));         *p='\0';         strcat(s1,a);             }     puts(s1);     }[/quote] 所谓的乱是跟程序规定而言的。 c字符串规定是以\0为结尾，再后面的不管是不是能打印出来，它都是不符合规定的。[/quote] 这个我倒是有点印象  c字符确实是 以\0结尾的

引用 14 楼 千梦一生的回复:[quote=引用 13 楼 千梦一生 的回复:] [quote=引用 12 楼 千梦一生 的回复:] *p = ‘\0’ 我想你是这个意思。 此时你尝试打印p指向的字符串， 将不会有任何打印。 另外： *p = "\0"恐怕会报错。[/quote]  因为*p的宽度是1B，而赋过来的值宽度应该是地址宽度4B云云。强行赋值只能丢失。 例如，原来p所指向的那字符串是 ”hello“。而"\0"（字符串）的地址是0x ff 33 22 11。 如果强行赋值 *p = "\0"。则存储‘h’这个字节的空间内容将变成0x11。 此时输出p的时候可能的结果是：”乱码ello“ 或者另一种情况"\0"（字符串）的地址是0x ff 22 11 00。 如果强行赋值 *p = "\0"。则存储‘h’这个字节的空间内容将变成0x00（‘\0’）。 此时输出p的时候可能的结果是：没有输出[/quote] 我的其实想问的是 在执行完 strcap后 为什么又让*P的内容为空。

引用 4 楼 weixin_45638884 的回复:[quote=引用 1 楼 真相重于对错的回复:]打印出来都是乱码呀 这个程序是对的呀呀呀#include<stdio.h> #include<string.h> int main(){     char a[81],s1[81],s2[81],*p;     gets(s1);     gets(s2);     while((p=strstr(s1,s2))!=NULL){         strcpy(a,p+strlen(s2));         *p='\0';         strcat(s1,a);             }     puts(s1);     }[/quote] 所谓的乱是跟程序规定而言的。 c字符串规定是以\0为结尾，再后面的不管是不是能打印出来，它都是不符合规定的。

引用 13 楼 千梦一生 的回复:[quote=引用 12 楼 千梦一生 的回复:] *p = ‘\0’ 我想你是这个意思。 此时你尝试打印p指向的字符串， 将不会有任何打印。 另外： *p = "\0"恐怕会报错。[/quote]  因为*p的宽度是1B，而赋过来的值宽度应该是地址宽度4B云云。强行赋值只能丢失。 例如，原来p所指向的那字符串是 ”hello“。而"\0"（字符串）的地址是0x ff 33 22 11。 如果强行赋值 *p = "\0"。则存储‘h’这个字节的空间内容将变成0x11。 此时输出p的时候可能的结果是：”乱码ello“ 或者另一种情况"\0"（字符串）的地址是0x ff 22 11 00。 如果强行赋值 *p = "\0"。则存储‘h’这个字节的空间内容将变成0x00（‘\0’）。 此时输出p的时候可能的结果是：没有输出

引用 12 楼 千梦一生 的回复:*p = ‘\0’ 我想你是这个意思。 此时你尝试打印p指向的字符串， 将不会有任何打印。 另外： *p = "\0"恐怕会报错。


Question: 计算机专业教学计划编制

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


Question: c语言新生求指点

继续捞继续捞

捞一下捞一下

#include<stdio.h> #include<stdlib.h>  int main() {     int t,n,a[5],i,j,sum,sum1,sum2,c,d;      while (scanf("%d", &t) == 1) {         while (t--) {             scanf("%d", &n);             if (n > 5)    //avoid overflow                 n = 5;             //sum = 0;             for(i=0;i<n;i++)                 scanf("%d",&a[i]);              sum = 0;             for(i=0;i<n;i++)                 sum+=a[i];             printf("%d\n",sum);              for(i=0;i<n-1;i++){                 for(j=0;j<n-1-i;j++){                     if(a[j]>a[j+1]) {                         d=a[j];                         a[j]=a[j+1];                         a[j+1]=d;                     }                 }             }              c=sum-a[0];             for(i=1;i<(n/2+1);i++){                 a[i] = a[n-1-i];             }             for(i=1;i<=n;i++){                 sum1=0;                 sum2=0;                 for(j=0;j<i;j++){                     sum1+=a[j];                     sum2 = sum-sum1;                 }                 printf("%d %d\n", sum1,sum2);                 if(abs(sum2-sum1) < c)                     c = abs(sum2-sum1);              }             printf("%d\n",c);         }     }     return 0; }  供参考～  如果认为sum1, sum2结果不对建议找一下自己的算法问题，代码没发现什么问题，应该是逻辑问题～再分析一下需求～

代码格式有点混乱，代码感觉写的也有点乱，但是求和和输入，冒泡排序之类的应该没什么，不过感觉对n的输入数值应该要求有点严格，前面要求1-5，后面又必须2-5，额，剩下的就留给楼主自己看吧，不过求和应该没什么问题，只需要严格按照你自己设计的输入去，例如 1 5 1 2 3 4 5，这样求和至少没什么，而且感觉有点不知道楼主想做什么


Question: 萌新求解一道题

这种题，自己看不出来，就敲代码运行一下啊

1245，回车被c4接收了


Question: 小哥哥小姐姐，各位大神们看看呀

#include <stdio.h> #include <stdlib.h> struct Node { int val; struct Node* next; };  struct Node* construct(int arr[], int size){ 	struct Node * head = NULL; 	struct Node * pre = NULL; 	struct Node * temp = NULL; 	for(int i = 0; i < size; i++){ 		temp = (struct Node *)calloc(1, sizeof(struct Node)); 		temp->val = arr[i]; 		if(i == 0){ 			head = temp; 		} 		if(pre != NULL){ 			pre->next = temp; 		} 		pre = temp; 	} 	return head; } void show(struct Node* head){ 	struct Node* temp = head; 	while(temp){ 		printf("%d\t", temp->val); 		temp = temp->next; 	} }  void freeNode(struct Node* head){ 	struct Node* temp = head; 	struct Node* next = head->next; 	while(temp){ 		printf("free->%d\n", temp->val); 		free(temp); 		temp = next; 		next = next->next; 		 	} } void main(){ 	int arr[6] = {1,2,45,5,45,45}; 	struct Node* head = construct(arr, 6); 	show(head); 	freeNode(head);  }

所以，你的问题是什么？写这个函数遇到什么问题了？


Question: 嵌入式操作系统毕业设计选题

给个参考： https://blog.csdn.net/Donald_Shallwing/article/details/86706266

电子音乐相册吧，基础的bmp图片，循环，自动搜索图片等 智能寻迹小车，图书馆管理器，或者什么2048之类的游戏


Question: VS2013报错0x00007FFFCC9EAFD3 (msvcr120d.dll) (ConsoleApplication1.exe 中)处有未经处理的异常:


Question: C语言学生学籍系统

你是怎么来存储学生的信息的？文件？还是数据库？ 如果是这样存储的话，直接读取文件或数据库中的记录总数不就得了？ 参考文档： https://blog.csdn.net/Donald_Shallwing/article/details/99734501

引用 1 楼 weixin_46041888的回复:下面是题目 2.学生学籍管理 用结构体存放学生的学籍，可对学生学籍进行修改，增加，删除，查找，统计等操作。要求可以使用菜单列表，根据选择的功能编号给出相应结果。 功能要求： （1）系统以菜单方式工作。 （2）每位学生的信息包括：学生的学号，姓名，性别，年龄，专业，班级； （3）修改已知学号的学生信息； （4）删除已知学号的学生信息； （5）查找已知学号的学生信息； （6）增加一位学生的学生信息； （7）统计学生总数。 你是来这找大神帮你写考试作业吗？


Question: 求助，C语言程序设计 一个矩阵:任意一行的加和=任意一列的加和=每条对角线的和


Question: 求助c语言大佬

#include<stdio.h> #include<stdlib.h> #include<string.h> #define N 20 int min(int a, int b, int c) {     int min = 0;     min = a < b ? a : b;     min = c < min ? c : min;     return min; } int minDistance(char* s1, char* s2) {     int len1 = strlen(s1);     int len2 = strlen(s2);      int dp[len1 + 1][len2 + 1];     for (int i = 0; i < len1 + 1; i++)     {         for (int j = 0; j < len2 + 1; j++)         {             dp[i][j] = 0;         }     }     for (int j = 1; j < len2+1; j++)     {         dp[0][j] = dp[0][j - 1] + 1;     }     for (int i = 1; i < len1+1; i++)     {         dp[i][0] = dp[i - 1][0] + 1;     }     for (int i = 1; i < len1 + 1; i++)     {         for (int j = 1; j < len2 + 1; j++)         {             if (s1[i-1] == s2[j-1])             {                 dp[i][j] = dp[i - 1][j - 1];             }             else             {                 dp[i][j] = min(dp[i - 1][j - 1], dp[i][j - 1], dp[i - 1][j]) + 1;             }          }     }     return dp[len1][len2]; }  int main() {     char s1[N], s2[N];     printf("Please input the first string\n");     gets(s1);     printf("Please input the second string\n");     gets(s2);     int dis = 0;     dis = minDistance(s1, s2);     printf("The distance is %d\n", dis); }


Question: 求助-C语言文件题

#include<stdio.h> #include<stdlib.h> #include<string.h>  int main() {     FILE *fp,*fp1;     int n,min=100,max=0;     int i=0,k=0;     double average;      fp=fopen("score.txt","r");     if (!fp) {         fprintf(stderr, "Open file error!\n");         return -1;     }      while(!feof(fp))     {         fscanf(fp,"%d", &n);         k+=n;         i++;         if(min>n)             min=n;         if(max<n)             max=n;     }     fclose(fp);      average = k*1.0/i;     fp1=fopen("result.txt","w");     if (!fp1) {         fprintf(stderr, "Open file error!\n");         return -1;     }     //fprintf(fp1,"%.2f %d %d", average, max, min);     fprintf(fp1,"%.2lf %d %d", average, max, min);     fclose(fp1);      return 0; } 供参考～  试试这个～


Question: 小白求助

引用 1 楼 自信男孩的回复:因为最后的'\0'没有拷贝到t末尾 懂了，谢谢大佬的指点

懂了，谢谢大佬的指点

因为最后的'\0'没有拷贝到t末尾


Question: 请问输出的前后边的空格要怎么消除？

引用 3 楼 自信男孩 的回复:#include<stdio.h>  int main() {     int i,j,a,t=0;     for(i=1;i<=4;i++)     {for(j=1;j<=5;j++)         {              a=i*j;             t++;             //if(i!=0);    //多一个分号;             if(i != 0)    //这个代码冗余，i会为0吗？             printf("%d",a);             if (j < 5)   //最后一个数之后的空格去掉，即最后一个数后的空格不打印                 printf(" ");             if(t%5 == 0)             printf("\n");         }         printf("\n");     }     return 0; } 非常感谢！！

引用 1 楼 自信男孩 的回复:建议楼主把问题描述的更清晰一些，如果从程序上来看，不要空格，那么就去掉printf(" "); 输出是你自己定的，想输出就输出，不想就可以不输出。就是输出后最后一个数后边还是会有空格，我想要只有数之间有空格，前边和后边的空格去掉


Question: C语言指针入门遇到一个问题

谢谢，我太粗心了

#include<stdio.h> void swap(int *q1,int *q2) {     int temp;       temp=*q1;       *q1=*q2;       *q2=temp; } void sanexchange(int *p_1,int *p_2,int *p_3) {   if(*p_1<*p_2)       swap(p_1,p_2);   if(*p_1<*p_3)       swap(p_1,p_3);   if(*p_2<*p_3)       swap(p_2,p_3); }  //void main() int main() {    int a,b,c;    int *p1,*p2,*p3;    //scanf("%d%d%d\n",&a,&b,&c);    scanf("%d%d%d",&a,&b,&c);    p1=&a;    p2=&b;    p3=&c;    sanexchange(p1,p2,p3);    printf("%d%d%d",a,b,c); } 供参考～  swap实参与形参类型不匹配

if(*p_1<*p_2)swap(*p_1,*p_2);这里的*p_1是将其内容传递给swap函数，而不是指针传递，参数不匹配


Question: 帮看看怎么做一个程序流程图 ，该怎么写

下载后如果你的问题已经解决，希望采纳，如果还有疑问，接受私信

引用 3 楼 FANTA88 的回复:[quote=引用 2 楼 @矛盾综合体 的回复:] 兼容office或者wps的话建议用visio（以前单片机都需要有找个框图，不然凉凉）  需要的话可以私信我发你链接 需要需要 qq1955793878 可以给我发一下吗  或者私信给我 [/quote] 链接7天内有效

引用 2 楼 @矛盾综合体 的回复:兼容office或者wps的话建议用visio（以前单片机都需要有找个框图，不然凉凉）  需要的话可以私信我发你链接 需要需要 qq1955793878 可以给我发一下吗  或者私信给我

有软件的，自己去找一下吧


Question: C语言入门小白求大神指点

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

引用 5 楼 @矛盾综合体的回复:[quote=引用 4 楼 陳小白 的回复:] [quote=引用 2 楼 @矛盾综合体的回复:]思路没有错误，输入有错误，你这里的逗号是汉语的，但是你直接输入的格式却要求英文逗号，中文和英文的0101代码是不一样的，所有造成不匹配，解决方法，将输入改为英文，或者直接去掉scanf里面的，号，输入时用空格或者回车都可以隔离数字 哦哦，这样啊，谢谢你，我知道了，多谢多谢[/quote] 如果问题已经解决，请采纳，谢谢[/quote] 解决了，命令符输入了几个数字，逗号错了，应该用英文格式，还是我自己不仔细，刚刚起步，这种问题不该错，丢人，谢谢你啊！

引用 4 楼 陳小白 的回复:[quote=引用 2 楼 @矛盾综合体的回复:]思路没有错误，输入有错误，你这里的逗号是汉语的，但是你直接输入的格式却要求英文逗号，中文和英文的0101代码是不一样的，所有造成不匹配，解决方法，将输入改为英文，或者直接去掉scanf里面的，号，输入时用空格或者回车都可以隔离数字 哦哦，这样啊，谢谢你，我知道了，多谢多谢[/quote] 如果问题已经解决，请采纳，谢谢

引用 2 楼 @矛盾综合体的回复:思路没有错误，输入有错误，你这里的逗号是汉语的，但是你直接输入的格式却要求英文逗号，中文和英文的0101代码是不一样的，所有造成不匹配，解决方法，将输入改为英文，或者直接去掉scanf里面的，号，输入时用空格或者回车都可以隔离数字 哦哦，这样啊，谢谢你，我知道了，多谢多谢

注意下逗号的中英文。代码里用的是英文，输入的时候也要用英文，若用中文，也要相同；  因为scanf是格式化输入，所以格式要保持一样

有人没？C语言刚刚起步，求指点


Question: 单链表做班级成绩单，要求设置菜单，但是r值好像改变不了，无法运行其他选项

#include <stdio.h> #include <stdlib.h>  struct grade_list {     char number[15];     char name[20];     int English;     int math;     int physics;     int c;     struct grade_list *next; }; void input(struct grade_list *head,int n); void output(struct grade_list *head,int n); void modification(struct grade_list *head,int n); void statistics(struct grade_list *head,int n); void output_all(struct grade_list *head,int n);  int main() {     int n,i;     struct grade_list *head=NULL,*p;     head=(struct grade_list *)malloc(sizeof(struct grade_list));     if (!head)         exit(0);      p=head;     printf("input the number of students\n");     scanf("%d",&n);     for(i=0;i<n;i++)     {         p->next = (struct grade_list *)malloc(sizeof(struct grade_list));         if (!p->next)             exit(0);         p = p->next;     }     int r;     while(1)     {         r=0;         printf("r=0\t输入每个学生的各项信息\nr=1\t输出每个学生的各项信息\nr=2\t修改指定学生的指定数据项的内容\n");         //printf("r=3\t统计每个学生的平均成绩（保留2位小数）\nr=4\t输出各位学生的学号、姓名、4门课程的总成绩和平均成绩\n\输入r：");         printf("r=3\t统计每个学生的平均成绩（保留2位小数）\nr=4\t输出各位学生的学号、姓名、4门课程的总成绩和平均成绩\n输入r：");         scanf("%d",&r);         if(r==0)             input(head,n);         else if(r==1)             output(head,n);         else if(r==2)             modification(head,n);         else if(r==3)             statistics(head,n);         else if(r==4)             output_all(head,n);         else             printf("error,please input r again:\n");     }     return 0; } void input(struct grade_list *head,int n) {     struct grade_list *p=head;     int i;     printf("input number,name,the grade of English,math,physics and c,please:\n");     for(i=0;i<n;i++)     {         //scanf("%s%s%d%d%d",p->number,p->name,&p->English,&p->math,&p->physics,&p->c);         scanf("%s%s%d%d%d%d", p->number, p->name, &p->English,&p->math,&p->physics,&p->c);         getchar();         p=p->next;     } } void output(struct grade_list *head,int n) {     struct grade_list *p=head;     int i;     for(i=0;i<n;i++)     {         printf("number=%s\tname\%s\tEnglish=%d\tmath=%d\tphycics=%d\tc=%d\n",\                 p->number,p->name,p->English,p->math,p->physics,p->c);         //p->next;         p = p->next;     } } void modification(struct grade_list *head,int n) {     struct grade_list *p=head;     int i,x;     printf("input the student's number:\n");     scanf("%d",&x);     for(i=1;i<x;i++)         p=p->next;     printf("input the item you want to modify\tnumber:1\tname:2\tEglish:3\tmath:4\tphysics:5\tc:6\n");     scanf("%d",&i);     printf("the right date:\n");     switch(i)     {         case 1:scanf("%s",p->number);break;         case 2:scanf("%s",p->name);break;         case 3:scanf("%d",&p->English);break;         case 4:scanf("%d",&p->math);break;         case 5:scanf("%d",&p->physics);break;         case 6:scanf("%d",&p->c);break;         default:printf("input error\n");break;     } }  void statistics(struct grade_list *head,int n) {     struct grade_list *p=head;     //int i,sum[i];     int i, *sum;     //float ave[n];     float *ave;      sum = (int *)malloc(sizeof(int) * n);     if (!sum)         exit(0);      ave = (float *)malloc(sizeof(float) * n);     if (!ave)         exit(0);      for(i=0;i<n;i++)     {         sum[i]=p->English+p->math+p->physics+p->c;         p=p->next;     }     p=head;     for(i=0;i<n;i++)     {         ave[i]=sum[i]/4.0;         p=p->next;     }     p=head;     for(i=0;i<n;i++)     {         //printf("%s\t%s\t%d\t%d\t%d\t%.2f\t%d\t",p->number,         printf("%s\t%s\t%d\t%d\t%d\t%d\t%.2f\t%d\t\n",p->number,\                 p->name,p->English,p->math,p->physics,p->c,ave[i],sum[i]);         p=p->next;     }   free(sum);     free(ave); } void output_all(struct grade_list *head,int n) {     struct grade_list *p=head;     //int i,sum[i];     int i, *sum;     //float ave[n];     float *ave;      sum = (int *)malloc(sizeof(int) * n);     if (!sum)         exit(0);      ave = (float *)malloc(sizeof(float) * n);     if (!ave)         exit(0);     for(i=0;i<n;i++)     {         sum[i]=p->English+p->math+p->physics+p->c;         p=p->next;     }     //p=head;     for(i=0;i<n;i++)     {         ave[i]=sum[i]/4.0;         //p=p->next;     }     p=head;     for(i=0;i<n;i++)     {         printf("number=%s\tname\%s\tEnglish=%d\tmath=%d\tphycics=%d\tc=%d\tsum=%d\tave=%.2f\n",\                 p->number,p->name,p->English,p->math,p->physics,p->c,sum[i],ave[i]);         p=p->next;     }     free(sum);     free(ave); }  供参考～  建议把sum, ave加到数据结构里（结构体），这样没必要每次都申请空间了。  楼主对sum, ave用静态数组（定义）是错误的。所以我改成动态了。  代码除了一些错误之外，还有需要优化的地方，建议楼主结合代码比对，找出自己的问题，并做进一步的优化


Question: Delete the vowel

用结构体字符串就行了


Question: 想请教一下关于线程分离的问题

感谢！明白了！！

会发生意想不到的情况，比如挂了。所以你要用deach的时候，要保证主线程的生命周期长于子线程。所以一般会在主线程退出前调用join的，deach反正我是很少用


Question: c语言将split部分程序改为使用指针

引用 3 楼 suifengsanjin的回复:函数里面 a[low] 可以写成 *(a+low)   [quote=引用 2 楼 suifengsanjin 的回复:] int split(int *a,int low,int high) 看这个 https://blog.csdn.net/qingsong3333/article/details/78220372[/quote] 已经改好了，但是还是谢谢你！

函数里面 a[low] 可以写成 *(a+low)   引用 2 楼 suifengsanjin 的回复:int split(int *a,int low,int high) 看这个 https://blog.csdn.net/qingsong3333/article/details/78220372

请大佬帮忙改一下，给点提示也行，十分感谢！


Question: C的作业题，刚学不会做，有无大佬

引用 1 楼 自信男孩的回复:刚学习就要编写这么多功能的程序吗？要么是学习过了，但是没学好，要么老师给的题目超纲了。 刚学完，不熟，有的没学，不会


Question: 又双叒叕不会做了

char *p = "I love C language" int count = 0,MaxCount; while(*p!='\0') { if(*p == ' ') { MaxCount  = MaxCount>count?MaxCount:count; count = 0; } else count++; p++; } MaxCount  = MaxCount>count?MaxCount:count;

看下这段代码 吃透的话也可以 #include <stdio.h> #include <stdlib.h> #include <string.h> #define _MAX(a,b) ((a) > (b) ?(a):(b))  int main() { 	int max_length = 0; 	char src[1024] = {"code is far away from bug with the animal protection"}; 	char * pre = src; 	char * npos = 0; 	while(1) { 		npos = strchr(pre+1 , ' '); 		if(npos) { 			max_length = _MAX(max_length,npos - pre); 			pre = npos; 		} else { 			max_length = _MAX(max_length,strlen( pre)); 			break; 		} 	} 	printf("Max word length is %d\n",max_length); 	return 0; }

顺序读字符，每读一个count++,遇上空格，就记录下当前maxcount，count=0 代码自己摸索


Question: 对结构体的数组赋值

结构体内部这个 VerTexType这个也是个结构体，按结构体的赋值方式试下？ AMGraph G 数值 G.vex[i].xxxx=xxx; char 数组 strcpy(G.vex[i].xxxx,xxxx);

VerTexType这是啥类型。能不嫩直接赋值要看这个是什么类型的。


Question: 数据类型问题

楼主为什么不通过编译运行之后再分析一下呢？  在网上直接搜一下%-4d，或许能知道蛛丝马迹，尝试着自己去解决问题吧。  比如把-去掉试试，再运行一下试试。通过自己的调试和猜测或许你能学到更多～ 建议多动手～

+ - 是左右对齐的占位符，%-4d 的意思就是 左对齐不足4位的用空格站位，比如%-4d，1输出就是1后面跟三个空格符 另外你这个代码的意思printf("\n")应该在循环体内执行吧，所以for要加个大括号把两个printf包含在里面吧


Question: 求助，要用c语言来编写，急着要 谢谢各位啦，要求如下：

自己写， 有问题贴代码求助 自己写，才有助于提高水平 单纯要代码的，自己百度找吧

现在找代写都变这么委婉了吗？


Question: 判断题：continue语句只能用于三个循环语句中

三个循环语句即：for，while，do .. while语句吧  其实continue只能用于循环语句中～

就是说continue只能出现在循环语句中  do{ ... continue; ... }while(...)  for(...) { ... continue; ... }  while(...) { ... continue; ... }

引用 2 楼 user-4的回复:[quote=引用 1 楼 远诚友加 的回复:] do for while 三种循环语句，题目肯定错了，不必深究没看懂 判断题答案是对的 你的回复也是写出三种  那题目是怎么错的?[/quote] 好吧，题目没错，题目说“个”我一时理解不过来，这个题目是说，continue语句只能用在do，for，while这三个循环语句中，这个表述方式挺奇怪的

引用 1 楼 远诚友加 的回复:do for while 三种循环语句，题目肯定错了，不必深究没看懂 判断题答案是对的 你的回复也是写出三种  那题目是怎么错的?

do for while 三种循环语句，题目肯定错了，不必深究


Question: 关于输入输出函数返回值的问题

引用 1 楼 远诚友加的回复:scanf返回值为成功读入变量数 感谢大佬现在已经懂了

引用 2 楼 自信男孩的回复:On success, these functions return the number of input items successfully matched and assigned; this can be fewer than provided for, or even zero, in the event of an early matching failure.  可以翻译一下这段英文。可以简单理解一下：就是若运行成功，则会返回与分配的相匹配的输入的项目数，也可能返回小于提供的项目数，甚至是等于0，当出现匹配失败时。 The value EOF is returned if the end of input is reached before either the first successful conversion or a matching failure occurs.  EOF is also returned if a read  error  occurs,  in  which        case the error indicator for the stream (see ferror(3)) is set, and errno is set to indicate the error 这段自己翻译吧～ 感谢大佬现在已经懂了

scanf返回值为成功读入变量数


Question: 向各位大佬们求助：

引用 1 楼 與蘤舊縐的回复:搞个管理系统之类的好了，省的自己想需求，而且也不算太水 我看搞个成绩管理比较好点，math用来求均方根 谢谢意见，十分宝贵，感谢！


Question: 关于%p的疑问

是变量d的地址值。因为p = &b;这个表达式的操作就是把b的地址值存在变量p中。 %p是输出地址值，一般是指针的。

%p是一种指针变量显示格式，并不常用，一般情况下%X或者%x就可以了

所有的变量都有地址，代表变量在内存中所在的位置，除了地址之外，变量还有值，就存放在该地址所指向的那段内存空间里面，甚至常量也有地址和值。指针变量也是变量，当然也有地址。只不过指针变量（在32位应用里面是一个32位的整数）的值又是一个地址，这个地址可以随程序运行过程中改变，改变的就是指针的值，通过这个值可以引用到另一个地址里面的值。如此而已！

这个输出的是指向d的地址


Question: if语句的使用

引用 4 楼 SuperDay 的回复：还要给你发完整的代码吗？ #include <stdio.h> int main() {     float x;     scanf ("%f",&x);     if(x<1)         printf("y=%f",x);     else if(x<10)         printf("y=%f",3-x/5);     else         printf("y=%f",3*x-10);     return 0; ｝不用了，谢谢

引用 1 楼 一条不会飞的鱼 的回复：楼主把代码（不要图片）和输出结果贴出来比较好判断已经解决，谢谢

引用 2 楼 SuperDay 的回复：没有1<=x<10这种用法 下面这样写就好了 if(x<1)printf…… else if(x<10)printf…… else printf……谢谢，

第二个if有问题呢。  三个if可以串起来的：  if (x < 1)     xxxx else if (x < 10) xxxxx else  xxxx

#include <stdio.h> int hand () {float x; scanf ("%f",&x); if(x<1) printf("y=%f",x); if(1<=x<10) printf("y=%f",3-x/5); if(x>=10) printf("y=%f",3*x-10); return 0;｝ 输入15 y=0.000000y=35.000000 输入-5 y=5.000000y=4.000000

楼主把代码（不要图片）和输出结果贴出来比较好判断


Question: 谁能帮帮我≥﹏≤

有代码嘛

静态数组就是相对malloc/free申请到的动态数组而言的。就像在函数里定义的: int a[10];这样的数组。


Question: 莫名其妙的问题2

for(d = 2;d >= 0;d--) 改为 for(d = 2;d > 0;d--) VS2015调试结果


Question: 指针

p = x; 即p指向x;即数组x的首地址放到p变量里。


Question: 求解答

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

引用 1 楼 寻开心的回复:代码贴文字版的，都弄成图，怎么给你改啊  1 读入数据， scanf   &a【I】 后面不要再scanf个\n         自己先试试，是不是把数据都正确读入了。 a数组读取后，循环输出一次检测     什么时候都不要偷这个懒，一定检查数据正确读入，再做后面的事儿  2 dh函数b数组的处理问题    因为b数组是要被反复用到的，所以一次性把60天的数据都算完就好了    b【0】=0，b【1】=10， 此后b【ℹ】 = b【I-1】 + b【I-2】 从2循环到60    你还可以再做一个C数组， 根据b数组的数值， 把累计数据也一个循环做完    c【0】 = 0。c【1】 = 10；  c【ℹ】 = c【I-1】 + b【I】    剩下的反而简单了，根据从a数组读出数据，直接输出c【0】 到 c【a【i】】就完了  这部分代码就自己弄吧 读入数据， scanf   &a【I】 后面的scanf个\n     删了就可以输出了。谢谢


Question: 各位大神，请问一下，线程里面可以创建线程么？

引用 6 楼 xian_wwq 的回复：既然是线程， 那么就不能默认认为先启动的线程一定先执行 执行顺序是乱序的 而传给线程的参数是局部变量， 那么是不能保证一定不变。 可以在循环中加sleep，然后看效果。循环中是有sleep 1s的，在外面的线程中sleep没什么变化，在里面的线程中sleep，值就没有正确的

引用 2 楼 自信男孩 的回复：可以呢，在main函数了创建线程，就是在主线程里创建子线程，在自定义函数里创建线程也是在创建子线程。大佬看我下面发的图

引用 1 楼 user-3 的回复：可以，传入的值更改需要你自己保证不被更改，参数以指针结构传入大佬看我下面发的图

附图以及运行结果

可以，传入的值更改需要你自己保证不被更改，参数以指针结构传入


Question: PTA中的一个关于指针的一个语法小问题

引用 1 楼 真相重于对错 的回复:据上面所说 这个函数应该是把 x 拆成 intpart 和 fracpart两部分 你的代码是把后面两部分相加。 逻辑错误 类似 比如X=5.2 那么 intpart =5 fracpart=0.2;了解了，俺把他变成这样就对了，void splitfloat( float x, int *intpart, float *fracpart ){    if(*fracpart<=0.0&&*intpart>=0){     *intpart=x-*fracpart;    *fracpart=x-*intpart;    } }谢谢大佬，大佬天天开心啊


Question: n的k次方的程序

#include <stdio.h>   double CF(int n, int k) {     if (k > 0)         return n*CF(n, k - 1);     else if (k < 0)         return (1.0/n)*CF(n, k + 1);     else         return 1; } int main() {     int n = 0;     int k = 0;     double ret = 0;     scanf("%d %d", &n,&k);     ret = CF(n, k);     printf("%d^%d=%lf\n", n, k, ret);      return 0; } 供参考～

#include <stdio.h>   double CF(int n, int k) {     if (k > 0)         return n*CF(n, k - 1);     if (k < 0)         //return (1.0/n)*CF(1.0/ n, -k - 1);         return (1.0/n)*CF(n, k + 1);     if (k == 0)         return 1;      return 0; } int main() {     int n = 0;     int k = 0;     double ret = 0;     scanf("%d %d", &n,&k);     ret = CF(n, k);     printf("%d^%d=%lf\n", n, k, ret);      return 0; } 供参考～  建议对比一下找出自己的问题～


Question: #语法错误#

引用 3 楼 Kmxs 的回复:[quote=引用 1 楼 @矛盾综合体的回复:]错误原因 1.if成立语句后面没有花括号，即{}，所有只能执行if后面的一条语句，执行后，继续执行，但是下面没有else，而是一条正常执行语句，导致后面的else没办法与if配对造成语法错误 2.x1=b+sqrt(d)/(2a);这里2a也有问题，2*a，不支持2a这种写法 3.printf("当a=%lf,b=%lf,c=%lf"a,b,c);printf("x1=%lf"x1);printf("x2=%lf\n"x2);这三个地方a，x1和x2之前均没有打，隔开 4.b=0这是一个赋值语句，是绝对成立的，判断语句应该是b==0 以上应该就是大致的语法错误（默默表示这些应该编译一下就知道的） 看的很仔细，非常感谢！[/quote] 如果你的问题已经解决，你可以选择对你帮助较好的采纳，如果没有，欢迎私信或者留言，留下你的疑惑，谢谢！

引用 1 楼 @矛盾综合体的回复:错误原因 1.if成立语句后面没有花括号，即{}，所有只能执行if后面的一条语句，执行后，继续执行，但是下面没有else，而是一条正常执行语句，导致后面的else没办法与if配对造成语法错误 2.x1=b+sqrt(d)/(2a);这里2a也有问题，2*a，不支持2a这种写法 3.printf("当a=%lf,b=%lf,c=%lf"a,b,c);printf("x1=%lf"x1);printf("x2=%lf\n"x2);这三个地方a，x1和x2之前均没有打，隔开 4.b=0这是一个赋值语句，是绝对成立的，判断语句应该是b==0 以上应该就是大致的语法错误（默默表示这些应该编译一下就知道的） 看的很仔细，非常感谢！

#include<stdio.h> #include<math.h> int main() {     printf("这是一个一元二次求根程序，请依次输入\na=\t,b=\t,c=\t\n");     double a,b,c,d,x1,x2;     scanf("%lf,%lf,%lf",&a,&b,&c);     d=b*b-4*a*c;     //printf("当a=%lf,b=%lf,c=%lf"a,b,c);     printf("当a=%lf,b=%lf,c=%lf", a,b,c);     //if(d>0||d=0)     if (d < 0) {         printf("原式无解");         return -1;     }      //if(d > 0 || fabs(d)< 1e-15)     //x1=b+sqrt(d)/(2a);     x1=b+sqrt(d)/(2 * a);     //x2=b-sqrt(d)/(2a);     x2=b-sqrt(d)/(2 * a);     //printf("x1=%lf"x1);     printf("x1=%lf", x1);     //printf("x2=%lf\n"x2);     printf("x2=%lf\n", x2);     //else     //printf("原式无解");     return 0; } 供参考～  去掉语法错误，是编程的基本功，建议楼主还是要加强基础学习和练习


Question: 请问大佬这是为什么啊?

引用 2 楼 真相重于对错的回复:scanf 参数要求的是地址 类似 int a; scanf("%d",&a); 而不是 scanf("%d",a); 谢谢了，我老是忘了这个，，，

直接贴代码吧～楼主的问题是输出有误吗？


Question: 可以帮忙看一下嘛 救救孩子

引用 3 楼 自信男孩的回复:[quote=引用 2 楼 qq_45855547 的回复:] [quote=引用 1 楼 自信男孩的回复:]#include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include <string.h> #include <stddef.h>  void bubble(int a[],int n); int merge(int a[],int lena,int b[],int lenb,int c[]);  int main() {     int *c,n,lena,lenb,m;     int i;      lena=lenb=5;     m=10;     c=(int *)malloc(m * sizeof(int));     int a[5]={2,4,1,6,8};     bubble(a,lena);     printf("数组a的内容是：\n");      for(i = 0; i < 5; i++) {         if (i % 10==0)             printf("\n");         printf("%6d",a[i]);     }     printf("\n");     int b[5]={9,7,3,0,5};      bubble(b,lenb);     printf("数组b的内容是：\n");     for(i = 0; i < 5; i++) {         if (i % 10 == 0)             printf("\n");         printf("%6d", b[i]);     }     printf("\n");      n = merge(a,lena,b,lenb,c);     printf("数组c的内容是：\n");     //for(i = 0; i < 5; i++)     for(i = 0; i < n; i++)     {         if (i%10==0)             printf("\n");         printf("%6d",c[i]);     }     printf("\n");     printf("数组c的长度为%d\n",n); } void bubble(int a[],int n) {     //bool flag=true;     int i,t;     while (n>1) //&& flag)     {         //flag=false;         for (i=0; i<n-1; i++)         {             if (a[i]>a[i+1])             {                 t=a[i];                 a[i]=a[i+1];                 a[i+1]=t;                 //flag=true;             }         }         n--;     } }  int merge(int a[],int lena,int b[],int lenb,int c[]) {      int i=0,j=0, k = 0;     while (i<lena && j<lenb)     {         if (a[i] < b[j])             c[k++] = a[i++];         else             c[k++] = b[j++];      }     while (i < lena)         c[k++] = a[i++];     while (j < lenb)         c[k++] = b[j++];      /*     if (a[i])         c[i++]=a[i++];     if (b[j])         c[i++]=b[j++];     */     return k ; } 供参考～ 那为什么我一开始数组a输进去就是错的鸭[/quote]  你没注意到你的冒泡排序越界了吗？ for (i=0; i<n-1; i++) 等你看完了你的代码和修改之后的代码，然后找一下自己的问题～  for (i=0; i<n; i++) 这是你的代码～[/quote] 没发现耶 我太蔡了qqq 谢谢谢谢宁

引用 2 楼 qq_45855547 的回复:[quote=引用 1 楼 自信男孩的回复:]#include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include <string.h> #include <stddef.h>  void bubble(int a[],int n); int merge(int a[],int lena,int b[],int lenb,int c[]);  int main() {     int *c,n,lena,lenb,m;     int i;      lena=lenb=5;     m=10;     c=(int *)malloc(m * sizeof(int));     int a[5]={2,4,1,6,8};     bubble(a,lena);     printf("数组a的内容是：\n");      for(i = 0; i < 5; i++) {         if (i % 10==0)             printf("\n");         printf("%6d",a[i]);     }     printf("\n");     int b[5]={9,7,3,0,5};      bubble(b,lenb);     printf("数组b的内容是：\n");     for(i = 0; i < 5; i++) {         if (i % 10 == 0)             printf("\n");         printf("%6d", b[i]);     }     printf("\n");      n = merge(a,lena,b,lenb,c);     printf("数组c的内容是：\n");     //for(i = 0; i < 5; i++)     for(i = 0; i < n; i++)     {         if (i%10==0)             printf("\n");         printf("%6d",c[i]);     }     printf("\n");     printf("数组c的长度为%d\n",n); } void bubble(int a[],int n) {     //bool flag=true;     int i,t;     while (n>1) //&& flag)     {         //flag=false;         for (i=0; i<n-1; i++)         {             if (a[i]>a[i+1])             {                 t=a[i];                 a[i]=a[i+1];                 a[i+1]=t;                 //flag=true;             }         }         n--;     } }  int merge(int a[],int lena,int b[],int lenb,int c[]) {      int i=0,j=0, k = 0;     while (i<lena && j<lenb)     {         if (a[i] < b[j])             c[k++] = a[i++];         else             c[k++] = b[j++];      }     while (i < lena)         c[k++] = a[i++];     while (j < lenb)         c[k++] = b[j++];      /*     if (a[i])         c[i++]=a[i++];     if (b[j])         c[i++]=b[j++];     */     return k ; } 供参考～ 那为什么我一开始数组a输进去就是错的鸭[/quote]  你没注意到你的冒泡排序越界了吗？ for (i=0; i<n-1; i++) 等你看完了你的代码和修改之后的代码，然后找一下自己的问题～  for (i=0; i<n; i++) 这是你的代码～

引用 1 楼 自信男孩的回复:#include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include <string.h> #include <stddef.h>  void bubble(int a[],int n); int merge(int a[],int lena,int b[],int lenb,int c[]);  int main() {     int *c,n,lena,lenb,m;     int i;      lena=lenb=5;     m=10;     c=(int *)malloc(m * sizeof(int));     int a[5]={2,4,1,6,8};     bubble(a,lena);     printf("数组a的内容是：\n");      for(i = 0; i < 5; i++) {         if (i % 10==0)             printf("\n");         printf("%6d",a[i]);     }     printf("\n");     int b[5]={9,7,3,0,5};      bubble(b,lenb);     printf("数组b的内容是：\n");     for(i = 0; i < 5; i++) {         if (i % 10 == 0)             printf("\n");         printf("%6d", b[i]);     }     printf("\n");      n = merge(a,lena,b,lenb,c);     printf("数组c的内容是：\n");     //for(i = 0; i < 5; i++)     for(i = 0; i < n; i++)     {         if (i%10==0)             printf("\n");         printf("%6d",c[i]);     }     printf("\n");     printf("数组c的长度为%d\n",n); } void bubble(int a[],int n) {     //bool flag=true;     int i,t;     while (n>1) //&& flag)     {         //flag=false;         for (i=0; i<n-1; i++)         {             if (a[i]>a[i+1])             {                 t=a[i];                 a[i]=a[i+1];                 a[i+1]=t;                 //flag=true;             }         }         n--;     } }  int merge(int a[],int lena,int b[],int lenb,int c[]) {      int i=0,j=0, k = 0;     while (i<lena && j<lenb)     {         if (a[i] < b[j])             c[k++] = a[i++];         else             c[k++] = b[j++];      }     while (i < lena)         c[k++] = a[i++];     while (j < lenb)         c[k++] = b[j++];      /*     if (a[i])         c[i++]=a[i++];     if (b[j])         c[i++]=b[j++];     */     return k ; } 供参考～ 那为什么我一开始数组a输进去就是错的鸭


Question: 做一个python程序

引用 2 楼 與蘤舊縐的回复:发哪都一样，最多提供一下思路，又没人会闲的写出来，主要其他论坛人太少 看你自己需求吧，如果只是做个单机版的可以简单一点，甚至可以不分层，做复杂点就按mvc模式分层实现就行了，也不一定需要把所有层都分得清清楚楚 没经验的话就拿张纸画个流程图，一步一步写下去，省的把自己绕晕了 具体函数和方法的问题查文档绝对比来这问快得多 好的，谢谢啦，我知道怎么弄了

小伙子，你发错区域了，这里主要是c语言，带点c++，也许碰的python的，不过概率很低，建议去python板块发帖子


Question: 形式参数和实际参数

引用 2 楼 自信男孩 的回复:可以同名。因为形参属于自定义函数内的参数，而实参是属于调用函数内的。因此相互不影响。 可以使用全局变量，注意若形参定义的名字和全局变量的名字一样，此时形参是内部变量，不影响全局变量，但是使用形参是内部变量，而非全局的。此时是局部变量屏蔽了全局变量～ 因为形参属于自定义函数内的变量

可以同名：1、作用域不一样，不会搞混；2、按参数位置来对应 可以使用合局变量，但是非特殊情况不建议，因为太多全局变量会混乱，就算用全局变量也应该节制，少用。建议想一下为什么针对全局变量会产生其他概念？


Question: 萌新求助  大佬们帮我看看这题我的代码错哪了，为啥比较不了，输出还是原来的顺序。。。

引用 10 楼 SuperDay的回复:好吧，继续努力吧。。。 谢谢，继续加油

好吧，继续努力吧。。。

引用 8 楼 qq_45690740的回复:[quote=引用 7 楼 SuperDay的回复:]楼主怕是有什么误会吧？你这个程序是从小到大排序的 ... 我看错了。。。。。[/quote] 抱歉。。。。。。。。。。

引用 7 楼 SuperDay的回复:楼主怕是有什么误会吧？你这个程序是从小到大排序的 ... 我看错了。。。。。

楼主怕是有什么误会吧？你这个程序是从小到大排序的

引用 1 楼 SuperDay 的回复:输入什么，输出什么，发出来看看

引用 2 楼 @大愚@的回复: codeblock..

你用的是啥测试样本？？？

输入什么，输出什么，发出来看看


Question: 结构数组排序输出问题

自定义sort 排序

引用 4 楼 自信男孩的回复:[quote=引用 3 楼 qq_46029564 的回复:] [quote=引用 2 楼 自信男孩的回复:]可以，用结构体指针，先让指针指向每个结构体，然后排序时改变结构体指针的值就好了。 大佬，求代码，谢谢！！！！[/quote] 代码自己写吧[/quote] 好的，谢谢提示。。。。

引用 3 楼 qq_46029564 的回复:[quote=引用 2 楼 自信男孩的回复:]可以，用结构体指针，先让指针指向每个结构体，然后排序时改变结构体指针的值就好了。 大佬，求代码，谢谢！！！！[/quote] 代码自己写吧

引用 2 楼 自信男孩的回复:可以，用结构体指针，先让指针指向每个结构体，然后排序时改变结构体指针的值就好了。 大佬，求代码，谢谢！！！！


Question: 为什么会报错？error:fuction definition is not allowed here

C语言不支持函数嵌套定义～

引用 2 楼 拉普拉斯妖 的回复:谢谢，不过我想知道为什么会报错 main()是一个函数，不要在函数中定义函数

b*(b-1)才能得到100与100-1乘积，优先级问题 递归函数不要写在main函数里  #include <stdio.h> int sd(int); int main() {     int result,b;     scanf("%d",&b);     result= sd(b);     if(result)     printf("%d与%d-1乘积=%d",b,b,result);     else printf("数值过小");     return 0; } int sd(int b) {     if (b>1)     {         return b*(b - 1);     }     else     {         return 0;     } }

谢谢，不过我想知道为什么会报错

代码写的不错，只是稍微改一下就可以啦！ #include <stdio.h> int sd(int); int main() {  	int ret = sd(100);  	return 0; } int sd(int b) { 	if (b>1) 	{ 		b*b - 1; 		printf("100与100–1的乘积值为%d", b*b - 1); 		return b*b - 1; 	} 	else 	{ 		printf("数值过小"); 		return 0; 	}  } VS2015调试结果


Question: 大神帮帮忙

没有人吗为什么


Question: 这个为什么不允许我输入就直接输出了

引用 1 楼 自信男孩 的回复:#include<stdio.h>  #define N       10  struct entry {     char word[15];     char defination[200]; };  void dictionarySort(struct entry Sort[],int n);  int main (void) {     //int N;     int i,j;     struct entry dictionary[N];     printf("please input the words' number do you want to entry.\n");     for(i=0;i<N;i++)     {         char c=getchar();         while(c!='\n')         {             //dictionary[i].word[j]=getchar();             dictionary[i].word[j]= c;             c = getchar();             j++;         }         dictionary[i].word[j] = 0;   //add '\0'     }     printf("Please input their defination.\n");     for(i=0;i<N;i++)     {         char c=getchar();         while(c!='\n')         {             //dictionary[i].defination[j]=getchar();             dictionary[i].defination[j]= c;             c = getchar();             j++;         }         dictionary[i].defination[j] = 0;    //add '\0'     }     dictionarySort(dictionary,N);      return 0; }  void dictionarySort(struct entry Sort[],int n) {     int i,j,k;     //struct entry temp[N];     struct entry temp;     i=0;     j=0;     for(i=0;i<n;i++)         while(Sort[i].word[j]!='\0')         {             if(Sort[i].word[j]>Sort[i+1].word[j])             {                 temp=Sort[i+1];                 Sort[i+1]=Sort[i];                 Sort[i]=temp;             }             else                 j++;         }     for(i=0;i<N;i++)         printf("%s %s",Sort[i].word,Sort[i].defination); }  供参考～  楼主的问题不止一个，建议对比代码找一下自己的问题。另外，测试一下吧，有问题再提出来～ 现在我可以输入了，只不过排序算法有问题，我再改改。

引用 1 楼 自信男孩的回复:#include<stdio.h>  #define N       10  struct entry {     char word[15];     char defination[200]; };  void dictionarySort(struct entry Sort[],int n);  int main (void) {     //int N;     int i,j;     struct entry dictionary[N];     printf("please input the words' number do you want to entry.\n");     for(i=0;i<N;i++)     {         char c=getchar();         while(c!='\n')         {             //dictionary[i].word[j]=getchar();             dictionary[i].word[j]= c;             c = getchar();             j++;         }         dictionary[i].word[j] = 0;   //add '\0'         i++;     }     printf("Please input their defination.\n");     for(i=0;i<N;i++)     {         char c=getchar();         while(c!='\n')         {             //dictionary[i].defination[j]=getchar();             dictionary[i].defination[j]= c;             c = getchar();             j++;         }         dictionary[i].defination[j] = 0;    //add '\0'         i++;     }     dictionarySort(dictionary,N);      return 0; }  void dictionarySort(struct entry Sort[],int n) {     int i,j,k;     //struct entry temp[N];     struct entry temp;     i=0;     j=0;     for(i=0;i<n;i++)         while(Sort[i].word[j]!='\0')         {             if(Sort[i].word[j]>Sort[i+1].word[j])             {                 temp=Sort[i+1];                 Sort[i+1]=Sort[i];                 Sort[i]=temp;             }             else                 j++;         }     for(i=0;i<N;i++)         printf("%s %s",Sort[i].word,Sort[i].defination); }  供参考～  楼主的问题不止一个，建议对比代码找一下自己的问题。另外，测试一下吧，有问题再提出来～ 感谢


Question: c语言题目没弄明白为什么是0

这是什么软件？也想学习学习

x等于1， y = 0;所以d *y == 0;

0只是一个没意义的输出  出现其他输出也是合理的

引用 2 楼 user-3的回复:题目错  d是double类型  d*y结果是double类型 不能用 %d 输出 谢谢谢谢谢谢谢谢谢谢谢

引用 1 楼 qq_45882285的回复:定义的y是整型，最后y是等于0的。 谢谢谢谢谢谢谢谢谢谢谢

题目错  d是double类型  d*y结果是double类型 不能用 %d 输出

定义的y是整型，最后y是等于0的。


Question: 这个诡异的笑脸是怎么回事

引用 1 楼 自信男孩的回复:#include<stdio.h>  struct data {     char word[5]; }; int main(void) {     int i=0;   struct data mine;     char c;     while((c=getchar())!='\n'&&i<5)     {         mine.word[i]=c;         printf("%c",mine.word[i]);         i++;     }     return 0; } 供参考～  出现笑脸是正常的，因为楼主缺少一个括号，c的取值只会是0,1；应该说只有最后一个是0，前几个输入得到都是1. Thank you


Question: 请大神帮忙看一看

引用 1 楼 user-1 的回复:指针变量就是一个32位的整数，区别于int类型的是，它这个整数是一个地址，而这个地址代表着一个内存的位置，通过星号*来引用到这个内存，而其它情况下，它的表现跟其它类型的变量类似。int *p=0;是将指针变量p初始化到内存0的位置，而这个0地址的内存是系统保留的空间，应用程序不能访问，所以一般用0来表示无效地址。p+6实际上是把p加上24，为什么？因为p是int*类型指针，int一个单位占4个字节，6个单位就是24个字节，因为所以如此。 感谢大大~明白了明白了


Question: C语言指针指向二维数组输出错误，救救孩子吧(´×ω×`)

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

引用 1 楼 寻开心的回复:void Transpose(int *a, int n, int len) {     int i,j;     for(i=0;i<n;i++)     {         for(j=0;j<n;j++)         {             printf("%d ", *(a+i*len+j)); // 不用len参数就把这里写死 *(a + i*10 + j)         }         printf("\n");     } }  mainn函数里面，如下方法调用 Transpose(&stra[0][0],  n, 10）  原因是数组大小实际上是10*10的， 所以第i行第j列第位置。10*i + j，   n只是表示使用了左上角的n*n大小 感谢感谢(❁´ω`❁)


Question: 求大佬解救

用vs2019吧，这种错误vs直接帮你高亮定位所在位置

引用 1 楼 user-2的回复:main后面少了一对括号() 啊，谢谢谢谢，我可能是个傻子

main后面少了一对括号()


Question: if语句判定问题

不成立， 因为这个表达式是从左侧到右侧执行的  第一个if是这样执行的  5 >4 成立，所以结果是1。  1>3 不成立， 所以printf不了  （intA > intB > intC） 不等于 （ intA>intB && intB>intC）


Question: 需要解题思路及代码c语言

4个2进制位，组成0到15这16个数  每一个二进制位对应一个操作符的位置， 1代表加号 ， 0代表减号 0000 表示所有的操作符都是件好，1111表示所有操作符都是加号 1010 表示第一第三操作符是加号，第二第四操作符是减号 穷举所有的可能就好了  类似的，你可以把乘除引入进来，那就要把位数扩大一倍， 8位二进制数，一共256种状态了 不过由于那就要考虑到运算符优先级的问题了，会更复杂一些

就加减两个操作符，总共4个位置， 无非16种情况，一个循环就可以  iint x;     for ( x=0; x<16; x++ )  {        int v = 123; char c1, c2, c3, c4;        c1 = x & 8 ? '+' : '-';        if ( x & 8 )  v +=  45; else v -= 45;        c2 = x & 4 ? '+' : '-';        if ( x &4 )  v += 67; else v -= 67;       c3 = x & 2 ? '+' : '-';        if ( x & 2)  v+= 8; else v -= 8;       c4 = x & 1 ? '+' :  '-';        if ( x & 1)  v+= 9; else v -= 9;        if ( v == 100 ) {           printf("123%c45%c67%c8%c9=100\n", c1, c2, c3, c4);           return 0;        }     }     printf 打印不可能


Question: 指针数组名地址真不是东西

建议编写一些小程序，通过一些调试打印验证你的理论。实践更能加深你的理解，也更能验证你的理解～ 建议多动手～

还可以进一步来说明  用sizeof（一位数组名） 和 sizeof（指针首地址） 去比较      int arry[10], *p = array;   // sizeof(array)   <> sizeof(p)  二维数组那里，也可以用sizeof那几个不同的指针来说明+1， 具体让指针的值增加了多少    int array[5][10]    sizeof(array).             vs. &array + 1                vs.   %p 格式输出 +1 前后的地址对比    sizeof( array[1] ).       vs  &array[1] + 1            vs    sizeof ( array[1][1]).   vs  &array[1][1]+1          vs


Question: 求助谢谢

#include <stdio.h> #include<string.h>  void fun(char str[],char ch) { char *p; int length = strlen(str); int i = length; int j; p = str+length-1; while(p >= str) { i--; if(*p == ch) { if(i == length-1) str[i] = '\0'; else for(j = i;j < length-1;j++) str[j] = str[j+1]; length--; } p--; } str[length] = '\0'; }  int main() { int i; char str[100]={"abcdefghijklnmopqrstuvwxyz1234567890"}; char ch[]={"abcd1234"}; for(i=0; i<strlen(ch); i++) fun(str,ch[i]); printf("删除字符后的字符串:\n%s\n",str); return 0; }

问题太多， 尽量在保持你的代码不变的基础上修改如下： #include<stdio.h> #define N 100 void del(char* p, char* ch)  {     char * s = p;     for(; *p!='\0'; p++) {         char *q = ch;         while(*q!='\0')             if(*p==*q) break; else q++;         if (*q == '\0' ) *s++ = *p;     }     *s='\0'; } int main() {     char a[N]={"abcdefghijklnmopqrstuvwxyz1234567890"};     char ch[]={"abcd1234"};     del(a,ch);     puts(a);     return 0; }


Question: 函数名与函数指针

函数名在汇编里面本身就是指针，调用函数调用的也是指针，所以说（*MyFun）(10)为了方便才MyFun(10)这样写是不合适的 （*MyFun）和MyFun完全是不同的物理意思，


Question: 求回复

抱歉， 没有仔细看题目 那个答案是有问题的，  ^是异或运算符   *的优先级是高于^运算符的 第一次进来。i = 2 * 2 ^2  = 4 ^ 2 = 6.              //  0100 ^ 0010 = 0110 = 6 第二次进来， i = 7* 2 ^7 = 14 ^ 7 =  9             //  1110 ^ 0111 =  1001 = 9  第三次进来。 i = 10 * 2 ^ 10 = 20 ^ 10 = 30    //  10100 ^01010 = 11110 = 30

不懂为什么等于4，我听懂了下面那个

答案解释的很清楚为什么二，不明白就再多读一遍，或者写成代码，自己跑一次   后面的那个题目，记住#define的作用是替换 NUM替换成 2*M+1，  把M替换成N+1，就是 2*N+1+1 = 2*N+2； 再替换N为2， 就是 2*2+2 = 6；  for(I=1; I<=NUM; I++) NUM是6， 所以就是6次循环


Question: 为什么会报错？是编码问题吗？

注意中英文的区别，代码编写需要都是英文的～

逻辑上就存在问题，只要c大于20就会跳出，进不去下面的判断语句。你的程序五处报错，应该是在每次输出的结束括号上，用了中文括号？

中文括号？？？？？？


Question: 求助 c语言 高级分书问题

没错RUC19级 不会大作业的C语言萌新

RUC？？？？

建立一个50*50对数组，用来记录输入的数据 建立一个50长度的状态数组，记录当前状态 dfs深度搜索， 在状态数组当中记录当前状态， 在50*50的记录数组当中搜索下一个匹配的数值（自然形成字典顺序） 典型的深度搜索例子，代码自己写吧


Question: 求大佬，这个该如何打，我一直有错

建议楼主直接贴代码吧～


Question: C语言

就是这个问题，哇 谢谢您。又是这么细小的错误，我会向您说的那样改进的

scanf 需要的是一个地址， 而你传递给它的是数值 for(ii=0;ii<T;ii++)     {         scanf("%d", *(p1+ii));  // p1+ii就是地址了，  再加上*就成为了值了         int *p3=(p1+ii);         for(i=0;i<*(p1+ii);i++)             scanf("%d",*(p2+i)); // 同样的问题         t[ii]=shuru(p3,p2);     }  就算法本身来说，没有必要把数据都读入数组的， 只是找到一个序列里面的最大值，边读边比较就可以了  先把输入的问题解决， 其他的自己先解决， 还有问题再继续贴图吧


Question: 为什么第一个图片里面def还存在，第二个里面ic没有 大神请教一下

a[0]='A' a[1]='B' a[2]='C' a[3]='\0'a[4]='e' a[5]='f '.所以第一个是f，第二题同理，i被e替换了 ，c被\0替换了。

ABC总共是3个字符，strcpy复制了ABC加上一个'\0'，总共4个字符，后面的ef都在


Question: 用C语言编辑

班级里面有9个学生， 每人上五门课 写一个程序用三个函数实现下列功能： 1 计算每门课的平均成绩 2 找到2门以上不及格的所有学生，输出学号，姓名和平均分 3 找到平均分90以上或则会所有课程分数都在85以上的所有学生，输出他们的学号和名字  都是基础功能， 自己写吧， 遇到问题再贴代码提问


Question: c语言新生求指教

#include<stdio.h> int main() {     float x1,y1,x2,y2,x3,y3,x4,y4;     while(scanf("%f%f%f%f%f%f%f%f", &x1, &y1, &x2, &y2, &x3, &y3, &x4, &y4)!=EOF) {         float u1, u2, v1, v2;         u1 = min ( max(x1,x2), max(x3,x4));         v1 = min ( max(y1,y2), max(y3,y4));         u2 = max ( min(x1,x2), min(x3,x4));         v2 = max ( min(y1,y2), min(y3,y4));         if ( u1<u2 || v1<v2 )             printf("0\n");         else             printf("%.2f\n", (u2-u1)*(v2-v1));     }     return 0; }

是只输入8个数字，while循环不合适吧。


Question: 问题

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


Question: 指针应用程序设计——AT指令

引用 1 楼 寻开心的回复:基础的指针操作啊  自己写吧
大佬，来露一手

基础的指针操作啊  自己写吧


Question: 麻烦大神看看为什么这个调用函数会进行不下去呢

引用 6 楼 mr.hman的回复:[quote=引用 5 楼 weixin_46021057 的回复：][quote=引用 4 楼 mr.hman的回复:][quote=引用 3 楼 寻开心 的回复:] while(i<=a){         amount1=amount1+sum1;         sum1=sum1+2*pow(10,i);      } 在循环体里面i也没有变， a也没有变， 你这是闹哪样儿？ 怎么可能退的出循环呢？ 死在这儿了呗明白了 感谢[/quote] 我也是萌新   是不是  ==与=    一个是赋值 一个是等于  这个问题导致的？[/quote]不是呢 这个是需要赋值运算的 程序问题出现在i和a没有变，使得这个循环无限循环出不来，我是漏了i++ [/quote] 学到了  谢谢     加油

引用 5 楼 weixin_46021057 的回复：[quote=引用 4 楼 mr.hman的回复:][quote=引用 3 楼 寻开心 的回复:] while(i<=a){         amount1=amount1+sum1;         sum1=sum1+2*pow(10,i);      } 在循环体里面i也没有变， a也没有变， 你这是闹哪样儿？ 怎么可能退的出循环呢？ 死在这儿了呗明白了 感谢[/quote] 我也是萌新   是不是  ==与=    一个是赋值 一个是等于  这个问题导致的？[/quote]不是呢 这个是需要赋值运算的 程序问题出现在i和a没有变，使得这个循环无限循环出不来，我是漏了i++

引用 4 楼 mr.hman的回复:[quote=引用 3 楼 寻开心 的回复:] while(i<=a){         amount1=amount1+sum1;         sum1=sum1+2*pow(10,i);      } 在循环体里面i也没有变， a也没有变， 你这是闹哪样儿？ 怎么可能退的出循环呢？ 死在这儿了呗明白了 感谢[/quote] 我也是萌新   是不是  ==与=    一个是赋值 一个是等于  这个问题导致的？

你的count函数里面返回值是0

引用 3 楼 寻开心 的回复:while(i<=a){         amount1=amount1+sum1;         sum1=sum1+2*pow(10,i);      } 在循环体里面i也没有变， a也没有变， 你这是闹哪样儿？ 怎么可能退的出循环呢？ 死在这儿了呗明白了 感谢

引用 1 楼 qq_46016136 的回复:你的count函数里面返回值是0 我改成amount1也不行


Question: 求设计思想！！考试用 但是不知道怎么表达谢谢谢

int main() {     int n = 5;     int row = 1, col=0;  // row是行， col是列     for(row=1; row<=n; row++ ) {         for ( col =1; col<row; col++ ) printf(" ") // 每行前面有row-1个空格         for ( ; col<n; col++) printf("%d", col);   //  空格之后的字符是正序从row-1到n         for ( ; col>=row; col--) printf("%d", col); // 逆序，从n-1到row         printf("\n");     };  return 0;  } 10 12345678910987654321  // row=1 col从1到10再从10到1  234567891098765432     // row=2 col从2到10再从10到2   3456789109876543        // row=3 col从3到10再从10到3    45678910987654     567891098765      6789109876       78910987        891098         9109          10


Question: 用指针来处理这道题


Question: 只能输出一种情况

建议直接贴代码吧～

哪有VC2019这个称呼，只有VS20xx  引用 1 楼 遇见女神 的回复:n=n/10  另外建议使用vc2019

n=n/10  另外建议使用vc2019

引用 4 楼 ccccslt 的回复：[quote=引用 1 楼 遇见女神的回复:]n=n/10  另外建议使用vc2019 主要是刚学，都统一用的这个，还是谢谢了[/quote]老师规定统一用这个？

引用 1 楼 遇见女神的回复:n=n/10  另外建议使用vc2019 主要是刚学，都统一用的这个，还是谢谢了

引用 1 楼 遇见女神的回复:n=n/10  另外建议使用vc2019 谢谢，不仔细还是很谢谢了


Question: 珠玑妙算


Question: 本人c语言小白，不明白第二个数组为什么总是多输出一个2，求各位大佬赐教。

因为2还在s数组中。 第一次输出前，s数组内容是112； 第二次输出前，s数组内容是352。

补充题目要求


Question: 求指导一下c语言中的指针

因为数组是个连续的内存空间知道数组的首地址就知道数组中其他元素了，指针现在只想数组首地址只要移动指针就可以访问数组中其他元素，就好像小明，小红，小刚是一家人，他们三个就构成了数组，指针不就是地址吗，如果你知道小明家的地址了那还不能找到其他两个人吗？？？嘻嘻我说这样理解的希望对你有帮助

数组其实也算是指针，数组也表示地址； p=a -->相当于p指向a[0] ，对*(p + i)来说就是向后指移i位； 上面大神解释很清楚，我也小白来讨论下

这个问题和指针倒是没什么关系，主要涉及到的是数组

你说的没错， p = a; 确实是把数组a的首地址赋值给了指针p，但是需要注意的是不是a[0]，而是&a[0]才表示数组的首地址。 用VS2015调试，你可以看到a（即数组a的首地址）和p的值。  从上图可以看到，a的首地址给了指针变量p 但是，*(p + i)的含义是将p的值即0x00d8f9b0进行相应的位移，此时每次移动4个字节，得到的是 0x00d8f9b4、0x00d8f9b8、0x00d8f9bc和0x00d8f9c0,分别是1、2、3、4  对于为什么每次移动4个字节，请参考《C++中对数组名的运算》 希望能够帮到你

其实这些运算规则，书上都有说明。多翻几页书就可以看到了。


Question: C语言指针


Question: 猴子选大王 想知道我的代码哪里错了

for (i=1;i<=N;i++)//计数还有几个猴子存在         {             if (a[i]==0) count++; // 第一次count++后，count就是1，满足了下面的那一行  if (count==1) n=0;  // 只要a当中有一个0， 这个条件就因上一行的情况而必然成立         }  应该把if（count==1） n=0； 这句放到这个for循环的外面


Question: c语言：如何将下列代码改成按二进制方式读写的

引用 1 楼 非弋 的回复：你想表达的是：需要以二级制的方式读取文件内容？ FILE *fp = fopen("1.txt","rb");多谢了，我以为还要使用fread 那些的呢

引用 1 楼 非弋 的回复：你想表达的是：需要以二级制的方式读取文件内容？ FILE *fp = fopen("1.txt","rb");这样就行了吗？


Question: 这个程序在主函数向自定义函数导入结构体字符串的时候该怎么写

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

请看源码 ...


Question: 输入一个动物名称并输出数量，没有就输出“0”。我的程序哪里有错吗？

==1？用true不好吗。你代码还会重复输出数量为0

两个字符串内容一样时，strcmp返回值为0


Question: 如何清除许多个圆形中的特定一个


Question: 关于用二级指针和动态分配内存的方法解决冒泡排序字符串的问题


Question: 求大佬，链表指针为null的问题

谢谢，已经解决了，其实还有一个问题，就是在输入中每次更新了n，而在第二个循环里，n是链表尾的n。应该在输入时把n放进每个节点里，以方便访问

#include<stdio.h> #include<string.h> #include<stdlib.h>  int n; struct num{     struct num *p;     int a[]; };  struct num k; int ok(struct num *);  int main() {     int t;     scanf("%d",&t);     struct num *beg,*pr, *pre;     //beg=&k;pr=&k;     for(int i=0;i<t;i++){         scanf("%d",&n);         if(i==0) {             pr=(struct num *)malloc(sizeof(struct num)+n*n*sizeof(int));             beg = pr;         }         else{             pr->p=(struct num *)malloc(sizeof(struct num)+n*n*sizeof(int));             pr=pr->p;         }         for(int i=0;i<n;i++)             for(int j=0;j<n;j++){                 scanf("%d",&pr->a[i*n+j]);                 getchar();             }     }     pr->p=NULL;     //int i;     for(pr=beg;pr;){         if(ok(pr)){             puts("YES");         }         else{             puts("NO");             //free(pr->a);         }         pre = pr;         pr = pr->p;         free(pre);     }     return 0; } int ok(struct num *pr) {     int y=1;     for(int i=1;i<n;i++)         for(int j=0;j<i;j++)             if(pr->a[i*n+j]!=0) {                 y=0;                 break;             }     if(y)         return 1;     else         return 0; } 供参考～  beg其实并没有指向链表的头，而是指向了k。因此在最后的循环里，pr指向beg会导致段错误；

引用 5 楼 章泽琨的回复:[quote=引用 4 楼 章泽琨的回复:]我把 pr=&k;         删除，这样pr就为num结构开辟了储存空间 但这个pr是指向k的吗？ 已测试，仍然是这样 编译时有一条警告，说在pr=pr->p中pr没有初始化，  好了，我知道啦，要用beg指向pr开辟的空间 在这里面结构变量k没用上[/quote] 这里面free也有点问题，清除的是上一个节点的空间，而不是a。在运行时，只有第一次完全正确，后面几次内存访问出了问题，要用另一个指针做删除

引用 4 楼 章泽琨的回复:我把 pr=&k;         删除，这样pr就为num结构开辟了储存空间 但这个pr是指向k的吗？ 已测试，仍然是这样 编译时有一条警告，说在pr=pr->p中pr没有初始化，  好了，我知道啦，要用beg指向pr开辟的空间 在这里面结构变量k没用上

我觉得问题是不是这样的：  struct num *beg, *pr; beg=&k;      // beg是k的地址 pr=&k;         .... if(i==0){ pr = (struct num *)malloc(sizeof(struct num)+n*n*sizeof(int));   // pr重新开空间，不再指向k的地址，现在的pr才是链表头 }

引用 1 楼 非弋 的回复:pr->p=NULL;        // pr->p为NULL int i; for(pr=beg; pr; pr=pr->p){      // 执行一次后， pr = pr->p,  pr = NULL 	if(ok(pr)){ 		puts("YES"); 		free(pr->a); 	} 	else{ 		puts("NO"); 		free(pr->a); 	} }  可是我把pr指向头指针了啊，pr->p=NULL;这一步是链表尾为null


Question: if语句问题

引用 3 楼 @大愚@的回复:在C语言中0表示假非零为真，你的if语句1 % 2 一直都等于1都为真一直都会执行if语句而且你的else，只能控制continue不能控制打印#号的语句所以你循环多少次就有几个* # 哦，我打错了，应该是i%2的

提示 1%2 =1

if 一%二?????


Question: php

发错地方了？自己去百度一下吧


Question: 一个成绩管理系统界面，但我不知道错误在哪

谁能帮忙修改一下么


Question: CreateFont如何设置可使文字边缘的虚影消失？

引用 1 楼 user-1 的回复:fdwQuality 参数试试 NONANTIALIASED_QUALITY 无抗锯齿模式看看 给力！ 我把倒数3、4、5三个参数的所有值的组合测试了一遍，只有NONANTIALIASED_QUALITY可以消除虚影


Question: 杨辉三角


Question: c语言


Question: 软件使用问题

网上找一个密钥就可以了


Question: 求大佬帮忙看看，为什么输出和输入的顺序是一样的，大小并没有发生变化

1、没有必要定义两个swap函数， 2、没有必要定义变量P1,P2,P3,直接使用&a,&b,&c做为参数。 3、按你的理解调用swap1(p1,p2);

噢噢，调用用函数要怎么操作。。

这个只是声明函数，并不是调用函数


Question: 一个oj上字母转化为数字的C语言题

引用 1 楼 早打大打打核战争的回复: #include <stdio.h>  int main() {   char c, x[] = "01230120022455012623010202";   int t, p = 0;    scanf("%d\n", &t);   while (~(c = getchar()))     c > 64 && c < 91 ? (c = x[c - 65] - 48) ? c - p ?        putchar((p = c) + 48) : 0 : p = 0 : putchar(c);    return 0; }  没看懂大神写的代码，


Question: 求问c语言怎么设计服务端

ddddddd


Question: 再次问个问题。

第一个空就应该是sum =  *p-'0' 初始化成为第一个数 或者sum=str[0]-'0'


Question: C语言图像处理转置和统计灰度值

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


Question: 求详细步骤


Question: C语言 i！=j！=k有什么错误

问题本身不成立

没有任何错误

没有为什么，这是C语言语法定义成这样的。规定就是这样的。  可以写成：  i != j && i != k

肯定不对啊，（i!=j）的值为true或者false，转化int也就是1或0，也就是你用1或0和k相比肯定会有一定的问题

c!=j!=k  没有语法错误，但是执行的顺序是这样的 按照c语言规则会如何执行，首先 j!=k  结果是0或者1，放到一个临时变量里面 再执行   c!= 刚才的临时变量 这和你要的本意就完全不同了  语法没错，算法不对


Question: c语言 这个输出得什么啊

这个程序就是把大写字母改成小写，其他正常输出～


Question: 电脑应用数据根文件夹在哪里

引用 2 楼 qq_45880332的回复:[quote=引用 1 楼 user-2的回复:]楼主有没听说过系统注册表吗？ 那该修改哪个，不改乱改[/quote] 那该修改哪个啊，，，，，，我怕搞错了

引用 1 楼 user-2的回复:楼主有没听说过系统注册表吗？ 那该修改哪个，不改乱改

楼主有没听说过系统注册表吗？


Question: 猜数游戏


Question: 程序不报错，可以输入，但不能运行出来

引用 2 楼 ²⁰¹⁹₀₉.₀₁清梦 的回复:少& 真是看不懂typedef struct 后面还跟个英文 不要少见多怪。这样定义没问题，建议多学一些“新的”用法。  没看到哪里少&

少& 真是看不懂typedef struct 后面还跟个英文

if (k != i)这个语句块放到第二层循环外，第一层循环内。试一下～  注意是把if (k != i)这个语句块都放到第二层的循环外，你把它放到第二层循环里了。


Question: 学生成绩系统读取功能无法正常读取

引用 1 楼 自信男孩 的回复: 太感谢了  可以请问以下是哪出错了吗  我对比了一下还是看不太出来

#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> //#include <windows.h> #define MAX_COUNT 100  typedef struct {     char num[20];//学号     char name[20];//姓名     float score_yuwen;//语文成绩     float score_shuxue;//数学成绩     float score_yingyu;//英语成绩     float score_wuli;//物理成绩     float score_huaxue;//化学成绩 } Student;  Student stu[MAX_COUNT]; int total=0;  void clear_enter() { //清理回车     char mistake[20];     gets(mistake); }  void return_menu() {     printf("按回车键返回主菜单...\n");     clear_enter(); }  void add_Student() { //录入学生信息     int i;     printf("请输入学生成绩信息：\n");     printf("学号  姓名  语文  数学  英语  物理  化学\n");     scanf("%s%s%f%f%f%f%f",stu[total].num,stu[total].name,&stu[total].score_yuwen,&stu[total].score_shuxue,&stu[total].score_yingyu,&stu[total].score_wuli,&stu[total].score_huaxue);     //clear_enter();   //这次不需要清楚回车呢     printf("学生成绩信息录入中...\n");     //sleep(1);     printf("学生成绩信息已录入\n");     total++; }  void show_student() { //展示查看学生信息     int i;     printf("学号  姓名  语文  数学  英语  物理  化学\n");     for(i=0; i<total; i++)     {         printf("%s  %s  %.f  %.f  %.f  %.f  %.f\n",stu[i].num,stu[i].name,stu[i].score_yuwen,stu[i].score_shuxue,stu[i].score_yingyu,stu[i].score_wuli,stu[i].score_huaxue);     } }  void search_name() { //根据姓名查找学生成绩信息     int i;     char name[20];     system("cls");     printf("请输入要查询的学生的姓名:");     //scanf("%s",&name);     scanf("%s", name);     for(i=0; i<total; i++)     {         if(strcmp(name,stu[i].name)==0)         {             printf("学号；%s\n",stu[i].num);             printf("姓名；%s\n",stu[i].name);             printf("语文；%.f\n",stu[i].score_yuwen);             printf("数学；%.f\n",stu[i].score_shuxue);             printf("物理；%.f\n",stu[i].score_wuli);             printf("化学；%.f\n",stu[i].score_huaxue);         } else             printf("学生姓名不存在...\n");         //clear_enter();    //这里哪有回车呢？     } }  void search_num() { //根据学号查找学生成绩信息     char num[20];     int j;     system("cls");     printf("请输入要查询的学生的学号：");     //scanf("%s",&num);     scanf("%s", num);     for(j=0; j<total; j++)     {         if(strcmp(num,stu[j].num)==0)         {             printf("学号；%s\n",stu[j].num);             printf("姓名；%s\n",stu[j].name);             printf("语文；%.f\n",stu[j].score_yuwen);             printf("数学；%.f\n",stu[j].score_shuxue);             printf("英语：%.f\n",stu[j].score_yingyu);             printf("物理；%.f\n",stu[j].score_wuli);             printf("化学；%.f\n",stu[j].score_huaxue);         }         else         {             printf("学生学号不存在：\n");         }     }     //clear_enter();   //这里也不需要清楚，如果是遇到gets或scanf("%c", &xx);的时候在考虑清除回车 }  void search_student() {     int i;     system("cls");     printf("1按姓名查找：\n");     printf("2按学号查找: \n");     scanf("%d",&i);     switch(i)     {         case 1: {                     search_name();                     break;                 }         case 2: {                     search_num();                     break;                 }     } }  void change_student() {     int i;     printf("输入要修改信息的学生学号：\n");     char num[20];     //scanf("%s",&num);     scanf("%s", num);     for(i=0; i<total; i++)         if(strcmp(num,stu[i].num)==0) {             while(i<total) {                 stu[i]=stu[i+1];                 i++;             }             total-=1;         }     printf("请输入新的学生成绩信息：\n");     printf("学号  姓名  语文  数学  英语  物理  化学\n");     scanf("%s%s%f%f%f%f%f",stu[total].num,stu[total].name,&stu[total].score_yuwen,&stu[total].score_shuxue,&stu[total].score_yingyu,&stu[total].score_wuli,&stu[total].score_huaxue);     //clear_enter();     printf("学生成绩信息修改中...\n");     //sleep(1);     printf("修改成功\n");     total++;  }  void del_student() { //根据学号删除学生成绩信息     int i;     printf("输入要删除信息的学生学号：\n");     char num[20];     //scanf("%s",&num);     scanf("%s", num);     for(i=0; i<total; i++)         if(strcmp(num,stu[i].num)==0) {             while(i<total) {                 stu[i]=stu[i+1];                 i++;             }             total-=1;         }     clear_enter();     printf("学生成绩正在删除\n");    // sleep(1);     printf("学生成绩已删除\n"); }  void num_sort() { //按学生学号进行排序     int i,j;     Student stu_temp;     for(i=0; i<total; i++)     {         for(j=0; j<total-1-i; j++)         {             if(stu[j].num>stu[j+1].num)             {                 stu_temp=stu[j];                 stu[j]=stu[j+1];                 stu[j+1]=stu_temp;             }         }     }     printf("排序后的结果：\n");     printf("学号  姓名  语文  数学  英语  物理  化学\n");     for(i=0; i<total; i++)     {         printf("%s  %s  %.f  %.f  %.f  %.f  %.f\n",stu[i].num,stu[i].name,stu[i].score_yuwen,stu[i].score_shuxue,stu[i].score_yingyu,stu[i].score_wuli,stu[i].score_huaxue);     } }  void save_student() {     system("cls");     int i,n;     FILE *fp;     if ((fp = fopen("chengji.txt", "wb")) == NULL)     {         printf("无法打开学生信息文件！\n");         exit(1);     }     printf("\n正在保存...\n");     fprintf(fp, "%d",total);     fprintf(fp, "\r\n");     for (i = 0; i <total; i++)     {         fprintf(fp, "%s %s %.f %.f %.f %.f %.f",stu[i].num,stu[i].name,stu[i].score_yuwen,stu[i].score_shuxue,stu[i].score_yingyu,stu[i].score_wuli,stu[i].score_huaxue);         fprintf(fp, "\r\n");     }     fclose(fp);     //Sleep(1);     system("cls");     printf("*****保存成功*****\n"); }  int load_student() {     int i;     FILE *fp;     system("cls");     if ((fp = fopen("chengji.txt", "rb")) ==NULL)     {         printf("无法打开学生信息文件!\n");         exit(1);     }     fscanf(fp, "%d", &total);     for (i = 0; i <total; i++)     {         //fscanf(fp, "%s %s %.1f %.1f %.1f %.1f %.1f", stu[i].num,stu[i].name,stu[i].score_yuwen,stu[i].score_shuxue,stu[i].score_yingyu,stu[i].score_wuli,stu[i].score_huaxue);         fscanf(fp, "%s %s %f %f %f %f %f\r\n", stu[i].num, stu[i].name, &stu[i].score_yuwen, &stu[i].score_shuxue, &stu[i].score_yingyu, &stu[i].score_wuli, &stu[i].score_huaxue);     }     fclose(fp);     system("cls");     printf("成功加载学生信息到内存中!\n");     //return;     return 0; }  void menu() {     system("color b9");     printf("-------------学生成绩管理系统-------------\n");     printf("            1.增加学生成绩信息            \n");     printf("            2.查看学生成绩信息            \n");     printf("            3.修改学生成绩信息            \n");     printf("            4.删除学生成绩信息       \n");     printf("            5.查找学生成绩信息            \n");     printf("            6.对学生信息进行排序            \n");     printf("            7.保存学生信息为文件            \n");     printf("            8.从文件中读取学生信息            \n");     printf("            9.退出系统            \n");     printf("                                  \n");     printf("请输入您的选择[1-9]并按回车");     return; }  int main() {     char tmp[20];     while(1) {         system("cls");         menu();         int sel;         scanf("%d",&sel);         gets(tmp);         switch(sel) {             case 1:                 {                     add_Student();                     break;                 }             case 2:                 {                     show_student();                     break;                 }             case 3:                 {                     change_student();                     break;                 }             case 4:                 {                     del_student();                     break;                 }             case 5:                 {                     search_student();                     break;                 }             case 6:                 {                     num_sort();                     break;                 }             case 7:                 {                     save_student();                     break;                 }             case 8:                 {                     load_student();                     break;                 }             case 9:                 {                     printf("退出系统");                     exit(0);                 }         }         printf("按任意键回车继续...\n");         gets(tmp);     }     return 0; } 供参考～  测试一下试试～

引用 3 楼 自信男孩 的回复:[quote=引用 2 楼 kuangyehuanghua 的回复:] [quote=引用 1 楼 自信男孩 的回复:] 太感谢了  可以请问以下是哪出错了吗  我对比了一下还是看不太出来 [/quote] 那就仔细对比一下～[/quote]找到原因了%f输入时不能指定精度，另外忘加地址符了哈哈~谢谢大佬！！

引用 2 楼 kuangyehuanghua 的回复:[quote=引用 1 楼 自信男孩 的回复:] 太感谢了  可以请问以下是哪出错了吗  我对比了一下还是看不太出来 [/quote] 那就仔细对比一下～


Question: 求大佬帮忙看看错误

函数调用和函数生命，已经函数定义的区别，建议楼主找一下； swap函数用一个就好了，另一个删除掉或注释掉～

引用 2 楼 ²⁰¹⁹₀₉.₀₁清梦的回复:[quote=引用 1 楼 ²⁰¹⁹₀₉.₀₁清梦的回复:]未定义函数，要么定义函数，要么把你写的函数都放到main函数前面。 还有，swap写一个函数就够了，不能重复同个函数[/quote] 怎么写。。。。。

引用 1 楼 ²⁰¹⁹₀₉.₀₁清梦的回复:未定义函数，要么定义函数，要么把你写的函数都放到main函数前面。 还有，swap写一个函数就够了，不能重复同个函数

未定义函数，要么定义函数，要么把你写的函数都放到main函数前面。


Question: 求大神帮帮忙，救救孩子吧

我觉得这个要实现起来比较复杂，可能需要调用getchar获取每个字符，能过判断空格来判断输入了多少个数字，再进行换行处理，但是这种情况下得到的就是数字字符串，需要自己把数字字符串转换成数字。  可能还有更好的方法。

引用 1 楼 user-4的回复:设置一个计数值，到6就输出一个换行 我也这么想，但就是具体不太会操作

引用 2 楼 青衫鸽子全的回复:C语法有点忘了，你这里逻辑有点问题。i<5不是i<=5 ，j也是一样地址就不对 C语法有点忘了，你这里逻辑有点问题。i<5不是i<=5 ，j也是一样地址就不对[/quote] 哦哦，好的，谢谢，是有点问题

C语法有点忘了，你这里逻辑有点问题。i<5不是i<=5 ，j也是一样地址就不对

设置一个计数值，到6就输出一个换行


Question: C语言文件题矩阵相加--有大佬会嘛，救救孩子！

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

好嘞！解决了，非常感谢～ 不过还有个问题，那个fgets要怎么用呀？不能把文件的东西读出到数组？我用的时候它一直报错，文件和数组好像说类型不一样？然后我是用循环fscanf做的，感觉有点麻烦

不会文件读写看书去 算法本身没有什么， 头两个数做乘法 ，例子3*2， 就知道了剩下两个矩阵都是6个数 把他们读到两个数组（长度为3*2，一维的就可以，无需做成二维的） 里面， 分别命名为A【】，B【】 做个循环，把A[i]+B[i]计算出来并写到新的文件里面就好了  根本就不用管矩阵是3*2，还是2*3， 还是6*1， 无论哪种情况， 对结果都没有影响  代码自己写，不对再贴图


Question: 求助！我写的代码有什么不对

#include<stdio.h> #include<string.h> /*键盘中输入一个数表示要输入的行政区域的个数,再根据个数输入相应的数据   如   4   武汉 027   宜昌 0717   北京 010   上海 021   则输出结果为   武汉-027#宜昌-0717#北京-010#上海-020   */ int main() { #if 1     //long long int i;     //long long int j=0;//j用于储存回车的个数     int i, j;     int ch, num;     char s[1024];     //输入     scanf("%d", &num);     getchar(); //for '\n'      i = j = 0;     while(j < num)     {         ch = getchar();          if(ch == '\n')             j++;         s[i++] = ch;     }      for(j = 0; j < i-1;  j++)     {         if(s[j]==' ')             printf("-");         else if (s[j]=='\n')             printf("#");         else             printf("%c",s[j]);     }     putchar(s[j]); #else      char city[16];     char no[16];     char dst[128];     int i;     int num, len, pos;      scanf("%d", &num);      i = 0;     len = pos = 0;     while (i < num) {         scanf("%s %s", city, no);         if (pos)             snprintf(dst+pos, 128-pos, "#%s-%s", city, no);         else             snprintf(dst+pos, 128-pos, "%s-%s", city, no);         len = strlen(dst+pos);         pos += len;         i++;     }     puts(dst); #endif     return 0; } 字符数组没有'\0'怎么能成为字符串，又怎么能用strlen。提示的越界是指字符数组越界了，而非i, j越界～

#include<stdio.h> #include<string.h> /*键盘中输入一个数表示要输入的行政区域的个数,再根据个数输入相应的数据   如   4   武汉 027   宜昌 0717   北京 010   上海 021   则输出结果为   武汉-027#宜昌-0717#北京-010#上海-020   */ int main() {/*     long long int i;     long long int j=0;//j用于储存回车的个数     char ch;     char s[1024];     //输入     scanf("%lld",&i);     i=0;     while(j!=5)     {         ch=getchar();         s[i++]=ch;         if(ch=='\n')  j++;     }     for(i=1; i<strlen(s)-1; i++)     {         if(s[i]==' ')  printf("-");         else if (s[i]=='\n')  printf("#");         else printf("%c",s[i]);     }     */      char city[16];     char no[16];     char dst[128];     int i;     int num, len, pos;      scanf("%d", &num);      i = 0;     len = pos = 0;     while (i < num) {         scanf("%s %s", city, no);         if (pos)             snprintf(dst+pos, 128-pos, "#%s-%s", city, no);         else             snprintf(dst+pos, 128-pos, "%s-%s", city, no);         len = strlen(dst+pos);         pos += len;         i++;     }     puts(dst);      return 0; } 供参考～   越界不是i, j的问题，而是

谢谢大佬指点，谢谢大佬


Question: 这个编程怎么写，＋解释，关于C语言的

作业自己做 讨论编程是兴趣 代写作业是生意 要找枪手 请交钱


Question: 小白求解问题

所以指针变量不是地址咯 多简单

引用 4 楼 qq_46001652 的回复:[quote=引用 2 楼 user-2的回复:]指针变量指的是这个变量分配的内存中保存的是个地址，本身他也是个变量，当然可以赋值了 假如 int *p=0; p分配在了  0x400004 那这个地址中保存的就是0,p=XXXX,就相当于0x400004这个地址保存了XXXX,*p就相当于*(XXXX)读取XXXX地址的值 赋值后是不是就失去变量m的地址了呢大佬。[/quote] 那当然了，重新赋值就改变了他的内容了

引用 2 楼 user-2的回复:指针变量指的是这个变量分配的内存中保存的是个地址，本身他也是个变量，当然可以赋值了 假如 int *p=0; p分配在了  0x400004 那这个地址中保存的就是0,p=XXXX,就相当于0x400004这个地址保存了XXXX,*p就相当于*(XXXX)读取XXXX地址的值 赋值后是不是就失去变量m的地址了呢大佬。

引用 2 楼 user-2的回复:指针变量指的是这个变量分配的内存中保存的是个地址，本身他也是个变量，当然可以赋值了 假如 int *p=0; p分配在了  0x400004 那这个地址中保存的就是0,p=XXXX,就相当于0x400004这个地址保存了XXXX,*p就相当于*(XXXX)读取XXXX地址的值 那么int *p=&a,就是相当于把变量a的地址存到指针p的地址里面嘛，赋值的情况下就是相当于这个指针p没有指向别的变量，还是保持指向自己的内存空间嘛。

引用 楼主 qq_46001652的回复:指针变量本身不是内存地址嘛，为什么可以赋值？ 前面的代码 #include<stdio.h> int *fun(int *p, int *q); int main() {


Question: 求大佬帮帮忙

int main(){     int d,i,j,n,x1,y1,x2,y2,a[100][100];     int sum=0;     for(i=0;i<100;++i){         for(j=0;j<100;++j)             a[i][j]=0;     }     scanf("%d",&n);     for(d=0;d<n;++d){         scanf("%d %d %d %d",&x1,&y1,&x2,&y2);         for(i=x1;i<x2;++i){             for(j=y1;j<y2;++j)                 a[i][j] = 1;         }     }     for(i=0;i<100;++i){         for (j=0;j<100; ++j) {             sum += a[i][j];         }     }     printf("%d",sum);     return 0; }


Question: 提问，，


Question: 程序运行无结果，求指教

for(i=0;a[i]!='#';i++)  { scanf("%c",&a[i]); n++;  }  这个也不对， 每次循环之后，都是i++之后，再来判断a【ℹ】 ！= ‘#’ 这句永远也没有达到， 因为上轮刚输入了的是a[i-1]

引用 1 楼 寻开心 的回复：for(j=0;j<n;j++)  { if(a[j]>='0'&&a[j]<='9') { r[a[j]-'0']++; }  }  这样改还是不行哦


Question: C语言

引用 1 楼 user-1的回复:用scanf输入，选择判断一下，计算输出结果就行，先动手写一下哦 求大神解答如何度过C语言考试

用scanf输入，选择判断一下，计算输出结果就行，先动手写一下哦


Question:
实训作业找帮忙啊！   信息统计功能模块
  (可以按平均成绩及格或不及格统计学生人数(共20人)，计算出所占比例，并输出统计报表。

救救孩子啊                    啊啊啊

红圈内的地方是贴代码的

引用 楼主 hj18475180938的回复:实训作业   信息统计功能模块   (可以按平均成绩及格或不及格统计学生人数(共20人)，计算出所占比例，并输出统计报表。 怎么贴图？我自己写的还没贴。。


Question: 从键盘上输入两个正整型数据，求这两个整数的最大公约数和最小公倍数。 要求 设计一个函数来同时实现求两个数的最大公约数和最小公倍数，主函数中调用该函数， 然后输出

引用 3 楼 qq_40791730 的回复:[quote=引用 1 楼 datoulaile123的回复:]int f(int m, int n) { 	int t; 	int s; 	s = m*n; 	do 	{ 		t = m%n; 		m = n; 		n = t; 	} while (t > 0); 	printf("%d %d", m, s / m); 	return 0; } 这样试试看呢，直接while循环t，而t没有被初始化 你好，我想问一下，比如输入的数是120和1000，取余不是小于0吗，这样为什么不会陷入循环？[/quote] 不明白什么叫做陷入循环，而且取余要么等于0要么大于0，大于0就继续循环，等于0就结束循环，你要是输入120和1000，那必定会进入下一次循环啊

引用 1 楼 datoulaile123的回复:int f(int m, int n) { 	int t; 	int s; 	s = m*n; 	do 	{ 		t = m%n; 		m = n; 		n = t; 	} while (t > 0); 	printf("%d %d", m, s / m); 	return 0; } 这样试试看呢，直接while循环t，而t没有被初始化 你好，我想问一下，比如输入的数是120和1000，取余不是小于0吗，这样为什么不会陷入循环？

t没有初始化，在是随机数


Question: 在界面的边界换行，指定的列换行，考虑到整个单词的完整性，或者指定的列前没有空白。尽可能考虑多的情况，参考word的换行。

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


Question: 加密


Question: 帮忙看一下简单的c程序

void strmcpy(char *s, char *t, int m) {     char *p = s;     t += m;     while (*t != 0)     {       *p++ = *t++;     }     *p = 0;     printf(s); }


Question: 使用链表实现功能


Question: unresolved external symbol "void __cdecl input(int *)" (?input@@YAXPAH@Z)

input这些函数放前面


Question: 哈夫曼编码函数程序调用不起来，求大佬指点

滴滴，没人吗？三天了，都没人说话


Question: 请教 *,(int char) 指针的 用法已经注意事项. 以及传参; 请大佬讲讲,

请参考C++中《strlen与sizeof处理字符数组和字符指针》 《C++中指针的数组和数组的指针》 《C++中字符数组》 《C++中的指针数组与数组指针》 希望能够帮到你！

str1 指向一个字符串常量， 这个字符串常量占据了5个字符，4个a一个0； 字符串常量的内容是不可改变的 str2是一个数组， 它就占据了10个字节， 无论你给予它什么内容，他就是占据10个字节的空间 str3是一个指针，它指向了str2【5】的位置

char *str1 = "aaaa";   // sizeof(str1) = 8 它就是一个指针的大小， str指向的内容没有关系                                  // 32位系统下，这个是4； 64位系统下是8  char str2[10] = "bbb"; // sizeof（str2） 它是10， 就是数组的大小和赋予的值没有关系  char * str3 =  str2 + 5; // 也是8， 同样是指针的大小，和内容没有关系  sizeof（int*） 同样是8，还是因为它是指针  sizeof（“abc” ） 这个东西是4， 因为三个字符加一个0结尾


Question: 在Github上提交了一个数独计算程序，欢迎大家下载测试


Question: 这题咋写

看来要根据运算符号的不同，选择运算结果的类型 乘法结果放到 unsigned long里面，单独输出 加和除法和减法用long就可以了，因为题目说了都是正整数，那就可以排除除法当中除数是0的情况，放心用

这个破题目貌似有问题 ，两个 unsigned int的四则运算是会超出long int的范围的，只能用  unsigned long， 那样减法又不对 用 long long，很多编译器又不支持 long long  可以不去考虑这个东西，就当 long可以容纳得下吧。  %u%c%u的格式输入a，c和b, %u保证是 无符号的 整数 然后根据c是什么字符运算就是了， 运算结果用 long int 类型来存储 和输出


Question: 求助数据结构大神

参考博客： https://blog.csdn.net/user-2/article/details/99734501


Question: C语言求助  为什么第43行sort（a）后面的代码不执行？

引用 2 楼 自信男孩 的回复:#include<stdio.h> #include<string.h>  #define N 3  struct stu{     int num;     char name[20];     char sex;     float Cscore;     float Mscore;     float Escore;     float ave; //}a[N-1],*pstu; }a[N],*pstu;  struct stu input() {     struct stu u;     scanf("%d %s %c %f %f %f",&u.num,u.name,&u.sex,&u.Cscore,&u.Mscore,&u.Escore);     u.ave=(u.Cscore+u.Mscore+u.Escore)/3.0;     return u; } struct stu output() {     printf("%10d %10s %3c %6.2f %6.2f %6.2f\n",(*pstu).num,(*pstu).name,(*pstu).sex,(*pstu).Cscore,(*pstu).Mscore,(*pstu).Escore,(*pstu).ave); } void swap(struct stu *b,struct stu *c){     struct stu t;     t=*b;*b=*c;*c=t; } void sort(struct stu b[]){     int i,j;     for(i=0;i<N;i++)         //for(j=i+1;i<N;j++)   //这里的判断应该是j < N吧         for(j=i+1;j<N;j++)             if(b[i].ave<b[j].ave) swap(b+i,b+j); } int main() {     int i,n;     for(i=0;i<N;i++)   //越界了，这里应该i < N -1;,要么把a的长度定义成N     {         a[i]=input();     }     printf("--------------------\n");     for(i=0;i<N;i++){         pstu=&a[i];         output();     }     sort(a);     for(i=0;i<N;i++){         pstu=&a[i];         output();     } } 供参考～  按照上面的改一下再试一下～我这个N是录入的人数，咱们方法不一样但都是对的，错误在我把36行的j<N打错成 i<N了，感谢指正！

这里sort应该接收两个参数，sort(a,a+SIZE);