Question: 指针变量与一维数组

最后输出应该是*p，p是指针，里面是a[2]的地址，而*p是指向了a[2]的内存空间，也就是值。

printf（“%d”，*p） 应该是*p吧。这样是输出a[2]的值。

int  a[4], * p; 	a[2] = 89539;		//对a[2赋值] 	p = &a[2];			//取a[2]这个元素的地址赋给指针p 	printf("%d", p);	//将指针p中所存地址以整数方式输出 	//最后输出的其实是a[2]的地址，而非a[2]的值


Question: 无向连通图生成树问题

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

引用 3 楼 user-2的回复:用较少的一层连接更多的结点，我是这样想的，你给一下反例，我看我还能不能想一下 我发现原题了 这解答有点🐮🍺看不懂

引用 3 楼 user-2的回复:用较少的一层连接更多的结点，我是这样想的，你给一下反例，我看我还能不能想一下 我用#CSDN#这个app发现了有技术含量的博客，小伙伴们求同去《GOOGLE的一道笔试题—求给定连通无环无向图可以生成的最小高度树》, 一起来围观吧 https://blog.csdn.net/bobten2008/article/details/5473028?utm_source=app

用较少的一层连接更多的结点，我是这样想的，你给一下反例，我看我还能不能想一下

引用 1 楼 user-2的回复:只要求树的深度最小的话，可以先计算一遍各节点的连通度，贪心取连通度最大的节点，标记它以及它连通的节点（联通的边就都被选，用在构造树），然后更新一下各节点连通度（不包含标记过的节点），然后继续在未标记的节点中找联通度最大的节点，重复上面的步骤，直到所以点都被标记，应该可以构建出一棵深度最小的树吧 你的意思是说度最大的点作为根结点吧？这个是错的，我画图能找出来反例


Question: 为什么不能当i为奇数时用continue结束

continue是结束本次循环，进入下一次循环，不是中断循环  %2==0表示偶数

如果是偶数然后结束本次循环然后就不用往下面执行，当不上偶数时候往下执行不是这样吗？

引用 3 楼 ?⁺????⁺?的回复:[quote=引用 1 楼 自信男孩的回复:]continue不是结束的break是跳出循环才是结束的  楼主的代码else可以去掉了。 好的好的，谢谢，，，，，，，[/quote] 可是我用break也是不对

引用 1 楼 自信男孩的回复:continue不是结束的break是跳出循环才是结束的  楼主的代码else可以去掉了。 好的好的，谢谢，，，，，，，


Question: 新人求指教 如何输入一组字符串 输出另一组字符串

字符串的比较strcmp(s1，s2)，相同返回0，否则非0，看看字符串那一节就可以了


Question: 输入五行四列的数据，求每列的平均值

二维数组中，那个维度是行，那个维度是列，需要定义，scanf, func, printf要保持一致。

应该用for循环和二维数组，求一个平均值用一个for，求每列的平均值，还要再加一层for。求一个平均值的过程写成函数更好。

建议自己先写写吧，遇到问题再提出来～


Question: c语言初学

几位数用手数就可以了。  除'/'，取余'%'  CSDN论坛新手指南


Question: PTA

引用 2 楼 qq_45772088的回复:对啊，运行也没有问题，但是他提示我忽略scanf的返回值 如果没有按照scanf的格式输入，这一句会被跳过，然后是没有初值的三个变量的程序在运行。所以，必须处理scanf的返回值。

无语。。。室友写出的正确答案里没有分母非零的程序。。。。

https://pintia.cn/problem-sets/1188969352751398912/problems/1188973363130974216 最后一题

引用 5 楼 qq_45798109的回复:[quote=引用 3 楼 Italink的回复:]贴出代码，以及平台题目链接 路过，手定链接，不用谢 https://pintia.cn/problem-sets/14/problems/792[/quote] 动动动动。。。。。。

引用 3 楼 Italink的回复:贴出代码，以及平台题目链接 路过，手定链接，不用谢 https://pintia.cn/problem-sets/14/problems/792

贴出代码，以及平台题目链接

对啊，运行也没有问题，但是他提示我忽略scanf的返回值

楼主是提示什么问题？ 但从代码看，没发现什么问题～


Question: c语言求该代码伪码程序或流程图、函数和过程的调用关系图。并分析时间和空间复杂度。谢谢？

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

代码太长，看不完。 建议你将问题拆分，比如有了流程图之后，再分析复杂度。

代码格式  CSDN论坛新手指南


Question: 求教c语言基础题


Question: MacBook写c用Xcode好还是CLion好？

肯定Xcode，语法提示很方便。 而且在新的SwiftUI CLion根本没有办法比。

没用过，帮不了你，都MacBook了，还写C吗？


Question: C语言比较字符串大小

感觉太复杂了   想的有点深了

#include<stdio.h> #include<string.h>  #define M 100  int main() {     char str1[M],str2[M];     int a,i;     printf("please input str1:");     gets(str1);     printf("please input str2:");     gets(str2);     for(i=0;i<M; i++)     {         if(str1[i] != str2[i]) {             a = str1[i]-str2[i];             break;         }     }     printf("%d\n",a);     return 0; } 楼主的代码可能是死循环了。因为如果进入if分支，那么i是不会自增的，那么这个时候就是死循环了。

最好把a初始化为0

#include<stdio.h> #include<string.h>  #define M 100 int main() { 	char str1[M], str2[M]; 	int a, i; 	printf("please input str1:"); 	gets_s(str1); 	printf("please input str2:"); 	gets_s(str2); 	for (i = 0; i < M; ) 	{ 		if (str1[i] != str2[i]) { 			a = str1[i] - str2[i]; 			break; 		} 		i++; 	} 	printf("%d", a); 	return 0; }

引用 4 楼 user-4的回复:那么可以把i++上的else去掉，在上面的if语句里的末尾加break 可以运行  但是为什么bb-ba是119

那么可以把i++上的else去掉，在上面的if语句里的末尾加break

引用 1 楼 user-4的回复:没太懂你是想怎么比较字符串，不能运行的原因是因为你代码中如果满足if的调节，i永远不会增加，所以在那死循环了 就只比较第一个不同的

就只比较第一个不同的


Question: c语言，编写函数，删除指定的指定的字符，其他原样输出

查找指定的字符有库函数 strchr 可以自己动手试一下嘛

这儿不是出题的论坛而是发现和解决问题的。解决问题不是从零给写出来

可以参考这里。其实就是实现一个 replace的函数。 https://www.iteye.com/blog/canlynet-1720619

老师，您好，请问这是今天的作业吗？


Question: 0x7A81E63C (ucrtbased.dll)处(位于 Project2.exe 中)引发的异常: 0xC0000005: 写入位置 0x00700000

引用 2 楼 自信男孩 的回复:scanf_s和scanf还是有区别的，需要指定字符串长度:   scanf_s("%s", str, 13);  指定长度可以大于输入嘛

请问没有使用scanf只是用printf出现访问异常要怎么解决呢？

应该是str字符串超过长度了，把数组设置的大一点


Question: leecode题号2（两数相加，C语言完成），求大神帮忙看看错在哪里。。。

可能是我太菜了，不过还是多谢了哈

粗略看了一下，好像不需要这么长，一定可以简化，加油(ง •̀_•́)ง

可优化一下。将l1保存长的，l2保存短的。如果l1比l2短，互换一下头指针再给l2补0。

如果两个一样长，你的len还未赋值。


Question: C语言计算体重指标

引用 2 楼 Anorak Bear 的回复:不贴代码就算了还是拍图…… if里面判断不要加双引号 BMI和身高体重建议全部用浮点型，本来就不是整数 拍图也就忍了， 还是侧放的， 不知道写代码的都颈椎不好嘛？！

引用 2 楼 Anorak Bear的回复:不贴代码就算了还是拍图…… if里面判断不要加双引号 BMI和身高体重建议全部用浮点型，本来就不是整数 为什么体重会显示低体重 超重 和肥胖啊

为什么体重会显示低体重 超重 和肥胖啊

BMI建议定义成float类型，因为要和浮点数比较。  另外BMI = weight * 1.0 / (height * height); 保证后面的运算是浮点数运算

⑴去掉后两个头文件 ⑵变量改成float ⑶四个if改成if-else能快一点

引用 2 楼 yhbear的回复:不贴代码就算了还是拍图…… if里面判断不要加双引号 BMI和身高体重建议全部用浮点型，本来就不是整数 而且你也没用到相关的函数就不要引用math.h了 想用的话可以用pow()幂函数

int/int只会得到int，你需要考虑将BMI改为浮点型，切计算时要转换数据类型， 比如BMI=weight/（double）（height*height）


Question: C语言连续两次运行程序??课本上的。。

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

关于连续运行两次，说点与程序(C语言)无关的话： 1、这个要多任务的操作系统才行 比如DOS就不可以，windows可以，windows的命令提示符也可以 2、这个和exe文件的装入模块有关 3、有的时候不允许多次运行的实现 程序中应该有检测模块，如果检测到已经有运行的，就自己退出 4、windows的命令提示符如何可以运行多次 直接输入exe的文件名，回车。这就是一次 重复一下，就是第二次。 PS：在IDE中可能不能重复运行也可能可以。

引用 6 楼 weixin_45837369的回复:[quote=引用 4 楼 user-4 的回复:] 不用管它了。你只要知道putchar('\n');是换行就够了。 这课本大概的意思就是告诉你以后如果程序碰到需要运行两次的情况。[/quote] 嗯嗯呢(字数不够闲话来凑。。)

引用 5 楼 user-4的回复:#include<stdio.h> int main() {     int n = 2;     while (n > 0)     {         char ch;         ch=getchar();         ch=ch+32;         putchar(ch);         putchar('/n');         n = n - 1;     }     return 0; } 这是用的循环吗。。。。

当然你也可以像5楼一样试一下。

引用 4 楼 user-4 的回复:不用管它了。你只要知道putchar('\n');是换行就够了。 这课本大概的意思就是告诉你以后如果程序碰到需要运行两次的情况。

不用管它了。你只要知道putchar('\n');是换行就够了。

这课本，，，

引用 1 楼 weixin_45837369的回复:书上写的是你运行第二次程序的结果，\n是换行的意思。如果没有putchar('\n'); Press a key and then press Enter:B b是第一次 Press a key and then press Enter:A a是第二次 所以如果没有putchar('\n');不换行两行就会连在一块。连在一块就是书上写的 Press a key and then press Enter:B bPress a key and then press Enter:A a 有换行是这样的： Press a key and then press Enter:B b  此处有\n是换行的意思 Press a key and then press Enter:A a 一般来说不是运行一次之后就让你按任意键退出然后回到源代码界面吗


Question: VS2017怎么把图片资源打包入exe？


Question: 如何在指定地址创建bitmap

你在使用bitmap_create_by_address接口时，不是已经传进来context->bitmap了，你就直接使用base_address就行了，不需要malloc一个bitmap了，把base_address当作你malloc的bitmap使用就行


Question: C语言程序怎么让它可以多次运行。

可以考虑使用循环，可以执行多次直到遇到退出符号。  putchar('\n'); 注意反斜线。

把main里的内容复制到另一个函数，再从main里边while一下，调用这个函数。

加个循环应该就可以了

https://jingyan.baidu.com/article/ceb9fb1074947b8cad2ba0f9.html  https://jingyan.baidu.com/article/f0e83a2549a11122e59101f2.html  https://zhidao.baidu.com/question/878379727904448972.html  为什么不喜欢自己去找答案呢？

引用 6 楼 SuperDay的回复:这都不算个事，你可以在命令行里面运行程序 呦吼，肿么搞它，什么命令，我们没有学。。

这都不算个事，你可以在命令行里面运行程序

引用 2 楼 SuperDay的回复:我觉得楼主的意思可能是这样的，程序开着不要退出来，然后他修改完代码立马就可以在另一边调试，大概是这个意思吧。这也算是一种奇思妙想吧，但是精力反正这方面还不如专心学习编程呢。或许以后楼主可以做出这样的工具呢 这是课本的原话。。。 调用函数printf()输出的就是转义字符'\n'，作用是将光标换到下一行的起始位置。连续两次运行该程序，观察屏幕上的显示结果，即可发现这一行语句的作用。

引用 2 楼 SuperDay的回复:我觉得楼主的意思可能是这样的，程序开着不要退出来，然后他修改完代码立马就可以在另一边调试，大概是这个意思吧。这也算是一种奇思妙想吧，但是精力反正这方面还不如专心学习编程呢。或许以后楼主可以做出这样的工具呢 呜呜呜，我好难

就比如说 #include<stdio.h>      int main()      {       char ch;        ch=getchar();        ch=ch+32;        putchar(ch);        putchar('/n');       } (分号不用管中文还是英文的，就是则个意思) 我希望在输入一个比如说a，输出A之后按下enter健不是返回到源代码而是可以输入另一个比如说b之类的。 最后那一个putchar('/n');的意思不是为了防止多次输出导致的可读性变差吗。。。 大致就是这个想法

就是有这个问题但是不知道怎么表达，真的是太棒了

我觉得你的形容可以再具体一点


Question: where is the problem?

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

引用 4 楼 qq_45814010 的回复:非常感谢指导，学习循环不久。  不客气。 CSDN论坛新手指南

非常感谢指导，学习循环不久。

引用 楼主 qq_45814010 的回复:#include<stdio.h>  int main() {     int sum=0,i=1;     {         while(i<=10)         {   int j=1,fact=1;             while(j<=i)                 fact*=j, j++;         }         i++,sum+=fact;     }      printf("%d",sum);     return 0; } 1.  第一次int后面的花括号不需要 2. 第二个int的位置不对，这样外面的循环再次执行的时候，j和fact的值一直都是1 3.  你的i++ 写在了循环的外面，那么里面的的while的条件一直都满足，会无限循环

#include<stdio.h>  int main() {     int sum=0,i=1;     int j=1,fact=1; //    {         while(i<=10)         {  // int j=1,fact=1;             while(j<=i)                 fact*=j, j++;              i++,sum+=fact;         }  //    }      printf("%d",sum);     return 0; }

i++,sum+=fact; 这个与循环无关！


Question: 路过哪位大佬求解决！

引用 1 楼 不闻窗外事的回复:https://blog.csdn.net/cheng__lu/article/details/79276540 谢谢大佬，大佬一生好运哦


Question: C语言程序错误，大佬帮忙看一下

mysql库文件版本不对，有可能是32和64位版本不匹配，或者其它原因，重新下载一个，或者自行编译一个

建议贴出相关代码～


Question: 对于圆公式的几个问题

恐怕你理解错了，不要怪罪别人，好好看仔细了

引用 8 楼 SuperDay的回复:你真的是…… %d输出4字节整数，输出2字节整数的格式是%hd，你有没搞清楚，谁给你说的%d输出两个高位？ 百度……我泪了，对不起对不起！！

引用 5 楼 SuperDay的回复:[quote=引用 4 楼 qq_45836904的回复:][quote=引用 3 楼 SuperDay的回复:]%f输出单精度浮点数，%d输出32位带符号整数 打扰一下！d格式输出只能输出2个高位字节就像1234567898765432这个16位数从高8是12345678 然后这个高8以d输出的话是从左往右看还是从右往左啊？[/quote] 32位二进制数，转换成十进制只有10位，最大是21********，你说的情况根本不存在[/quote] 我就是问问高位字节是怎么看的！！

我就是问问高位字节是怎么看的！！

引用 4 楼 qq_45836904的回复:[quote=引用 3 楼 SuperDay的回复:]%f输出单精度浮点数，%d输出32位带符号整数 打扰一下！d格式输出只能输出2个高位字节就像1234567898765432这个16位数从高8是12345678 然后这个高8以d输出的话是从左往右看还是从右往左啊？[/quote] 32位二进制数，转换成十进制只有10位，最大是21********，你说的情况根本不存在

引用 3 楼 SuperDay的回复:%f输出单精度浮点数，%d输出32位带符号整数 打扰一下！d格式输出只能输出2个高位字节就像1234567898765432这个16位数从高8是12345678 然后这个高8以d输出的话是从左往右看还是从右往左啊？

%f输出单精度浮点数，%d输出32位带符号整数

引用 1 楼 自信男孩的回复:printf（“半径为2的圆面积area%f\n”，area）;   //%f代替%d 输出应该用%f而不是%d ！！这个d和f区别在哪里啊？


Question: 对10个数排列顺序，怎么一直报错

_main already defined in shuzu.obj 你还有个shuzu.cpp

引用 3 楼 自信男孩的回复:是不是楼主编译了多个源文件，多个源文件里也都有自己的main函数。 编译多个源文件是什么意思，没有听太懂

程序没什么问题，应该是楼主同时编译了多个源文件～

两个for循环里面的条件分别要，小于等于9和小于等于9减i

是不是楼主编译了多个源文件，多个源文件里也都有自己的main函数。

源程序不要叫main.c或者main.cpp，改成其他名字

排序的时候i<9不包括第十个数据元素，但是你输出的时候i<=9包括第十个


Question: 请问这个循环是怎么进行的？

1/1=1 1/2=0 1/3=0 1/4=0 1/5=0

i/j 和 j/i  只要 i不等于j,这两个算式就有一个会是0 只有i==j情况下两者才都等于1 所以 只有左上到右下对角线结果为1，其余全是0

i=1的时候j从一变到五 i=2的时候j从一变到五 i=3的时候j从一变到五 i=4的时候j从一变到五 i=5的时候j从一变到五

(i/j) * (j/i);这个表达式是int类型的乘除法，按照整型数处理。 这个表达式也不是很难吧，基本的乘除法～

引用 1 楼 qq_45798109的回复:/在这里表示整除，比如5/2=2 有点不明白循环的过程，就是 i=1 的时候 j 等于几……一次类推~这样的

/在这里表示整除，比如5/2=2


Question: 如何用函数同时输出变量名和变量的值

引用 9 楼 yhbear的回复:[quote=引用 6 楼 AIYY.的回复:]显示函数如下:    void pf(int a)//表示传过来的值由形参a接收 { printf("num is %d",a); } 这样的话不能通用啊 比如我写pf(sum)，不能输出sum is [/quote] void pf(char s,int a)//表示传过来的值由形参a接收 { printf("%s is %d",s,a);//s可以用来表示传过来的字符， } 你说的那种既想传名称又想传值是不存在的。一个函数不能即传值又传参数名称

引用 6 楼 AIYY.的回复:显示函数如下:    void pf(int a)//表示传过来的值由形参a接收 { printf("num is %d",a); } 这样的话不能通用啊 比如我写pf(sum)，不能输出sum is

原来如此，我还是用宏吧

这样啊，这样可能还是麻烦一些，我用宏实现了

在函数里不容易做到，除非把变量名以字符串的形式并且以参数的形式传到自定函数里。  自定义函数有两个参数：参数名和参数值。  因为如果只是传递一个参数，根据参数传递是值传递，所以不会把变量名记下来～

引用 2 楼 yhbear的回复:[quote=引用 1 楼 qq_45798109的回复:]printf(“num is %d”,num); sum同理 我希望实现通用输出，能单独创建一个函数[/quote] 那你可以把变量名放到一个char数组中，传两个参数，一个传chat数组，一个传int型

用宏实现： #define PRINT(x) printf("%s is %d\n", #x, (x)) 然后就可以：   int num = 1, sum = 3;   PRINT(num);   PRINT(sum);

引用 1 楼 qq_45798109的回复:printf(“num is %d”,num); sum同理 我希望实现通用输出，能单独创建一个函数

printf(“num is %d”,num); sum同理


Question: linux c system执行mysqldump命令报错，返回值32512

strerror(errno)；看一下错误内容，但从errno看不出什么原因的。

mysqldump换成在linux环境下的绝对路径

引用 1 楼 不闻窗外事 的回复:你这个报错就是文件已经存在啊，你是不是创建什么文件了，但是这个文件其实已经存在了  mysqldump备份命令：mysqldump -hip -Pport -uuser -ppasswd -Ddatabase table_name >tbl_name.sql; 将表重定向到文件，与文件存不存在没有关系 到现在问题还没找到，换了台机器(环境)就正常了，不知道什么原因


Question: 为何printf语句有时显示不出来?

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

尽量不要贴图，拷贝代码。。 贴图，简单的问题还好，能一眼看出来，复杂点的可能要调试才行，贴图就没法搞了 遇到问题，自己可以先调试一下，不行再问。

去掉scanf中的'\n'


Question: 麻烦各位看一下哈，这个-1.＃j问题怎么解决

引用 9 楼 自信男孩的回复:a+n == 0改成:  fabs(a+n) < 1e-15 b == 0 改成：  fabs(b) < 1e-15 一样运行时候不行耶，还有什么办法吗

引用 8 楼 weixin_45815744 的回复:[quote=引用 6 楼 lin5161678的回复:][quote=引用 4 楼 weixin_45815744 的回复:] [quote=引用 3 楼 lin5161678的回复:]n = b/a+n 还是 n= b/(a+n) ?? n=（b/a）+ n[/quote]那么 a == 0 怎么办?[/quote] 你没看题目吗？a怎么可能为零[/quote] 哦 不是0 100000的斐波那契数列  double存不下  后面就变成 1.#INF00

引用 6 楼 lin5161678的回复:[quote=引用 4 楼 weixin_45815744 的回复:] [quote=引用 3 楼 lin5161678的回复:]n = b/a+n 还是 n= b/(a+n) ?? n=（b/a）+ n[/quote]那么 a == 0 怎么办?[/quote] 你没看题目吗？a怎么可能为零

可以针对a为0处理。。条件判断

引用 4 楼 weixin_45815744 的回复:[quote=引用 3 楼 lin5161678的回复:]n = b/a+n 还是 n= b/(a+n) ?? n=（b/a）+ n[/quote]那么 a == 0 怎么办?

引用 2 楼 fireyou的回复:不要贴图 CSDN论坛新手指南 抱歉啊，知道了，下次贴码

引用 3 楼 lin5161678的回复:n = b/a+n 还是 n= b/(a+n) ?? n=（b/a）+ n

n = b/a+n 还是 n= b/(a+n) ??

不要贴图 CSDN论坛新手指南

输入scanf的时候，要一个一个输入的


Question: .rc文件的编写

引用 2 楼 weixin_44021485的回复:[quote=引用 1 楼 子衿兄的回复:]使用的VC的打开吗？还是用的其他的文本工具打开？ 用的resedit资源编辑器[/quote] 那应该没问题，不好意思，我也不知道了

引用 1 楼 子衿兄的回复:使用的VC的打开吗？还是用的其他的文本工具打开？ 用的resedit资源编辑器

使用的VC的打开吗？还是用的其他的文本工具打开？


Question: 求查错

楼主是什么排序算法，没见过呢？

为什么要嵌套循环？单循环就可以了

能不能别发照片，能不能把程序复制粘贴过来


Question: 为什么我的代码执行会产生异常，请帮忙看看原因在哪里？谢谢

while (ob[0] < x)     {         ob++;     }       while (ob[1] < y)     {         ob++;     } 第二个while已经是越界了。这两个循环之后再次使用ob也是越界访问了。注意你的ob++相当于指针向后偏移， 知道指向数组末尾，最后越界访问了。

根据你的程序，有两个主要的地方要改。  第一个，比较明显的是，你排序函数有问题，你打印下排序前和排序后的数据，看看你自己的排序是否正确。 这里是我用的排序CMP int cmp(const void* va, const void *vb) {      const int *a = *(const int **)va;     const int *b = *(const int **)vb;     if(a[0] == b[0])         return a[1] - b[1];     else         return a[0] - b[0]; }  在调用排序的时候 qsort(obstacles, obstaclesSize, sizeof(obstacles[0]), cmp);  2. 在搜索点的时候，ob +=2 是否考虑过内存越界的问题？ 下面是修改过后的 isObstacle函数，我感觉你开始也是考虑过用 int i 去计数的，但不知道为什么你最后没有用。  bool isObstacle(int** obstacles, int obstaclesSize, int x,int y) {     if (0 == obstaclesSize) {         return false;     }     int i = 0;     while (obstacles[i][0] < x)     {         if(++i == obstaclesSize)         {             i --;             break;         }     }      while (obstacles[i][1] < y)     {         if(++i == obstaclesSize)         {             i --;             break;         }     }       if ((obstacles[i][0] == x) && (obstacles[i][1] == y)) {         return true;     }      return false; }

引用 5 楼 user-3 的回复:这样看不出来，需要完整代码和用例   int cmp(const void* va, const void *vb) { 	int *a = (int*)va; 	int *b = (int*)vb;  	if ((va == NULL) || (vb == NULL)) 	{ 		return 0; 	}  	if (a[0] < b[0]) { 		return -1; 	}else if (a[0] > b[0]) { 		return 1; 	}  	if (a[1] < b[1]) { 		return -1; 	}else if (a[1] > b[1]) { 		return 1; 	}  	return 0; }  bool isObstacle(int** obstacles, int obstaclesSize, int x,int y) { 	if (0 == obstaclesSize) { 		return false; 	} 	int *ob = &(obstacles[0][0]); 	int i = 0; 	while (ob[0] < x) 	{ 		ob += 2; 	}  	while (ob[1] < y) 	{ 		ob += 2; 	}   	if ((ob[0] == x) && (ob[1] == y)) { 		return true; 	}  	return false; }   bool robot(char * command, int** obstacles, int obstaclesSize, int* obstaclesColSize, int x, int y){  	int i = 0; 	int len; 	char cmd = 0; 	int cx = 0; 	int cy = 0;  	if (command == NULL) { 		return false; 	}  	len = strlen(command); 	if (0 == len){ 		return false; 	}  	qsort(obstacles, obstaclesSize, 2 * sizeof(int*), cmp);   	while (1) { 		cmd = command[(i++)%len]; 		if (cmd =='U') { 			cy++; 		}else { 			cx++; 		}  		if (isObstacle(obstacles, obstaclesSize, cx,cy) == true) 		{ 			return false; 		}  		if ((cx > x) || (cy > y)) { 			return false; 		}  		if ((x == cx) && (y == cy)) { 			return true; 		} 	} }    用例： "RRU" [[5 5] [9 4] [9 7] [6 4] [7 0] [9 5] [10 7] [1 1] [7 5]] 1486 743

while (ob[0] < x)     {         ob++;     }       while (ob[1] < y)     {         ob++;     } 异常代码应该出在这个地方，如果正好是ob[0]， ob[1]不满足while循环，就会退出，如果有一个满足，那么就是死循环了。 建议楼主检查一下这个地方的逻辑～

这样看不出来，需要完整代码和用例

对了，不是所以用例都异常啊，提交后有用例异常

已经躺下了，电脑关了，mark一下。楼主可以试试看工具能不能检查出问题，比如lint

自己顶下,求助一下各位


Question: 51单片机延时函数怎么弄

你这个不就是TH0和TL0计时时间，你可以算一下，然后到了一定时间，TF0就被置为1，然后cnt就加一，TF0再重新置为0，重新设置TH0和TL0；按照你的说法，这样是一秒钟，那么TH0=0xB8；TL0=0x00表示的时间为20毫秒，即20毫秒TF0从0到1  好久不搞单片机了，可能说的不对。。。。


Question: 翁爷的题 求助大佬 在线等

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

x1和x2，建议用double类型的数据～


Question: 请教各位大佬c free编译器显示运行程序错误怎么回事

楼主的代码可以在清晰一些～

不要用中文文件名

引用 1 楼 user-3的回复:不要用中文文件名 好的，我试试，谢谢


Question: C语言

随便按个字符回车就好了

只能输出空格，输入回车退出程序


Question: sqrt

建议贴出代码，C++的？如果是C的不会出现重载这个问题～

把程序贴出来啊


Question: 求助 C语言

引用 6 楼 focuslight的回复:do {printf("Input number 1,2,3,4:"); scanf("%c",&ch); getchar();} while(!(ch=='1'||ch=='2'||ch=='3'||ch=='4')); }   这个没两次输出了吧 没有了，这样就只有1次了！

引用 4 楼 weixin_45716786的回复:[quote=引用 2 楼 focuslight的回复:]因为读入的是字符 (%c)，所以在第一个字符读完后缓冲的'\n', 在运行第二次scanf()时直接被读取了，结果又调一次printf, 如果想消除'\n'的影响可以在中间加个getchar()函数；  %d 和 %s 则会忽略掉回车换行符 你说的缓冲的\n是不是因为scanf是以空格或回车符作为输入字符串的结束标志，而刚好这个\n就被读入下一次循环中了[/quote] 所以我的主函数可改为这样  do {printf("Input number 1,2,3,4:"); scanf("%c",&ch); getchar();} while(!(ch=='1'||ch=='2'||ch=='3'||ch=='4')); }  或这样 do {printf("Input number 1,2,3,4:"); scanf("%s",&ch);} while(!(ch=='1'||ch=='2'||ch=='3'||ch=='4'));

引用 2 楼 focuslight的回复:因为读入的是字符 (%c)，所以在第一个字符读完后缓冲的'\n', 在运行第二次scanf()时直接被读取了，结果又调一次printf, 如果想消除'\n'的影响可以在中间加个getchar()函数；  %d 和 %s 则会忽略掉回车换行符 你说的缓冲的\n是不是因为scanf是以空格或回车符作为输入字符串的结束标志，而刚好这个\n就被读入下一次循环中了

引用 2 楼 focuslight的回复:因为读入的是字符 (%c)，所以在第一个字符读完后缓冲的'\n', 在运行第二次scanf()时直接被读取了，结果又调一次printf, 如果想消除'\n'的影响可以在中间加个getchar()函数；  %d 和 %s 则会忽略掉回车换行符 我把\n去掉它还是两次“Input number” 这是为啥

因为读了后面的回车，你需要过滤掉回车


Question: 怎么用c语言实现灰色预测模型啊


Question: 数据结构求解

引用 1 楼 不闻窗外事的回复:int sstrcmp(seqstring *s1, seqstring *s2)//字符串的比较 { 	int i = 0, flag = 1, m = 0, n1, n2; 	n1 = sstrlen(s1); 	n2 = sstrlen(s2); 	while ((flag == 1) && (i <= n1) && (i <= n2)) 	{ 		i++; 		if (s1->data[i] != s2->data[i]) flag = 0; 	} 	if ((flag == 1) && (i>n1) && (i>n2))  m = 0; 	else 		m = s1->data[i] - s2->data[i];  	return(m); }  你这个比较函数就没比较第一个字节啊，应该把i++放到if语句后面 可是字符串不是从data[1]开始的吗，i++后就是从1开始的啊

引用 9 楼 qq_45822778 的回复:[quote=引用 8 楼 qq_45822778的回复:][quote=引用 7 楼 不闻窗外事的回复:]对啊，你在第一个输入里的换行会放到第二个输入里，过滤掉就好了 嗯，谢谢！不让只发三个字[/quote] 你汇编语言会的话可以帮我看下我的汇编问题[/quote] 哈哈，不怎么会的，汇编现在很少有机会能用到

引用 8 楼 qq_45822778的回复:[quote=引用 7 楼 不闻窗外事的回复:]对啊，你在第一个输入里的换行会放到第二个输入里，过滤掉就好了 嗯，谢谢！不让只发三个字[/quote] 你汇编语言会的话可以帮我看下我的汇编问题

引用 7 楼 不闻窗外事的回复:对啊，你在第一个输入里的换行会放到第二个输入里，过滤掉就好了 嗯，谢谢！不让只发三个字

对啊，你在第一个输入里的换行会放到第二个输入里，过滤掉就好了

引用 5 楼 不闻窗外事的回复:#include <stdio.h>  #define maxsize 688  typedef struct node { 	char data[maxsize]; 	int slen; }seqstring;  seqstring a, b, c;  void set(seqstring *s)//顺序串赋值 { 	char c; 	int j = 1; 	printf("\n\n\t\t请输入一个字符串，以#作为结束符："); 	scanf("%c", &c); 	while (c != '#'&&j<maxsize) 	{ 		if (c != '\n') 		{ 			s->data[j] = c; 			j++; 		} 		scanf("%c", &c); 	} 	s->data[j] = '\0'; 	s->slen = j - 1; 	printf("[%s]\n", &(s->data[1])); }  int sstrlen(seqstring *s)//返回顺序串长度 { 	return (s->slen); }  void print(seqstring *s)//输出字符串 { 	int i; 	for (i = 1; i <= s->slen; i++) 		printf("%c", s->data[i]); 	printf("\n"); }  int sstract(seqstring *s1, seqstring *s2, seqstring *s3)//顺序串连接 { 	int i, j, k; 	i = sstrlen(s1); 	j = sstrlen(s2); 	if ((i + j)>maxsize)  return 1; 	for (k = 1; k <= i; k++) 		s3->data[k] = s1->data[k]; 	for (k = 1; k <= j; k++) 		s3->data[i + k] = s2->data[k]; 	s3->data[i + j + 1] = '\0'; 	s3->slen = i + j; 	printf("[%s]\n", &(s3->data[1])); 	return 0; }  int sstrcmp(seqstring *s1, seqstring *s2)//字符串的比较 { 	int i = 0, flag = 1, m = 0, n1, n2; 	n1 = sstrlen(s1); 	n2 = sstrlen(s2); 	while ((flag == 1) && (i <= n1) && (i <= n2)) 	{ 		i++; 		if (s1->data[i] != s2->data[i]) flag = 0; 	} 	if ((flag == 1) && (i>n1) && (i>n2))  m = 0; 	else 		m = s1->data[i] - s2->data[i];  	return(m); }  int substr(seqstring *s, int i, int k, seqstring *t)//求子串 { 	int m = s->slen; 	if (i<1 || i>m) 		return 1; 	if (k <= 0 || (i + k - 1) >= m) 		return 1; 	for (m = 1; m <= k; m++) 		t->data[m] = s->data[i + m - 1]; 	t->data[m] = '\0'; 	t->slen = k; 	return 0; }  void menu()//菜单函数  {  	printf("\t\t*************************\n");  	printf("\t\t         串的应用        \n");  	printf("\t\t*************************\n");  	printf("\t\t    1. 字符串的连接\n");  	printf("\t\t    2. 字符串的比较\n");  	printf("\t\t    3. 求串的长度\n");  	printf("\t\t    4. 求串的子串\n");  	printf("\t\t    5. 串的匹配\n");  	printf("\t\t    0. 退 出\n");  	printf("\t\t*************************\n");  }  int  main() { 	int n, i, d, f; 	int ch; 	set(&a);//建立字符串a 	set(&b);//建立字符串b 	menu();//菜单 	while (1) 	{ 		printf("\n\t\t请选择菜单功能: "); 		scanf("%d", &ch); 		printf("\n"); 		switch (ch) 		{ 		case 1: //连接字符串 			seqstring t; 			i = sstract(&a, &b, &t); 			printf("\t\t连接的字符串为："); 			print(&t); 			break; 		case 2://比较字符串大小 			n = sstrcmp(&a, &b); 			if (n == 0) 				printf("\t\ta,b两串相等\n"); 			else 				if (n > 0) 					printf("\t\ta串大于b串\n"); 				else 					printf("\t\ta串小于b串\n"); 			break; 		case 3://求字符串长度 			n = sstrlen(&a); 			printf("\t\ta的长度为：%d, ", n); 			n = sstrlen(&b); 			printf("\t\tb的长度为：%d。", n); 			break; 		case 4://求字符串子串 			printf("\t\t请选择取a和b的子串，1是a，2是b："); 			scanf("%d", &i); 			printf("\n"); 			if (i == 1)//a的子串 			{ 				printf("\t\t请选择子串开始的i值与子串的长度k的值："); 				scanf("%d%d", &d, &f); 				printf("\n"); 				substr(&a, d, f, &c); 				printf("\t\t子串是："); 				print(&c); 			} 			if (i == 2)//b的子串 			{ 				printf("\t\t请选择子串开始的i值与子串的长度k的值："); 				scanf("%d%d", &d, &f); 				printf("\n"); 				substr(&b, d, f, &c); 				printf("\t\t子串是："); 				print(&c); 			}  			break; 		case 0://退出 			return 0; 		} 	} }   改了你的创建接口，比较接口我看还OK啊，你先试试吧 改了创建接口就全对了，谢谢大佬！我之前没设if，是不是被换行搞的

引用 3 楼 不闻窗外事的回复:[quote=引用 2 楼 qq_45822778 的回复:] [quote=引用 1 楼 不闻窗外事的回复:]int sstrcmp(seqstring *s1, seqstring *s2)//字符串的比较 { 	int i = 0, flag = 1, m = 0, n1, n2; 	n1 = sstrlen(s1); 	n2 = sstrlen(s2); 	while ((flag == 1) && (i <= n1) && (i <= n2)) 	{ 		i++; 		if (s1->data[i] != s2->data[i]) flag = 0; 	} 	if ((flag == 1) && (i>n1) && (i>n2))  m = 0; 	else 		m = s1->data[i] - s2->data[i];  	return(m); }  你这个比较函数就没比较第一个字节啊，应该把i++放到if语句后面 可是字符串不是从data[1]开始的吗，i++后就是从1开始的啊[/quote] 字符串一般都是从0开始啊，我没注意你怎么实现的，正常是从0[/quote] 可以帮我看下不，仔细看看

引用 2 楼 qq_45822778 的回复:[quote=引用 1 楼 不闻窗外事的回复:]int sstrcmp(seqstring *s1, seqstring *s2)//字符串的比较 { 	int i = 0, flag = 1, m = 0, n1, n2; 	n1 = sstrlen(s1); 	n2 = sstrlen(s2); 	while ((flag == 1) && (i <= n1) && (i <= n2)) 	{ 		i++; 		if (s1->data[i] != s2->data[i]) flag = 0; 	} 	if ((flag == 1) && (i>n1) && (i>n2))  m = 0; 	else 		m = s1->data[i] - s2->data[i];  	return(m); }  你这个比较函数就没比较第一个字节啊，应该把i++放到if语句后面 可是字符串不是从data[1]开始的吗，i++后就是从1开始的啊[/quote] 字符串一般都是从0开始啊，我没注意你怎么实现的，正常是从0


Question: 请教一下，我的代码哪出问题了，输出100~999的水仙花数

内循环之前要对S重新赋值0


Question: 小白请教

# include <stdio.h> int main(void) {     int a[5];     int b[5];      //printf("％#X\n", &a[0]);     printf("%p\n", &a[0]);     //printf("％#X\n", a);     printf("%p\n", a);     return 0; } 建议用%p输出地址～

引用 6 楼 weixin_45801866的回复:[quote=引用 4 楼 proorck2019的回复:]每次运行程序，分配了不同的地址。 不是只分配了5个地址吗？[/quote] 运行一次，分配五个地址； 再运行一次，又分配五个地址。

引用 3 楼 棉猴的回复:这两个输出都表示数组a的首地址，所以每一次运行时，这两个值应该是相同的。但是当你第二次运行这个程序的时候，显示的值与第一次运行的时候肯定是不同的，原因是数组a是在程序的栈上分配的，每次数组a在栈上的位置是不同的。 对，就是这样，第一次运行的时候两个值是一样的，但是跟别人的不一样，我运行第二次的时候跟第一次也是一样的，结果都是一样的OX19FF1c

引用 4 楼 proorck2019的回复:每次运行程序，分配了不同的地址。 不是只分配了5个地址吗？

引用 2 楼 牧牛童子的回复:什么意思？两次printf()的结果不相同？？我的电脑打印的是相同的呢 两次printf的值是一样的，程序运行的结果跟别人不一样

每次运行程序，分配了不同的地址。

什么意思？两次printf()的结果不相同？？我的电脑打印的是相同的呢

因为打印的地址啊，地址本来就不是固定分配的，a[5]只是说给你分配了5个int的空间，但并不保证分配的地址是什么

就是我的结果跟人家的不一样


Question: 新手求帮助

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

楼主的代码应该编译不通过的。if else不匹配。另外，float类型与0比较建议用浮点数与0比较的方法去比较，方法建议百度一下。 printf中去掉&

if-else缺少大括号。 x=x给自己赋值没有意义。 printf不是指针，不加&。 试试 if(x>=0) { printf("%f",x); }

错误一：if-else缺少大括号。 错误二：printf语句不加&。

printf里面多了一个&号

if(...) {} else {} 再试试


Question: c语言程序

把if语句的判断条件变成i>=j，试试

从1开始输出即可，控制输出个数位置，第一题只需要控制每行输出个数呈1234递增就可以了，其它慢慢想

引用 1 楼 user-3的回复:二维数组这样初始化是不对的，并且你这个根本就不需要用二维数组 这三道题都用不到二维数组吗？那我应该怎样编写呢？

二维数组这样初始化是不对的，并且你这个根本就不需要用二维数组


Question: 求大佬帮忙做下这道题吧

实在不会别的就if elseif磨着呗

孩子，世界末日来了，不用做作业了，赶紧去庆祝一下吧


Question: 指针格式的一个问题

我说的不知道对不对， 指向int[10]的指针，有5个这样的指针。 如果是这个意思，可以用typedef分两次定义。 typedef int *[10] array10 typedef array10[5] array5

打印的结果  OB[0][0][0] = 1 OB[0][0][1] = 1 OB[0][1][0] = 2 OB[0][1][1] = 2 OB[1][0][0] = 3 OB[1][0][1] = 3 OB[1][1][0] = 4 OB[1][1][1] = 4 OB[2][0][0] = 5 OB[2][0][1] = 5 OB[2][1][0] = 6 OB[2][1][1] = 6

想知道它的格式是什么 答： 我不太明白你指的格式是什么意思？是类型还是说存储的是什么东西？ 如果是类型，下面讲用法的时候你应该能明白， 如果是存储的是什么东西，我只能说它存储是指针，大小是10个指向二维数组的指针。(其实就是三维数组)  内存中怎么存 答： 看看例子你能明白。      int ob[3][2][2] = {             {{1,1},{2,2}},             {{3,3},{4,4}},             {{5,5},{6,6}}     };      int (* parr[3])[2];      for(int i = 0;i < 3; i ++)     {         parr[i] = ob[i];     }      for(int i = 0; i < 3; i ++)     {         for(int j = 0; j < 2; j ++)         {             for(int z = 0; z < 2; z++)             {                 printf("OB[%d][%d][%d] = %d\r\n", i,j,z,parr[i][j][z]);             }         }     }

指针就是一个sizeof(long)长度的内存空间。它里面存放的是地址，即指向列数是5的二维数组的地址。 内存就是存地址。它的使用和二维数组的使用一样～

引用 1 楼 user-6 的回复:如果加括号的话，也应该是int (*parr)[10][5]，因为同样作为[]，不存在优先级差别的，只存在前后的次序，所以没必要加括号。对于*parr[]这样的形式，应该这么理解，这是一个数组，就像其它的数组一样访问，只不过它的每个元素都是指针。然后回到楼主的问题，这个数组怎么存储，它还是个数组，二维数组，只是它的每个元素都是指针。在存储空间方面，32位应用里面实际上跟int arr[10][5];没区别，因为指针实际上就是一个32位整数，区别只是这个整数不是任意的一个整数，而是一个应用运行访问的一个内存位置。就好比，一条街一条路，比如中山路最大只有600号的门牌号，你去访问中山路800号，根本就是无效的。指针就是一个地址，跟我们所处的地址是类似的。再说回数组，它这个指针所指向的内存是什么样，这取决于当时程序运行的状态，它可能不指向任何内存，就是NULL，也可能指向一个单元的内存，就是一个变量int，也可能指向一块连续的内存区域，就像数组一样。并且parr这个数组里面各个指针元素所指向的内存区域之间并不存在某种联系，它们只是可以统一通过parr来管理而已 加括号是一个指向二维数组的指针，不加括号是一个元素为指针变量的二维数组


Question: 求大佬给个关键代码

请把题目弄全


Question: 杭电2014 Campilation Error

引用 2 楼 ?:?:?:?: 的回复:[quote=引用 1 楼 user-4的回复:]可以试试其它编译器看看有没问题 我想知道问题在哪里[/quote] 应该是数组长度不确定导致的。  另外，数组长度不确定，数组越界了。m的长度是a-1;但是输入的时候确实输入了a个。  第三个问题，若a为2，那么x = s / (a-2);会出现什么问题，楼主应该分析一下～

引用 4 楼 真相重于对错的回复:int m[a-1] //这里有问题，定义数组长度要求是常量 嗯，是的，我刚刚改一下，谢谢(*°∀°)=3

int m[a-1] //这里有问题，定义数组长度要求是常量

肉眼不好看出来，最好编译器的信息可以分析一下。按照C语言的语法，语句块里面，变量都要在前面定义，你把代码里面的变量都弄到前面去看看

引用 1 楼 user-4的回复:可以试试其它编译器看看有没问题 我想知道问题在哪里

可以试试其它编译器看看有没问题


Question: C程序设计

引用 9 楼 qq_45798109的回复:[quote=引用 8 楼 qq_45798109的回复:]输出要循环的，你这样写只是输出一个值把输出改一下应该就可以了。我把你前两个if合并了，都可以的 #include <stdio.h> #include <string.h>  int main() { 	int a[10][10] = { 0 }; 	for (int i = 0; i < 10; ++i) { 		for (int j = 0; j <= i; ++j) { 			if (j == 0 || j == i) { 				a[i][j] = 1; 			} 			else 				a[i][j] = a[i - 1][j - 1] + a[i - 1][j]; 		} 	} 	for (int i = 0; i < 10; ++i) { 		for (int j = 0; j <= i; ++j) { 			printf("%d ", a[i][j]); 		} 		printf("\n"); 	} 	return 0; } #include <string.h> 那个头文件我忘删了，删了吧[/quote] 谢谢你

引用 8 楼 qq_45798109的回复:输出要循环的，你这样写只是输出一个值把输出改一下应该就可以了。我把你前两个if合并了，都可以的 #include <stdio.h> #include <string.h>  int main() { 	int a[10][10] = { 0 }; 	for (int i = 0; i < 10; ++i) { 		for (int j = 0; j <= i; ++j) { 			if (j == 0 || j == i) { 				a[i][j] = 1; 			} 			else 				a[i][j] = a[i - 1][j - 1] + a[i - 1][j]; 		} 	} 	for (int i = 0; i < 10; ++i) { 		for (int j = 0; j <= i; ++j) { 			printf("%d ", a[i][j]); 		} 		printf("\n"); 	} 	return 0; } #include <string.h> 那个头文件我忘删了，删了吧

引用 6 楼 qq_45768878的回复:[quote=引用 5 楼 qq_45798109的回复:]你把你代码复制一下吧，懒得打了 #include<stdio.h> int main() {     int a[10][10];     int i,j;     for(i=0;i<10;i++)         for(j=0;j<10;j++)            { if(i<1)a[i][j]=1;               else if(j==i)a[i][j]=1;               else a[i][j]=a[i-1][j-1]+a[i-1][j];            }       printf("%d",a[i][j]);       return 0; }               [/quote] 求的是输出前十行。。。

引用 5 楼 qq_45798109的回复:你把你代码复制一下吧，懒得打了 #include<stdio.h> int main() {     int a[10][10];     int i,j;     for(i=0;i<10;i++)         for(j=0;j<10;j++)            { if(i<1)a[i][j]=1;               else if(j==i)a[i][j]=1;               else a[i][j]=a[i-1][j-1]+a[i-1][j];            }       printf("%d",a[i][j]);       return 0; }

引用 2 楼 user-3的回复:什么问题？编译问题？运行问题？能不能好好提问？ 这是杨辉三角的题目，这程序有问题无法运行，但我不知道错在哪里？望不吝赐教

引用 1 楼 qq_45798109的回复:你想干嘛，杨辉三角吗 对啊，果然大神，一看就知道，我哪里有错误？望不吝赐教

什么问题？编译问题？运行问题？能不能好好提问？

你想干嘛，杨辉三角吗


Question: 交流一下算法 怎么在whlie的循环里面让某条语句只执行一次

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

while中用if ... else可以让某些语句执行一次～

标志位应该是最好的办法。

这也算是算法吗？不想用标志的话，就用goto吧，没什么意义琢磨这种东西吧，有什么实用价值吗？


Question: 大牛看看这个runtime怎么解决

把n/2换成sqrt(n)，如果还不行就需要根据题目规律优化算法

建议楼主把问题描述清楚一些～

LZ是不是想问，如果什么都不输入，直接回车时，会出现异常，要怎么避免这个异常，是吗？ 如果是这样，可以用%s输入一个字符串，再把字符串转成long，如果字符串为空，或者转成long为0，则推出循环

实在看不出来有什么问题，有问题要什么清楚，运行结果给出来

什么问题，代码能不能复制粘贴，别发图片


Question: 这个位图程序中的index代表什么呢

引用 4 楼 不闻窗外事 的回复:[quote=引用 3 楼 weixin_44081123 的回复:] [quote=引用 1 楼 不闻窗外事 的回复:] 这个就 bitmap_id_t中有一个数组，这个数组合起来的位数表示一个bitmap，index就表示这个数组作为整体时的位数，我举个例子，int a[2];   int表示4字节，那么a[2]表示八字节，一共表示64个位。这时候index为5的话，就表示a[0]的第6位，index为33的话，就表示a[1]的第2位，也就是a[0]包含0-31位,a[1]包含32-63位,index表示的就是0-63中的某一位 那是不是表示我想把第几位置1或者置0的话，那index就等于几呢[/quote] 对啊[/quote] 谢谢大佬讲解

引用 3 楼 weixin_44081123 的回复:[quote=引用 1 楼 不闻窗外事 的回复:] 这个就 bitmap_id_t中有一个数组，这个数组合起来的位数表示一个bitmap，index就表示这个数组作为整体时的位数，我举个例子，int a[2];   int表示4字节，那么a[2]表示八字节，一共表示64个位。这时候index为5的话，就表示a[0]的第6位，index为33的话，就表示a[1]的第2位，也就是a[0]包含0-31位,a[1]包含32-63位,index表示的就是0-63中的某一位 那是不是表示我想把第几位置1或者置0的话，那index就等于几呢[/quote] 对啊

引用 1 楼 不闻窗外事 的回复:这个就 bitmap_id_t中有一个数组，这个数组合起来的位数表示一个bitmap，index就表示这个数组作为整体时的位数，我举个例子，int a[2];   int表示4字节，那么a[2]表示八字节，一共表示64个位。这时候index为5的话，就表示a[0]的第6位，index为33的话，就表示a[1]的第2位，也就是a[0]包含0-31位,a[1]包含32-63位,index表示的就是0-63中的某一位 那是不是表示我想把第几位置1或者置0的话，那index就等于几呢


Question: code blocks

printf加上换行\n，程序结束之前加上return 0;

引用 1 楼 user-3的回复:去掉\n   不要拍照，截图。 CSDN论坛新手指南 仍然什么都没有输出。。。

引用 4 楼 SuperDay 的回复:[quote=引用 1 楼 user-3的回复:]去掉\n   不要拍照，截图。 CSDN论坛新手指南 周末了，还战斗在第一线，PF[/quote]冒个泡而已，溜了溜了。

引用 1 楼 user-3的回复:去掉\n   不要拍照，截图。 CSDN论坛新手指南 周末了，还战斗在第一线，PF

scanf里面的格式不要用换行符\n

去掉\n   不要拍照，截图。 CSDN论坛新手指南


Question: 大佬救我 实在是不知道错在哪里了

scanf("%c",&ch); 改成： scanf("%s", ch); #include<stdio.h> #include<string.h>  //main() int main() {     char ch[40],d[40];     int i,j=0,k;      //scanf("%c",&ch);     scanf("%s", ch);     //for(i=0;ch[i] != '\n'; i++)     for(i=0;ch[i] != '\0'; i++)     {         if(ch[i]>= '0' && ch[i] <= '9')         {             d[j] = ch[i];             j++;         }      }      d[j] = 0;  //'\0'     printf("%s\n", d);      return 0; } 供参考～  建议对比代码，找出自己的问题～  字符串是以'\0'结束的～

scanf("%c",&ch);  改为  scanf("%s",ch);  %s是读入字符串， %c是读入一个字符

scanf("%s",ch);


Question: 哪位大神有资源基于51单片机AT24C02+LCD12864多功能时钟代码


Question: 为什么371不出来

因为while循环里已经x++了，出来之后又x++,这样就把371隔过去了。

引用 5 楼 qq_45744248的回复:[quote=引用 4 楼 SuperDay的回复:]因为你在循环里面搞了个没用的while，你是不是想把while当做if来使用？ 对啊，不能这样用吗？[/quote] 你的程序爱怎么写都可以，但是你去调清楚来，不用来我问我们

引用 4 楼 SuperDay的回复:因为你在循环里面搞了个没用的while，你是不是想把while当做if来使用？ 对啊，不能这样用吗？

因为你在循环里面搞了个没用的while，你是不是想把while当做if来使用？

引用 2 楼 qq_45744248的回复:[quote=引用 1 楼 qq_45798109的回复:]因为他不是水仙花数。。。 371是水仙花数啊[/quote] 好吧我傻了，你去掉一个X++

引用 1 楼 qq_45798109的回复:因为他不是水仙花数。。。 371是水仙花数啊

因为他不是水仙花数。。。


Question: 为什么输出了二进制，八进制没有输出来

引用 1 楼 棉猴的回复:a在进行二进制转换后，已经变成0了。 所以，可以考虑使用一个临时变量保存a，在a进行了二进制转换后，再把保存的a的原始值赋值给a，让a复位。 #include <stdio.h> #include <stdlib.h> int main() { 	long int a, s[100], b = 0, x = 0, n, f; 	scanf("%ld", &a); 	long int temp = a;//----------定义一个临时变量保存a------------- 	while (a != 0) 	{ 		s[b] = a % 2; 		a = a / 2; 		b = b + 1; 	} 	for (n = b - 1; n >= 0; n--) 	{ 		printf("%ld", s[n]); 	}  //--------------此时a的值已经变为0--------------- 	printf("\n");//----------换行-------- 	a = temp;//---------将a的值复位，变成原始的输入值------------ 	while (a != 0) 	{ 		s[x] = a % 8; 		a = a / 8; 		x = x + 1; 	} 	for (f = x - 1; f >= 0; f--) 	{ 		printf("%ld", s[f]); 	} 	return 0; } 以下为VS2015调试结果  哦哦，知道了，非常感谢大佬


Question: c语言第一题求解

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

如果还有需要，我今晚可以帮你写

挺简单的吧，这个问题

所以你那不会呢，除了贴代码，我感觉没别的好讲了

别沉呀，帮帮忙呀。呜呜呜呜呜


Question: 求助各位大哥

黑人问号？这不是从小到大吗？


Question: 哥德巴赫猜想的证明，好像这个数组也太大了，运行结果也不正确想问一问错在哪了

不要用那么大的数组，而且这个好像不需要数组吧


Question: 用C语言写了个10进制转换其它的小代码出现了无可用源以及引发异常

引用 6 楼 SuperDay 的回复:C没有这个功能，需要多大的空间，要算清楚 必须提前给好空间才行是吧。。非常感谢了

引用 4 楼 SuperDay 的回复:没注意看你这个怎么定义，如果只是二进制，32位就够了，就乘以32 我这个想弄成任意进制，还没写完整。

C没有这个功能，需要多大的空间，要算清楚

引用 3 楼 SuperDay 的回复:输入n之后，再malloc，大小乘以n   这样么，我一开始就这样写的，我看到别人建立动态数组可以不写*n，就以为是*n导致的。 我想的是动态数组不要我来给他分配多少空间，看转换后的进制需要多少空间就给多少空间。

没注意看你这个怎么定义，如果只是二进制，32位就够了，就乘以32

输入n之后，再malloc，大小乘以n

那这个该怎么改呢

这个a才分配了一个单元的空间给它，明显就是越界了

a = (int*)malloc(sizeof(int) * N);


Question: 编写递归算法，对于二叉树中每一个元素值为x的结点，删去以它为根的子树，并释放相应的空间。

创建完二叉树后，末尾还有个换行符你没处理。被str1接收了。

你这个先序序列为啥两个 C 啊？  CSDN论坛新手指南


Question: 蓝桥题目   分糖果，这么做为什么不对

在C语法中你给数组定义内存大小必须是固定的值，不能用不确定的变量来定义    你在声明中int n,i,f[n],a[n],count=0,h=0,m=0; 用n来给f和a申请变量空间是错误的，C语言是在编译的时候申请空间，你定义时申请空间错误，编译时可能没影响，但运行时会直接崩溃的，你要是想动态申请空间，可以使用malloc或者mymalloc来给数组定义空间，或者你先给n定义一个初值也行

这一段是检查所有个数是否相同，相同则退出。那么问题来了。如果所有人的糖果数既相同又是奇数的话，最终结果需要加上n。代码中没加上n。          for(i=0;i<n;i++)         {             if(a[i]==a[0])             h++;         }             if(h==n)break;


Question: 求求大佬帮帮我

#include <stdio.h> #include <math.h>  int fact(int x) { 	if (x == 1) 		return 1; 	else 		return x * fact(x - 1); }  int main() { 	int n = 0; 	double x = 0.0; 	printf("please input n:"); 	scanf("%d", &n); 	printf("please input x:"); 	scanf("%lf", &x); 	double s = 1; 	for (int i = 1; i <= n; i++) 	{ 		s = s + pow(x, i) / fact(i); 	} 	printf("s = %lf\n", s); }


Question: 新手求教

嗯，基本都懂了，只是第三行我要赋值时可否有提示我要输入一个数赋给它，不然在不了解程序的情况下怎么知道要输入一个数呢？

自己体会吧。我只会这么多了。

引用 12 楼 user-2的回复:标准输入流是什么你知道不？？  第三行都可以用。 是指什么  都可以用？

引用 11 楼 qq_45673225 的回复:还有就是如果hello被赋值了，就被取走了，就是缓冲区只剩/n,所以就被赋给了getchar()这一点前面说的很清楚了。

标准输入流是什么你知道不？？  第三行都可以用。

引用 9 楼 user-2的回复:[quote=引用 7 楼 qq_45673225 的回复:] [quote=引用 5 楼 user-2的回复:]没看懂你想表达什么。  getchar是从标准输入流读取下一个字符。  假设输入如下数据： hello world  那么std.nam="hello" 第二行读取的是'\n' 第三行的std.sex='w'  再后面的数据还在在缓冲区中。 输入这些数据是来自哪一条语句[/quote]你就给了我三行代码。你说来自哪条语句？[/quote] 还有就是如果hello被赋值了，就被取走了，就是缓冲区只剩/n,所以就被赋给了getchar()

引用 9 楼 user-2的回复:[quote=引用 7 楼 qq_45673225 的回复:] [quote=引用 5 楼 user-2的回复:]没看懂你想表达什么。  getchar是从标准输入流读取下一个字符。  假设输入如下数据： hello world  那么std.nam="hello" 第二行读取的是'\n' 第三行的std.sex='w'  再后面的数据还在在缓冲区中。 输入这些数据是来自哪一条语句[/quote]你就给了我三行代码。你说来自哪条语句？[/quote] 我上面第三行的赋值语句是要求自行输入吗，不用scanf了？

引用 7 楼 qq_45673225 的回复:[quote=引用 5 楼 user-2的回复:]没看懂你想表达什么。  getchar是从标准输入流读取下一个字符。  假设输入如下数据： hello world  那么std.nam="hello" 第二行读取的是'\n' 第三行的std.sex='w'  再后面的数据还在在缓冲区中。 输入这些数据是来自哪一条语句[/quote]你就给了我三行代码。你说来自哪条语句？

引用 5 楼 user-2的回复:没看懂你想表达什么。  getchar是从标准输入流读取下一个字符。  假设输入如下数据： hello world  那么std.nam="hello" 第二行读取的是'\n' 第三行的std.sex='w'  再后面的数据还在在缓冲区中。 就是看了许多，不知怎么给这个函数附上值的，他自动读取还是在哪条语句输入

引用 5 楼 user-2的回复:没看懂你想表达什么。  getchar是从标准输入流读取下一个字符。  假设输入如下数据： hello world  那么std.nam="hello" 第二行读取的是'\n' 第三行的std.sex='w'  再后面的数据还在在缓冲区中。 输入这些数据是来自哪一条语句

如果输入的是： hello   那么std.nam = "hello" 第二行读取的是：'\n' 此时缓冲区没有数据了。 第三行就会等待输入。

使用结构体时的，这个代码

不小心掉了两个;不过这个能看懂不？

引用 楼主 qq_45673225的回复:关于getchar(),单行使用是清除缓存，但是当有赋值时，这个就又需要自己输入了。为什么一个会自动的读取，另一种赋值给它。这个函数得到的只是缓存中最近输入进去的一个字符吗，就是那个\n.然后自己所输入的也是最近的一个，所以就被它读了。下面图有两个这个函数  scanf("%s",std.nam); getchar() std.sex=getchar()

看不到图。CSDN论坛新手指南


Question: 明天就要交作业了，急啊

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


Question: 解析xml

搜索tinyXML，开源的简易xml解析库

网上自己去搜代码呗，让人给你干活，这个技术分可不行。


Question: ：整型变量x未初始化 ？

引用 4 楼 SuperDay的回复:[quote=引用 2 楼 qq_45817781的回复:][quote=引用 1 楼 SuperDay的回复:]scanf("%d", &x); 我们俩个的scanf函数一样啊？[/quote] 请去眼科检查一下视力[/quote] 哦，是的，我是在这儿错了，

引用 2 楼 qq_45817781的回复:[quote=引用 1 楼 SuperDay的回复:]scanf("%d", &x); 我们俩个的scanf函数一样啊？[/quote] 请去眼科检查一下视力

scanf("%d",x);   x不是少了一个  & 怎么你就跟1楼一样了。。

引用 1 楼 SuperDay的回复:scanf("%d", &x); 我们俩个的scanf函数一样啊？

scanf("%d", &x);


Question: C语言中，关于声明volatile在多线程操作的必要性。

自己帮顶。。。。

解决了，找到方法去试验了，发现编译器做了很多优化，做实验去理解 volatile 在多线程中的必要性还是挺麻烦的。 使用的是一下代码:  #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <pthread.h>  int a = 1;  void *child_pth_fun(void *arg);  int main(){  	int b, c; 	volatile int val = 10000000; 	 	//创建子线程 	pthread_t child_pth_id; 	pthread_create(&child_pth_id, NULL, child_pth_fun, NULL); 		 	b = a; 	 	//模拟一段很长的程序段,消耗主线程时间片 	while(val--);  	c = a; 	if(c == b) 	printf("In main pthread: a=%d, b=%d, c=%d\n", a, b, a); 	  	pthread_join(child_pth_id, NULL); 	return 0;  }  void *child_pth_fun(void *arg){  		//子线程修改共享的全局变量 		a = 4;		 		printf("In child pthread: a=%d\n", a); 				 }  引用编译命令：arm-linux-gcc -O3 -o pthread pthread.c 引用输出： In child pthread: a=4 In main pthread: a=1, b=1, c=1

引用 2 楼 不闻窗外事 的回复:谁告诉你在多线程中要是用volatile，我就没在多线程中用过volatile， 而且全局变量就只有一个，我不知道你看的那个引用是什么，我也没看，但是线程有独立的堆栈与全局变量有什么关系呢？你如果想要解决线程安全问题，可以使用锁。使用volatile能解决什么问题。一般来说，除了直接操作寄存器或者内存的程序，很少使用volatile；volatile一般用来防止被优化，每次都直接从相应的内存或者寄存器中取值，与线程安全有啥关系呢？？？ 线程锁解决的是互斥问题，和程序过程相关，volatile解决的是优化问题,，和编译器相关。

引用 3 楼 gouyanfen 的回复:volatile 保证了每一次访问这个变量，都是在内存地址访问的，并不会被编译器优化成寄存器变量,假如volatile 变量读入寄存器，没有限定的情况，访问这个变量他有可能第一次从内存读取到寄存器，为了效率这个寄存器没有被占用，下次访问时会直接读取寄存器的值，如果这期间内存地址上变量变化(多线程)，这个寄存器中的值并没有变化,这个时候用它来作同步或者标志变量的时候就会出问题。 此楼正解，我上面没有发现 volatile 带来的问题，是由于sleep()的原因，编译器应该对sleep等一些消耗时间比较长的操作做了优化。


Question: hdu 2009

引用 4 楼 qq_45823049的回复:[quote=引用 2 楼 wowpH的回复:]看着应该是有输出的。 不管输入是什么，输出都是0：00，为什么？[/quote] double型的输入是lf

引用 2 楼 wowpH的回复:看着应该是有输出的。 不管输入是什么，输出都是0：00，为什么？

楼主，如果帖子没回复，不要重复发帖，把它顶上来就可以了

看着应该是有输出的。

之前的题解决没？CSDN论坛新手指南


Question: argc输出的问题

引用 4 楼 自信男孩 的回复:注意下，argv[0]是你的可执行程序，即你的目标程序名，argv[1]是第一个参数名（字符串）  比如你输入的是abc.exe abc file1.txt  那么输出的应该是： 3 abc.exe abc file1.txt  注意argv[0]是abc.exe  这是Linux环境下编程，一般目标程序不会是.exe的，通过你的.exe可能你是在windows下做编程的～不分 linux 和 win的 main参数内容是标准要求 argc 这里就是 3

引用 1 楼 user-3的回复:没看懂你想说啥。 及时结贴（旧贴）。 CSDN论坛新手指南 大概就是为什么回输出3 abc.exe file1 file2 而不是abc file1 file2或者3 file1 file2 结贴的话，得等有电脑的。手机不能结贴啊

没看懂你想说啥。 及时结贴（旧贴）。 CSDN论坛新手指南


Question: 我运行程序的时候,为什么总是输出这些: 线程 '<无名称>' (0xea0) 已退出，返回值为 0 (0x0)。

你的链接是错误的？

本来就是正常的好吧！调试的时候就有，加那一句也没有用，最多就是让你没有看到


Question: 这个程序哪里错了呀

引用 10 楼 與蘤舊縐 的回复:还有编译器能砍了C的隐式类型转换吗，~~没遇到过~~ 那就搞的像golang一样难受了  好像理解错意思了，但事实证明/3，不管是vc还是gcc，必死无疑

引用 3 楼 ????15992212395 的回复:[quote=引用 2 楼 user-3的回复:]而且double输出格式是%lf 还是不行呀不行呀呀呀[/quote]  输入的时候空格隔开就行，不用三次回车 按他说的改完没理由出问题

引用 3 楼 ????15992212395的回复:[quote=引用 2 楼 user-3的回复:]而且double输出格式是%lf 还是不行呀不行呀呀呀[/quote] 不行的把代码改好跟运行结果一起发出来

引用 2 楼 user-3的回复:而且double输出格式是%lf 还是不行呀不行呀呀呀

而且double输出格式是%lf

整数除法，结果是整数，精度丢失了，改成除以3.0


Question: c语言初学者的求助

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

如果是新装的系统，一个完整的系统不应该会出现这个问题的。 另外，/usr/include路径也不需要手动指定，系统默认会去找个路径下找。 如果每次都这样手动去加载这个路径，那么你的编程会比较累。建议 找一下环境配置，可能是环境配置的问题。

引用 7 楼 SuperDay的回复:真受不了你了，都打给你了，gcc -I /usr/include main.c 你能不能仔细一点看回帖啊？ 嗯额，好的，谢谢大佬了，感谢指教！

引用 5 楼 SuperDay的回复:[quote=引用 4 楼 坂本神超的回复:][quote=引用 3 楼 SuperDay的回复:]一般在/usr/include下面，gcc -I /usr/include 也有可能在/usr/local/include下面 要输入什么指令才能解决这个问题啊？求大神指教。[/quote] 不是都写给你了吗？[/quote] 但我真的不知要怎样输入的，真的不会啊！最好写个指令给我就好。求大佬

引用 4 楼 坂本神超的回复:[quote=引用 3 楼 SuperDay的回复:]一般在/usr/include下面，gcc -I /usr/include 也有可能在/usr/local/include下面 要输入什么指令才能解决这个问题啊？求大神指教。[/quote] 不是都写给你了吗？

引用 3 楼 SuperDay的回复:一般在/usr/include下面，gcc -I /usr/include 也有可能在/usr/local/include下面 要输入什么指令才能解决这个问题啊？求大神指教。

引用 1 楼 user-4的回复:你的include路径设的不对，该路径下没找到stdio.h 那我该怎样设置路径呢，刚学c语言，真的是一窍不通，还望指教

你的include路径设的不对，该路径下没找到stdio.h


Question: 如何按键控制呼吸灯周期


Question: 路过的大佬求解答

引用 4 楼 user-1的回复:你还是没明白什么意思，当你输入一个数，比如2，这时候到了while就进入了循环，等到这一轮循环结束了，就变成1，这时候while还会允许它继续循环一次，但是下一次，就是0了，这样到了while的时候，就不会再继续循环了。所以这个数字可以控制循环的次数。楼主要好好理解一下循环的整个流程，代表什么意义。你该不会认为while的功能跟if类似吧？ 天啊，完美解答，大佬天天开心啊

引用 1 楼 user-1的回复:意思是减到0就结束循环，总共n次 其实我是问while(n)，里的n表示当n不等于零时才进入循环，可是我题目要求的输入值本来也不需要零啊，那这里多个while岂不是多此一举嘛。

意思是减到0就结束循环，总共n次


Question: 求大佬帮忙检查

引用 5 楼 user-2的回复:scanf里面的格式不要用换行符，什么都不用加 原来如此！谢谢大佬！解决了

scanf里面的格式不要用换行符，什么都不用加

引用 3 楼 user-2的回复:个数就对了，只要个数就够了，好好想想 还是不行我觉得是不是printf附近的问题，因为无论如何都会给ret赋值并返回给loc叭但是现在什么也不输出，大佬觉得我printf附近有没有问题呀？

个数就对了，只要个数就够了，好好想想

引用 1 楼 user-2的回复:sizeof（a）后面不要除以sizeof(a[0]） 那个表示的是数组里面数字的个数呀，去掉了就是字节数了叭


Question: 谁能帮下一个 c语言的科学和艺术 的课后答案

是一本书的习题答案？还是某道题目的答案？


Question: 救救孩子，分糖果问题，这么做为什么不对

在C语法中你给数组定义内存大小必须是固定的值，不能用不确定的变量来定义    你在声明中int n,i,f[n],a[n],count=0,h=0,m=0; 用n来给f和a申请变量空间是错误的，C语言是在编译的时候申请空间，你定义时申请空间错误，编译时可能没影响，但运行时会直接崩溃的，你要是想动态申请空间，可以使用malloc或者mymalloc来给数组定义空间，或者你先给n定义一个初值也行

发的那个链接是需要登录的


Question: 求助 C语言二进制转10进制排错

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

过于复杂。  读取到字符数组中。 4位2进制表示1位16进制。从后往前计算。 ABCDEF通过ASCII直接得到。   CSDN论坛新手指南

嗯，你这个写的太乱了，并且那个循环还没退出来怎么就转ABCDEF呢？甚至可以考虑不用循环


Question: 自己写的一个推箱子代码，方法可能不太好，很好的方式肯定是有的，分享一下吧！

引用 11 楼 qq_45837591的回复:我是菜鸟，怎么玩啊 wasd要按回车，你可以试试把getchar改为gatch

我是菜鸟，怎么玩啊

引用 9 楼 user-2的回复:可以搜搜getch和getche 我知道这个，不用按回车，

可以搜搜getch和getche

按wasd的，这个没有给任何提示，尴尬了。

对了，没有玩法提示。我还以为按上下左右。。。结果不动

那我就根据你的建议去了解然后改进吧！

引用 2 楼 user-2的回复:可以考虑模块化。你的代码全部挤在一个main函数里面非常混乱。不易修改。 嗯嗯目前还没有学到那个境界，😂

引用 3 楼 骆和涛 的回复:[quote=引用 1 楼 user-2的回复:]可以考虑弄个文件操作。从文件中读取地图。你这一关不过瘾。  CSDN论坛新手指南 谢谢你的指点，收藏你的帖子了，有时间看[/quote]那我期待你的改进版。

引用 1 楼 user-2的回复:可以考虑弄个文件操作。从文件中读取地图。你这一关不过瘾。  CSDN论坛新手指南 谢谢你的指点，收藏你的帖子了，有时间看

可以考虑模块化。你的代码全部挤在一个main函数里面非常混乱。不易修改。

可以考虑弄个文件操作。从文件中读取地图。你这一关不过瘾。  CSDN论坛新手指南


Question: 这三道题的答案是怎么来的呢

引用 10 楼 ????15992212395 的回复:[quote=引用 9 楼 ggglivw的回复:]这个是#define的雷之一，这种尽量不要用define,或者define的时候多加() ，保证内部的优先级。但是这种如果你要玩++i, i++的话还是要死人的 那for语句嵌套switch语句且无break的程序怎么执行呢 [/quote]  for和switch都是条件而已，看你如何写

好奇怪，一个12年的号，突然间就注销了，这是死亡的前兆吗？

引用 10 楼 ????15992212395 的回复:[quote=引用 9 楼 ggglivw的回复:]这个是#define的雷之一，这种尽量不要用define,或者define的时候多加() ，保证内部的优先级。但是这种如果你要玩++i, i++的话还是要死人的 那for语句嵌套switch语句且无break的程序怎么执行呢 [/quote] 这里要理解break最终在可执行代码中是什么样子。对于switch...case语句，实际在汇编上即是类似if...than指令。在一个条件满足后，其break相当于汇编的跳转指令，即跳出switch指令。因此，这个题就好理解了：由于没有break指令，在一个条件满足后，他不会自己跳出switch语句，而是顺序执行，知道他遇到一个break指令为止；因为您这三行都没有break，所以会执行符合条件的和其之后所有的指令

引用 10 楼 ????15992212395 的回复:[quote=引用 9 楼 ggglivw的回复:]这个是#define的雷之一，这种尽量不要用define,或者define的时候多加() ，保证内部的优先级。但是这种如果你要玩++i, i++的话还是要死人的 那for语句嵌套switch语句且无break的程序怎么执行呢 [/quote] 000122 没有break，顺序执行其后指令

引用 9 楼 ggglivw的回复:这个是#define的雷之一，这种尽量不要用define,或者define的时候多加() ，保证内部的优先级。但是这种如果你要玩++i, i++的话还是要死人的 那for语句嵌套switch语句且无break的程序怎么执行呢

define是直接替换.  4*6+8*6+8+1,  x替换成6+8

😥😥我是个新新新手

4*6+8*6+8+1，只能说你读书真的太不仔细了，你看看他们都懒得回答这种级别的问题

引用 3 楼 SuperDay的回复:[quote=引用 2 楼 ????15992212395的回复:]那第一张图为什么是81? 书上说的很清楚，按照上面说的方法展开就知道了[/quote] 展开代进去不是4*14*14*+1吗?怎么就等于81

很简单，你没有初始化，release操作系统随机给你一块内存，那块内存值是多少不知道，然后这个值+=b-a, 结果本身就是不确定的。c系列的语言变量用之前必须初始化，不初始化的人拉出去弹JJ弹到死

引用 2 楼 ????15992212395的回复:那第一张图为什么是81? 书上说的很清楚，按照上面说的方法展开就知道了

那第一张图为什么是81?

c没有初始化，relese下直接*= 结果未知，有的编译器你这样写会编译错误.


Question: if语句

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

好像没我什么事了，说的很明白了。 早期的语言里用冒号等号:=表示赋值，因为赋值操作比等值操作出现的多，所以一个等号表示赋值，两个等号表示值相等。

😮，好的，谢谢谢谢谢谢谢你

c==a是假的，c=a是一个表达式，把a的值赋给c，相当于c=a，if（c）


Question: 求救 函数输出为什么不对

你这个one的参数和返回值都是int，跟函数指针定义不一样，那是float


Question: 求代码

自己先写吧，出错不可怕，有问题贴出你的思路想法和错误原因，应该会有人回答你的。如果一直不动手，你一直都学不会的。就像开车一样，你不公路上跑几千公里你自己心里都是虚的。

举个例子： int add(int a, int b) {     return a + b; }  那么我要计算：1+(2+3)+4=?  int ans = add(add(1, add(2, 3)), 4);  当然叠加写是不好的。我只是想说明解题思路。   CSDN论坛新手指南

谁是上辈子写的带到这辈子来的？先写个原型，然后往里面填充功能

引用 3 楼 user-4的回复:先写个函数实现那个算式，会不会写？ 我刚学c语言，脑瓜子疼

先写个函数实现那个算式，会不会写？

引用 1 楼 user-4的回复:你有什么不懂的，说出来。如果你想要代码的话，等一下，现在还有几个人愿意给你代码 用函数怎么做啊这个东西

你有什么不懂的，说出来。如果你想要代码的话，等一下，现在还有几个人愿意给你代码


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

把所有MAX 替换成数字10，然后删除#define MAX那一行再看代码

sub2虽然执行了，但是没有形参也没有返回值，并没有改变数组a的值，所以两次输出的应该是一样的

这道题应该是选d吧。。。。。


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

(D)，sub2()修改的是局部数组

调整方法是将图片像素调低点。宽度1000左右即可。

论坛确实有bug。图片太宽会自动横放。  旧贴请及时结贴。 CSDN论坛新手指南

我觉得这题有问题。。。

引用 1 楼 user-5的回复:能不能把图调正，问问题要有问问题的态度 好像是图太大了，这上面自动调成了这样

引用 1 楼 user-5的回复:能不能把图调正，问问题要有问问题的态度 不好意思，我相机上图是正的，发完贴子没检查，

能不能把图调正，问问题要有问问题的态度


Question: 想问这个程序怎么解释

引用 4 楼 wowpH的回复:楼主很厉害，别人的回答没见你回过的。（旧贴为证） CSDN论坛新手指南 哦谢谢您指导蟹蟹蟹蟹。

楼主很厉害，别人的回答没见你回过的。（旧贴为证） CSDN论坛新手指南

斐波那契数列

第一次循环把a[0]变为2，之后把每一位变成前面数的和，然后输出 看上去应该是这样的[应该应该应该！！！]

每个元素等于所有元素之和 结果相当于 a[n]=1 当n=0时 a[n]=2的n-1次方 当n>0时


Question: c语言程序设计

引用 1 楼 qq_45798109的回复:直接贴代码多好，写的这看也看不懂，复制也不好复制 这不是下机了嘛  太困顶不住

这个思路怎么样？将0-9存到数组中，通过全排列算法打乱数组的顺序，对每一个顺序，取前4位数字求log4，后6位求log6，看结果是否为整数

直接贴代码多好，写的这看也看不懂，复制也不好复制


Question: 初学C语言，题目求解

引用 5 楼 user-3的回复:[quote=引用 2 楼 casere 的回复:] [quote=引用 1 楼 casere的回复:][quote=引用 楼主 weixin_45767620的回复:]#include<stdio.h> main() { 	int x; 	float T,t; 	scanf("%d,%lf",&x,&t); 	if(x==1)   	{      T=(t-32)*5/9; 	printf("The Centigrade is %.2f\n",T); 	}  	if(x==2)    	{ 	T=t*9/5+32;	 	printf("The Fahrenheit is %.2f\n",T);     } 	return 0;  }    上面这个华氏温度和摄氏温度转换的程序，我运行时总是同一个结果，请问一下是为什么？ 将9改为9.0，不然你是无法输出的[/quote] 第二个if中的5改为5.0 [/quote]   这个应该可以不改的，应为t为float型，那么计算时会自动将5   9  向double转换，最终结果再转换成float[/quote] 哦，我搞错了！对不起奥！楼主

换个标题。CSDN论坛新手指南

引用 2 楼 casere 的回复:[quote=引用 1 楼 casere的回复:][quote=引用 楼主 weixin_45767620的回复:]#include<stdio.h> main() { 	int x; 	float T,t; 	scanf("%d,%lf",&x,&t); 	if(x==1)   	{      T=(t-32)*5/9; 	printf("The Centigrade is %.2f\n",T); 	}  	if(x==2)    	{ 	T=t*9/5+32;	 	printf("The Fahrenheit is %.2f\n",T);     } 	return 0;  }    上面这个华氏温度和摄氏温度转换的程序，我运行时总是同一个结果，请问一下是为什么？ 将9改为9.0，不然你是无法输出的[/quote] 第二个if中的5改为5.0 [/quote]   这个应该可以不改的，应为t为float型，那么计算时会自动将5   9  向double转换，最终结果再转换成float

程序应该没有问题，你在输入数据时，应该在两个数据之间输入“，”

引用 1 楼 casere的回复:[quote=引用 楼主 weixin_45767620的回复:]#include<stdio.h> main() { 	int x; 	float T,t; 	scanf("%d,%lf",&x,&t); 	if(x==1)   	{      T=(t-32)*5/9; 	printf("The Centigrade is %.2f\n",T); 	}  	if(x==2)    	{ 	T=t*9/5+32;	 	printf("The Fahrenheit is %.2f\n",T);     } 	return 0;  }    上面这个华氏温度和摄氏温度转换的程序，我运行时总是同一个结果，请问一下是为什么？ 将9改为9.0，不然你是无法输出的[/quote] 还有，作为新手，要注意缩进

引用 1 楼 casere的回复:[quote=引用 楼主 weixin_45767620的回复:]#include<stdio.h> main() { 	int x; 	float T,t; 	scanf("%d,%lf",&x,&t); 	if(x==1)   	{      T=(t-32)*5/9; 	printf("The Centigrade is %.2f\n",T); 	}  	if(x==2)    	{ 	T=t*9/5+32;	 	printf("The Fahrenheit is %.2f\n",T);     } 	return 0;  }    上面这个华氏温度和摄氏温度转换的程序，我运行时总是同一个结果，请问一下是为什么？ 将9改为9.0，不然你是无法输出的[/quote] 第二个if中的5改为5.0

引用 楼主 weixin_45767620的回复:#include<stdio.h> main() { 	int x; 	float T,t; 	scanf("%d,%lf",&x,&t); 	if(x==1)   	{      T=(t-32)*5/9; 	printf("The Centigrade is %.2f\n",T); 	}  	if(x==2)    	{ 	T=t*9/5+32;	 	printf("The Fahrenheit is %.2f\n",T);     } 	return 0;  }    上面这个华氏温度和摄氏温度转换的程序，我运行时总是同一个结果，请问一下是为什么？ 将9改为9.0，不然你是无法输出的


Question: 求助大神

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

程序都OK了？框图就是照着程序来写，不要嫌琐碎，写画一个再说，慢慢就习惯了

流程图高中应该就学了。简单说，就是用文字描述一下运行过程。为了好看清晰加了几个框而已。  CSDN论坛新手指南

for的中间就是一个if，决定是否退出循环，前面就初始化一次，后面那个是最后自增，然后跳到循环头部

循环其实就是if分支，只是倒回去执行而已，for while没区别

引用 1 楼 SuperDay的回复:程序都OK了？框图就是照着程序来写，不要嫌琐碎，写画一个再说，慢慢就习惯了 我自己写的程序，但我不知道怎么画框图，For循环语句的那个框图，我真的不会画。


Question: 创建一个字符循环队列，实现字符元素入队列、出队列、显示队列元素等操作。要求为用户提供选择式菜单

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


Question: 用队列求解迷宫问题

当然可以使用队列呀。

迷宫不是用栈吗。还没用队列写过迷宫咧。CSDN论坛新手指南


Question: c 问题探究 *((short *) & data)

引用 1 楼 user-3 的回复:是不是写错了 ？&和data之间没空格吧？ 就是把data的内存地址转成short指针，然后用*取内容（short值）赋给i我做了一下测试，的确是像你这么理解的，有空格也没有关系，就因为这个空格，我看成按位与了，怎么都想不通。

虽然跟空格没关系，但是建议适当加个空格增强可读性

引用 4 楼 雒珣的回复:[quote=引用 2 楼 真相重于对错 的回复:] 你的理解是错误的  *((short *) & data); 这句化的意思是 ：首先是&data 代表取 data的地址 （short*）把他转为 short类型指针 最外边的* ，解引用，就是取他的值如果这么理解就通了，但&前后的空格没有关系吗？就是因为这个空格，我认为它是按位与了。[/quote] 按位与的话，前后都是变量，你这个前面的short *不是变量，是类型

引用 2 楼 真相重于对错 的回复:你的理解是错误的  *((short *) & data); 这句化的意思是 ：首先是&data 代表取 data的地址 （short*）把他转为 short类型指针 最外边的* ，解引用，就是取他的值如果这么理解就通了，但&前后的空格没有关系吗？就是因为这个空格，我认为它是按位与了。

引用 1 楼 user-3 的回复:是不是写错了 ？&和data之间没空格吧？ 就是把data的内存地址转成short指针，然后用*取内容（short值）赋给i有空格，你的问题倒是提醒了我，不过&前后都有空格。


Question: 软件开发

你说的图形界面，底层是通过逐点描出来的，当然他们做app的不会那么麻烦了，已经都封装好了，各种样式包括图片和效果，通过接口了调用，但是基本原理都是你学的这些语言知识。所以，先打好语言基础才是关键，罗马不是一天建成的

不要浮于表面，你说的那些app属于图形界面编程，它只是看起来对人更友好，一般都是给非程序员用的，所以别小看你现在所写的控制台程序，他只是界面不那么好看一点而已

以前觉得图形界面好啊，漂亮。现在发觉还是黑框好啊，简洁。

图形界面的程序设计是另外一个学习方向了，初学时可以不考虑，到高年级还是应该做一些的

图形界面太简单了。。 很多都是用现成的库画出来的 还是基础有意思，哈哈


Question: 关于while（ ～scanf（“”，&））的报错问题

难道不是越界？

并不是不好用。只是合不合适而已。

引用 2 楼 weixin_45750394 的回复:[quote=引用 1 楼 user-1 的回复:] 难道不是越界？ 刚刚试过了，是越界。感觉while scanf  有些不好用。 好像读到回车也不会结束，必须按下ctrl+d？ 请问有没有方法代替？[/quote]你这道题目，根本没必要用while scanf。直接for循环N次即可。没必要自找麻烦。

引用 1 楼 user-1 的回复:难道不是越界？ 刚刚试过了，是越界。感觉while scanf  有些不好用。 好像读到回车也不会结束，必须按下ctrl+d？ 请问有没有方法代替？


Question: 求大佬的帮忙，用c语言编一个字典

昨天有人问的差不多的题。。。不过你这个要添加词汇。。。

引用 2 楼 weixin_45795033 的回复:[quote=引用 1 楼 qq_45798109的回复:]结构体可以拯救这道题 怎样用到数组的知识解决这道题，我不太会[/quote] 结构体数组吧

没必要用结构体，结构体就是大材小用  定义一个二维数组，第一行存单词对应第二行存解释 for循环遍历查找直接输出

字典的话考虑构造搜索树，这样效率会高一点

先定义一个结构体 再创建结构体数组

引用 1 楼 qq_45798109的回复:结构体可以拯救这道题 怎样用到数组的知识解决这道题，我不太会

结构体可以拯救这道题😂

树，参考std::map


Question: 关于返回指针的函数使用时的疑问

我明白了，谢谢各位！

max不是变量，而是函数。函数调用需要指定参数的。可以这么写：  printf("%d\n", *max(&a, &b));  #include <stdio.h>  int* max(int *a,int* b){     if(*a>*b)         return a;     else return b; } int main() {     int* num;     int a,b;     scanf("%d %d",&a,&b);     num=max(&a,&b);     printf("Largest is %d\n",*max(&a, &b));     printf("Largest is %d\n",*num);      return 0; }  供参考～

第一个是函数所在地址，是访问函数代码段的，这样打出来是没有意义的


Question: C语言中的二分法如何能够实现在窗口中输入一个函数就可以直接求解，而不是程序只能判断一个函数的解

一看有点头大，单纯的二分法想求任意函数的解在数学上就很难搞，首先得搞清楚有多少个解，然后你如果对每个解都用二分法求，那就炸了，区间都不知道，那你还得搞清楚函数的单调性，然后分区间，另外函数奇点什么的也得考虑进去，否则就抛异常，另外如果是复函数，二分法直接GG

这个做不到的，可以尝试其它高级的语言或者工具，比如python里面的numpy，matlab或者maple


Question: C语言头文件的引用

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

<>会从标准路径引入， ""会先搜索当前工作路径，再到标准路径

真要谢的话，多了解一下论坛守则，及时结贴。这时候接就需要我们的wowpH大佬了

引用 4 楼 自信男孩的回复:一般而言，<是公共头文件，是库里的头文件，放在系统的统一路径下的头文件>， ""引用的是自定义头文件，一般是放在自定义源文件同一路径下。  但是如果把自己的头文件放到统一的路径下，也是可以用<>的，不过不建议这么写。  这只是一个约定，建议遵循这样的约定。 了解了，谢谢大佬，给大佬递茶

引用 3 楼 SuperDay的回复:[quote=引用 2 楼 信辛.hy的回复:][quote=引用 1 楼 SuperDay的回复:]前者一般是库文件，或者是第三方或者自定义 双引号也是可以引用库文件的吧[/quote] 应该可以，但是约定俗成就这么写，没必要深究，或者标新立异[/quote] 懂了懂了，这是我一次看到的笔试题目，有点疑惑来问问，谢啦老哥

引用 2 楼 信辛.hy的回复:[quote=引用 1 楼 SuperDay的回复:]前者一般是库文件，或者是第三方或者自定义 双引号也是可以引用库文件的吧[/quote] 应该可以，但是约定俗成就这么写，没必要深究，或者标新立异

引用 1 楼 SuperDay的回复:前者一般是库文件，或者是第三方或者自定义 双引号也是可以引用库文件的吧

前者一般是库文件，或者是第三方或者自定义


Question: 求助，线性表（顺序表）

链式实现  struct LinkNode{  int data;  LinkNode* next;  };  int InitLink_L(LinkNode*& L) {	//创建空链表  L = new LinkNode;  if (L == 0) return 0;  L->next = 0;  return 1;  }  int PushHead_LinkNode(LinkNode*& L, int x) {	//在链表头插入元素x  LinkNode* p = new LinkNode;  if (p == 0) return 0;  p->data = x;  p->next = L->next;  L->next = p;  return 1;  }  void PrintLink_L(LinkNode* L) {	//打印链表  LinkNode* p;  p = L->next;  while (p) {  cout << p->data;  p = p->next;  if (p) cout << ' ';  }  cout << endl;  }  void PopHead_LinkNode(LinkNode*& L) { //删除第一个结点  LinkNode* p;  if (L->next) {  p = L->next;  L->next = p->next;  delete p;  }  }  void Clear_LinkNode(LinkNode*& L) {	//清空链表元素，不包括头结点  while (L->next) {  PopHead_LinkNode(L);  }  }  void Free_LinkList(LinkNode*& L) {  while (L->next)	{  PopHead_LinkNode(L);  }  delete L;  L = 0;  }  int Length_LinkList(LinkNode* L) {	//计算单链表的长度  LinkNode* p;  p = L->next;  int len = 0;  while (p) {  len++;  p = p->next;  }  return len;  }  LinkNode* FindAddress_LinkList(LinkNode* L, int i) {	//查找单链表第i个结点并返回指针，否则返回空指针  if (i<1 || i>Length_LinkList(L)) return 0;  LinkNode* p;  p = L;  int j = 0;  while (j < i) {  p = p->next;  j++;  }  return p;  }  LinkNode* FindAddress_LinkList2(LinkNode* L, int i) {	//查找单链表第i个结点并返回指针，否则返回空指针  LinkNode* p;  int j = 1;  if (i <= 0)  return 0;  p = L;  while (1){  if (p == 0)  return 0;  if (i == j)  return p;  p = p->next;  j++;  }  }  void Insert_LinkNode(LinkNode*& L, int i, int x) {	//在第i个位置插入x,不包括链表尾部  if (i < 0 || i > Length_LinkList(L)) return;  LinkNode* p;  if (i == 1)  p = L;  else  p = FindAddress_LinkList2(L, i - 1);	//让p指向第i-1个元素  PushHead_LinkNode(p, x);	//将x插入以p为头结点的链表头部  }  void Insert_LinkNode2(LinkNode*& L, int i, int x) {	//在第i个位置插入x，包括链表尾部  if (i < 0 || i > Length_LinkList(L) + 1) return;  LinkNode* p;  if (i == Length_LinkList(L) + 1) {  LinkNode* q = new LinkNode;  q->data = x;  q->next = 0;  p = L->next;  while (p->next)  p = p->next;  p->next = q;  }  else {  if (i == 1)  p = L;  else  p = FindAddress_LinkList2(L, i - 1);	//让p指向第i-1个元素  PushHead_LinkNode(p, x);	//将x插入以p为头结点的链表头部  }  }  int DeleteLink_L(LinkNode*& L, int i) {	//删除第i个结点  if (i<0 || i>Length_LinkList(L)) return 0;  LinkNode* p;  if (i == 1)  p = L;  else  p = FindAddress_LinkList(L, i - 1);	//让p指向第i-1个元素  PopHead_LinkNode(p);	//将删除以p为头结点的链表头部  return 1;  }  LinkNode* Search_LinkList(LinkNode* L, int x) {	//在单链表中查找x若存在返回指针，否则返回空指针  LinkNode* p;  p = L->next;  while (p) {  if (p->data == x)  return p;  p = p->next;  }  return 0;  }  void UnionLinks(LinkNode* LA, LinkNode* LB, LinkNode*& LC) {	  //合并链表,合并后依然有序,原来的链表不再存在  LinkNode* a, * b, * c;  c = LC;  a = LA->next; delete LA; LA = 0;  b = LB->next; delete LB; LB = 0;  while (a && b) {  if (a->data <= b->data) {  c->next = a;  c = c->next;  a = a->next;  }  else {  c->next = b;  c = c->next;  b = b->next;  }  if (a) {  c->next = a;  }  if (b) {  c->next = b;  }  }  }  void Merge_LinkList(LinkNode*& LA, LinkNode*& LB, LinkNode*& LC) {	//合并链表,合并后依然有序,原来的链表不再存在  LinkNode* a, * b, * c;  c = LC;  a = LA->next; delete LA; LA = 0;  b = LB->next; delete LB; LB = 0;  while (a && b) {  if (a->data <= b->data) {  LA = a->next;  c->next = a;  a = LA;  c = c->next;  }  else {  LB = b->next;  c->next = b;  b = LB;  c = c->next;  }  }  if (a) {  c->next = a;  }  if (b) {  c->next = b;  }  }

可能和你要求的函数不是完全一样，仅供参考  struct SqList {      int* elem;  int length;  int listsize;  };  int InitList_Sq(SqList &L) {	//构造空表  L.elem = 0;  L.length = 0;  L.listsize = 0;  return 1;  }  int InsertList_Sq(SqList &L, int i, int x) {	//在第i个位置插入x  if (L.listsize == 0) {  L.elem = new int[1];  L.listsize = 1;  }  if (i<0 || i>L.length) return 0;  if (L.length == L.listsize) {  int* newbase = new int[L.listsize * 2];  if (newbase == 0) return 0;  for (int j = 0; j < L.length; ++j) {  newbase[j] = L.elem[j];  }  delete L.elem;  L.elem = newbase;  L.listsize *= 2;  }  for (int j = L.length; j > i; --j) {  L.elem[j] = L.elem[j - 1];  }  L.elem[i] = x;  L.length++;  return 1;  }  int DeleteList_Sq(SqList& L, int i, int& x) { //删除第i个元素并用x返回删除的元素  if (i<0 || i>L.length - 1) return 0;  x = L.elem[i];  for (int j = i; j < L.length - 1; ++j) {  L.elem[j] = L.elem[j + 1];  }  L.length--;  return 1;  }  int DeleteList_Sq(SqList& L, int i) {	//重载删除第i个元素不返回元素内容  if (i<0 || i>L.length - 1) return 0;  for (int j = i; j < L.length - 1; ++j) {  L.elem[j] = L.elem[j + 1];  }  L.length--;  return 1;  }  void PrintList_Sq(SqList L) {	//打印顺序表  for (int i = 0; i < L.length; ++i) {  if (i) cout << ' ';  cout << L.elem[i];  }  cout << endl;  }  int FindElem(SqList L, int x) {	//	查找x返回下标  int i;  for (i = 0; i < L.length - 1; ++i) {  if (x == L.elem[i]) return i;  }  return -1;  }  void UnionLists_Sq(SqList A, SqList B, SqList &C) {	//合并两个有序表，并使其合并后依然有序  int i = 0, j = 0,k = 0, m = A.length, n = B.length;  while (i < m && j < n) {  if (A.elem[i] <= B.elem[j]) {  InsertList_Sq(C, k++, A.elem[i++]);  }  else {  InsertList_Sq(C, k++, B.elem[j++]);  }  }  if (j == n) {  while (i < m) {  InsertList_Sq(C, k++, A.elem[i++]);  }  }  if (i == m) {  while (j < n) {  InsertList_Sq(C, k++, B.elem[j++]);  }  }  }  void UnionLists2(SqList &A, SqList B) {	// 将在B中不在A中的元素插入到A中  int i;  for (i = 0; i < B.length; ++i) {  if (FindElem(A, B.elem[i]) == -1) {  InsertList_Sq(A, A.length, B.elem[i]);  }  }  /*  int i, j;  for (j = 0; j < B.length; ++j) {  for (i = 0; i < A.length; ++i) {  if (A.elem[i] == B.elem[i]) break;  else {  InsertList_Sq(A,A.length, B.elem[j]);  break;  }  }  }  */  }  void DeleteElem(SqList& L) {	//删除重复元素  for (int i = 0; i < L.length; ++i) {  for (int j = i + 1; j < L.length; ++j) {  if (L.elem[i] == L.elem[j]) {  DeleteList_Sq(L, j);  j--;  }  }  }  }

先自己写写，遇到问题把代码和问题描述清楚发出来吧～


Question: 怎么有问题啊？

对对对，我自己晕了

引用 1 楼 user-1的回复:字符串右边少写一个双引号 最后三个斜杠中，前两个表示一个斜杠，第三个斜杠和双引号表示一个双引号，但是字符串的右引号没写

字符串右边少写一个双引号


Question: C语言的小问题

1~100的数字之和，其中，-1的（奇数+1）次方为正，所以所有奇数项为正，同理，偶数项为负。

意思就是1~100的奇数项为正数，偶数项为负数的求和是吗？不是上面的抄的题目的解答吧，我有点懵

引用 1 楼 user-4的回复:这个是1，-2，3，-4到-100正负交替累计求和 好的，非常感谢你。。。。。。。

这个是1，-2，3，-4到-100正负交替累计求和


Question: c语言

#include <stdio.h>  int main() { 	int a, b; 	printf("输入两个数："); 	scanf("%d %d", &a, &b);  	int tmp = (a > b) ? b : a; 	for (int i = tmp; i > 0; i--) 	{ 		if (a % i == 0 && b % i == 0) 			printf("%d %d 的最大公约数：%d\n", a, b, i); 		break; 	} 	return 0; }

你需要看看这个。CSDN论坛新手指南

运行一下不就知道了😂


Question: HDU2004,为什么wrong answer

引用 1 楼 qq_45798109 的回复:建议你把不符合的值提前判断一下，像105/10是等于10的，按照你这个程序的话它就是合理的 +++ 对于105，这些大于100，小于110的数据还是相除之后等于10的。


Question: 为什么scanf(%c %d)会出错而（%d %c）正常

scanf(%c %d)  后面输入的时候也要匹配，先输入的需要时一个字符，然后是一个整形数。顺序要一致

引用 6 楼 qq_45798109的回复:[quote=引用 3 楼 挺无奈的丶的回复:]我试了一下，在%c前面加空格可以解决问题，但是可以问下问什么会这样吗？ 因为空格也是一个字符他会把你数字后的那个空格读入c[i]中然后你输入的那个T和整型不符就会报错[/quote] 懂了，谢谢大佬，真的太感谢了

引用 3 楼 挺无奈的丶的回复:我试了一下，在%c前面加空格可以解决问题，但是可以问下问什么会这样吗？ 因为空格也是一个字符他会把你数字后的那个空格读入c[i]中然后你输入的那个T和整型不符就会报错

引用 1 楼 qq_45798109 的回复:因为B，2 T，3中间有个空格，你在%c前加个空格应该就好了(应该应该应该!!!) 我试了一下，在%c前面加空格可以解决问题，但是可以问下问什么会这样吗？

我试了一下，在%c前面加空格可以解决问题，但是可以问下问什么会这样吗？

引用 1 楼 qq_45798109的回复:因为B，2 T，3中间有个空格，你在%c前加个空格应该就好了(应该应该应该!!!) 他不会跳过空格，或者你在%d之后加空格也行


Question: C语言（大佬赐教）

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

#include<stdio.h> int main() { 	int N, number, temp = 7, a = 3; 	char ch; 	int yemp1, yemp2; 	scanf("%d", &N); 	if (N >= 1 && N <= 49 && N % 2== 1) 	{ 		number = (N + 1) * (N + 1) / 2 - 1; 		do 		{ 			if (number >= temp) 			{ 				if (number < (temp + 2 * (a + 2))) 				{ 					break; 				} else if (number == (temp + 2 * (a + 2))) 				{ 					temp = (temp + 2 * (a + 2)); 					a = a + 2; 					break; 				} else 				{ 					temp = (temp + 2 * (a + 2)); 					a = a + 2; 				} 			} 		} 		while (1); 		for (int i = 0; i < a; i++) 		{ 			yemp1 = i; 			if (yemp1 > a / 2) 			{ 				yemp1 = a - yemp1 - 1; 			} 			for (int j = 0; j < a; j++) 			{ 				yemp2 = j; 				if (yemp2 > a / 2) 				{ 					yemp2 = a - yemp2 - 1; 				} 				if (yemp2 < yemp1) 				{ 					if (j > a / 2) 					{ 						printf("\n"); 						break; 					} else 					{ 						printf(" "); 					} 				} else 				{ 					printf("%c", '*'); 				} 				if (j == a - 1) 				{ 					printf("\n"); 				} 			} 		} 	} else 		printf("Input error"); }

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


Question: C#

哪个不明白的？换行做空行用，也有另起一行的用处；空格占位，使得想显示的字符在预期的位置；输出的心形字符组合出一种图案。程序清晰明白


Question: 做一个算法流程图


Question: C＃

你怕是对C语言有什么误解。CSDN论坛新手指南

前面输入输出字符，后面输入输出整数，不会查书吗？

引用 2 楼 user-3的回复:这是整数，按字符输出是没意义的，不要用%c格式输出不可见字符的整数 %c   %d是什么意思啊

这是整数，按字符输出是没意义的，不要用%c格式输出不可见字符的整数

救救刚学信管的孩字，


Question: C语言求1～n中能被2，3，5整除的数字的个数。

初中应该就学过的东西。

百度关键字。CSDN论坛新手指南

找能被30整除的数就可以了 给出n的话，n/30向下取整就是个数

容斥！容斥！


Question: 它的结果为什么会是 0 呢？

这题目不是坑人吗、、、CSDN论坛新手指南

C/C++中没有连续的比较运算

z>=y>=x是左结合，z>=y的值为真，在C中真使用非0表示，但是对于计算得出的真则为1,   1>=x为假，所以为0


Question: 蓝桥杯进制转换

你来读读？CSDN论坛新手指南 读的懂算我输。

二进制文件都没这么乱。CSDN论坛新手指南

@wowpH，快来发一个指南


Question: 无法编译。。。。请帮忙检查。

引用 14 楼 早打大打打核战争 的回复:楼主眼力欠佳呀~~~  不懂。。。求高人指点

楼主眼力欠佳呀~~~

对。。。。。。

是这道题吧：https://pintia.cn/problem-sets/14/problems/782

引用 10 楼 wowpH 的回复:我刚提交了我的代码。测试点2过不去。。。 说错了。是测试点1

我刚提交了我的代码。测试点2过不去。。。

谢谢w,下面是我在学习你的思路以后改的内容：问题：如图测试三个点，有一个提示错误。。。。又不会了 #include<stdio.h> #define dm 1440  main() { 	int t1 , m; 	scanf("%d %d",&t1,&m); 	int m1; 	m1=(m+dm)%dm;//当m是负数时，转化为从t1开始的时间段。保证开始时间和结束时间在同一天。  	int t2; 	t2=t1/100*60+t1%100+m1; 	int h1; 	h1=(t2/60)%24; 	int m2; 	m2=t2%60; 	printf("%02d%02d",h1,m2);   }

谢谢w，发帖格式学会了

引用 5 楼 wowpH 的回复:你可看看CSDN论坛新手指南吧。  代码格式。   #include <stdio.h>  #define DAY_MINUTE 1440  int main(void) { 	int t1, m1; 	scanf("%d %d", &t1, &m1); 	m1 = (m1 + DAY_MINUTE) % DAY_MINUTE;// 将负数转成正数 	int m2 = t1 % 100 + m1;// 起始时间的分钟加上时间差的分钟 	int m3 = m2 % 60;// 最终的分钟 	int h1 = (t1 / 100 + m2 / 60) % 24;// 起始小时加进位的小时 	printf("%d%d", h1, m3); 	return 0; }  改一下： 	printf("%d%02d", h1, m3);

大神您的回复不符合题目要求，下面是我又改的，现在可以编译了，可是无法输出。。。。又是什么鬼？ #include<stdio.h> main() { 	int h1 , m1; 	int del; 	scanf("%d%d %d",&h1,&m1,&del); 	int t; 	t = h1 * 60 + m1 +del; 	int h2 , m2; 	h2=t/60; 	m2=t%60;			 	if(h2>=10 && h2<=24)				 		printf("%d%d\n",h2,m2); 	if(h2>=1 && h2<10)				 		printf("0%d%d\n",h2,m2); 	if(h2=0 && m2>=10)				 		printf("00%d\n",m2); 	if(h2=0 && m2<10 && m2>=0)				 		printf("000%d\n",m2);			 }

#include <stdio.h>  int main() {   int t, d;    scanf("%d%d", &t, &d);   t = t / 100 * 60 + t % 100 + d;   printf("%d\n", t / 60 * 100 + t % 60);    return 0; }

int t; 此行上移！你这种写法C++可以，C不行

有什么问题？ 你这代码没问题啊 有什么错误提示吗


Question: C语言程序

引用 7 楼 weixin_45694096 的回复:[quote=引用 6 楼 weixin_40290083的回复:]1，你的scanf的控制部分有a=,等这些，输入数据时要输入， 2，你输入的数据计算b*b-4ac是否大于等于0，这个在程序中要判断 完成了   谢谢大佬[/quote]及时结贴。 CSDN论坛新手指南

引用 6 楼 weixin_40290083的回复:1，你的scanf的控制部分有a=,等这些，输入数据时要输入， 2，你输入的数据计算b*b-4ac是否大于等于0，这个在程序中要判断 完成了   谢谢大佬

引用 4 楼 weixin_40290083的回复:是编译不通过，还是运行是结果错误。 是运行结果出了错误。

是编译不通过，还是运行是结果错误。

scanf("a=%lf,b=%lf,c=%lf",&a,&b,&c); ----> scanf("%lf,%lf,%lf",&a,&b,&c);

百度：scanf 查看 注意问题 部分 CSDN论坛新手指南

先看看这个。CSDN论坛新手指南


Question: c语言基础题

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

你这个不就是统计有多少个空格吗，你就遍历每个句子的空格，然后加一，不就是单词数量

CSDN论坛新手指南


Question: 单链表问题

是啊，之前只是发了一个录入的模块，最后还是找老师解决的 大佬可不可以问一下为什么把if else 改成 while语句啊，感觉有点懵

引用 1 楼 wowpH 的回复:粘贴到VS中，有三个红色  void insert(LinkList* head, train e) {  	train e = {};  			insert(head, e);基本错误还是调好再发吧。

#include <stdio.h> //#include <windows.h> #include <time.h> #include <string.h> #include <stdlib.h>   //定义存储火车信息的结构体 typedef struct train {     char num[10]; //列车号     char startstation[10];  //起始站     char stopstation[10];   //终点站     char starttime[10];     //首发时间     char stoptime[10];      //到达时间     double price;           //票价 }DataType; //定义该结构体  //定义存储结点的结构体  typedef struct LNode {     DataType data; //     struct LNode *next; } LinkList;   //输出列车信息 void out(LinkList *head) {     LinkList *p;     p = head;     printf("输出列车的信息：\n\n");     printf("列车号\t起始站\t终点站\t首发时间\t到达时间\t票价\n");     while(p->next!=NULL)     {         p=p->next;         printf("%s\t %s\t %s\t %s\t\t %s\t\t %.2f\n",p->data.num,p->data.startstation,p->data.stopstation,p->data.starttime,p->data.stoptime,p->data.price);      } }     void insert(LinkList *head,train e) {     LinkList *p,*s;     p = head;     //while(head->next==NULL)     if (head->next==NULL)     {         printf("请先录入列车信息！！！\n");         return;     }     //if(p->next!=NULL){p=p->next;}     while (p->next!=NULL){         p = p->next;     }      //else    // {         s=(LinkList *)malloc(sizeof(LinkList));         s->next=NULL;         printf("列车号为：");         scanf("%s",e.num);         printf("起始站为：");         scanf("%s",e.startstation);         printf("终点站为：");         scanf("%s",e.stopstation);         printf("首发时间：");         scanf("%s",e.starttime);         printf("到达时间：");         scanf("%s",e.stoptime);         printf("票价：");         scanf("%lf",&e.price);         s->data=e;         s->next=p->next;  //插入         p->next=s;         printf("-----------------------------------------\n");     //} }    void enter(LinkList *head) //录入学生信息 {     LinkList *p,*r; //尾插法，p指向新结点，r指向尾结点     int i,n; //n表示列车数     r = head;     printf("请输入要录入的列车数：");     scanf("%d",&n);     printf("请输入列车信息：");     for(i=1;i<=n;i++)     {         p=(LinkList *)malloc(sizeof(LinkList));         p->next=NULL;         printf("列车号为：");         scanf("%s",p->data.num);         printf("起始站为：");         scanf("%s",p->data.startstation);         printf("终点站为：");         scanf("%s",p->data.stopstation);         printf("首发时间：");         scanf("%s",p->data.starttime);         printf("到达时间：");         scanf("%s",p->data.stoptime);         printf("票价：");         scanf("%lf",&p->data.price);         r->next=p;  //工作指针中的数据付给尾结点         r=r->next; //尾结点后移         printf("-----------------------------------------\n");     }  }   void menu()     //管理员菜单 {     //train e={};     train e = {0};     LinkList *head;     head=(LinkList *)malloc(sizeof(LinkList));     head->next=NULL;      int choice=-1;     //用于记录管理员选择     printf("\t\t\t\t\t/**********欢迎来到管理员系统**********/\n");     printf("\t\t\t\t\t请选择您要进行的操作：\n");     printf("\t\t\t\t\t1、查看所有列车信息\n");     printf("\t\t\t\t\t2、增加列车信息\n");     printf("\t\t\t\t\t3、删除列车信息\n");     printf("\t\t\t\t\t4、修改列车信息\n");     printf("\t\t\t\t\t5、查找列车信息\n");     printf("\t\t\t\t\t6、录入列车信息\n");     printf("\t\t\t\t\t0、退出系统\n");      while(choice!=0)     {         printf("请选择你要进行的操作（0-6）:");         scanf("%d",&choice);         printf("\n");         switch (choice)         {             case 1:                 printf("基本列车信息如下：\n");                 out(head);                 break;             case 2:                 //insert(head,e);                 insert(head, e);                 break;             case 3:                  break;             case 4:                   break;             case 5:                  break;             case 6:                 enter(head);                 break;             case 0:                 system("cls");      //清屏                 printf("成功退出系统！！\n");                 exit(0);             default :                 printf("出错！！！！\n");                 // choice1();         }     } }  int main ()      //主函数 {      menu();     system("pause");     //防止闪退     return 0; }  供参考～  挺熟悉的一个代码，之前是不是提出过问题。


Question: C语言进制的转换问题

长度100000，你用long long能存下吗？改用 char*

引用 8 楼 user-4 的回复:[quote=引用 6 楼 lin5161678 的回复:] [quote=引用 2 楼 weixin_45679956 的回复:] [quote=引用 1 楼 真相重于对错 的回复:] 长度100000，你用long long能存下吗？改用 char* long long可以存下9后面18个0位数 我的问题主要不是在容量的问题上，而是知道为什么不能直接用%x和%o来转换进制。 在网上搜这道题的答案都是挺复杂的。[/quote]   请把这个十六进制数转换为八进制[/quote]大哥，你这F不会是for循环输出的吧。/xk占了我1.5屏[/quote]随便输出几个 然后 ctrl+a ctrl+c ctrl+v 循环几次

再给你点儿提示，每位16进制数是4位二进制，而每位8进制是3位二进制，写个循环，考虑每种可能，并不算很复杂

引用 6 楼 lin5161678 的回复:[quote=引用 2 楼 weixin_45679956 的回复:] [quote=引用 1 楼 真相重于对错 的回复:] 长度100000，你用long long能存下吗？改用 char* long long可以存下9后面18个0位数 我的问题主要不是在容量的问题上，而是知道为什么不能直接用%x和%o来转换进制。 在网上搜这道题的答案都是挺复杂的。[/quote]   请把这个十六进制数转换为八进制[/quote]大哥，你这F不会是for循环输出的吧。/xk占了我1.5屏

引用 4 楼 真相重于对错 的回复:10^100000次方是多少？ long long 最长取多少？ 10^100000次方后面有100000个0，long long怎么放得下？ 放都放不下，你怎么变换？ 哦哦哦，好像有点明白的，多谢啦

10 0000位十六进制就是40 0000位二进制 long long只有8个字节，也就是64位二进制。  40 0000 - 64 = 。。。。。这都不知道差多少。

输入的取地址没写。输出的换行没写。

引用 1 楼 真相重于对错 的回复:长度100000，你用long long能存下吗？改用 char* long long可以存下9后面18个0位数 我的问题主要不是在容量的问题上，而是知道为什么不能直接用%x和%o来转换进制。 在网上搜这道题的答案都是挺复杂的。


Question: 求助这个怎么改

还有你定义函数处写了返回类型为void，里面的return后面就不能加东西了，或者没有retrurn;

a不是全局变量，在函数printfrefect函数中没有定义a，不能使用a，可以改为a是传参，在主函数调用是把a传进入就可以使用了

你需要一个英汉词典。CSDN论坛新手指南

我相信没人看你代码

a是未定义的变量，建议查一下自己想要传递的实参是什么？


Question: 小白求助.C语言

偶遇校友，我也是来寻求答案的，哈哈哈

感谢不给分吗？？？

引用 14 楼 XCU_CH 的回复:一 		1、 			struct User{ 				string id;		 				int card;		 				string name;		 				string address;	 				int money;			 			} 		2、 			struct Student{ 				string sno;		 				string sname;	 				bool sgender; 				int syear; 			} 		3、 			//计算立方体的体积 			double calVolumn(double len){ 				return len.pow(len, 3); 			} 			//计算立方体的表面积 			double calArea(double len){ 				return len.pow(len, 2)*6; 			} 		4、 			if(number > 0){ 				flag = true; 			}else{ 				flag = flase 			}		 		二、 		1、 			result = 10		 		2、 			????? 		3、 			result = 5				 		4、 			result = 4		 		5、 			#include <iostream> 			using namespace std; 			int main() 			{ 					double n=5, r=3; 					double t = n - r; 					double result; 					double result1 = 1; 					double result2 = 1; 					for (; n > r; n--) { 							result1 = result1 * n; 					}  					for (; t > 0; t--) { 							result2 = result2 * t; 					} 					result = result1 / result2; 					cout<<"result = "<<result <<  endl; 			} 		6、 			使用pow函数，原因是代码结构清晰   超级感谢.

对啊，你先找个开发工具，然后把代码输进去运行看看，观察观察，体会体会，然后继续下一步

都说了你自己输入到dev里运行就能看到结果了。。 照着抄还不会？ 还是不知道啥是dev。

楼主的意思是，我们来帮你做作业，考试呢？也是我们帮你吗？要不要你的大房子，我们也帮你住了？

引用 8 楼 wowpH 的回复:[quote=引用 5 楼 Hitotso 的回复:] [quote=引用 1 楼 wowpH 的回复:] 你下载IDE没？就是那种用来写代码然后编译执行的软件。  要不我给你代做？？  一行代码不敲学什么编程，转行吧。CSDN论坛新手指南  大哥 别啊,我一个读美术出来的我真心不会啊.这个是我报读专升本一个必须要提交的作业. 我对C++一脸懵逼. 求助各位大佬.  跪谢啦.[/quote]这个。。。。我不知道说什么好了。[/quote]   求助求助.我是真不懂.着急着..不知如何报答大佬们.我网上也找过.学习最基本的也无从入手啊

引用 4 楼 fireyou 的回复:不说别的，第二个阅读程序写出运行结果， 你可以自己在IDE里敲进去运行不就出来了吗。。。 这是多懒。。   懒是原罪.但我真不是懒啊 哥,我几个报考的同学都一脸懵.. 必修里面一定有C++的作业. 我也是无奈才求助各位大佬

引用 5 楼 Hitotso 的回复:[quote=引用 1 楼 wowpH 的回复:] 你下载IDE没？就是那种用来写代码然后编译执行的软件。  要不我给你代做？？  一行代码不敲学什么编程，转行吧。CSDN论坛新手指南  大哥 别啊,我一个读美术出来的我真心不会啊.这个是我报读专升本一个必须要提交的作业. 我对C++一脸懵逼. 求助各位大佬.  跪谢啦.[/quote]这个。。。。我不知道说什么好了。

引用 3 楼 自信男孩 的回复:建议自己先尝试着写写，遇到问题再提出来，可以把代码贴出来，这样针对具体问题好给你解决。 如果是基础不好，但又不想动手写，这确实不好帮你解决问题，因为懒是主观的，不是客观的。    我读的那个专业官网网络教育要求在网页上传的作业.我一窍不通啊,零基础.

引用 2 楼 SuperDay 的回复:[quote=引用 1 楼 wowpH 的回复:] 你下载IDE没？就是那种用来写代码然后编译执行的软件。  要不我给你代做？？  一行代码不敲学什么编程，转行吧。CSDN论坛新手指南  嗯，没错，就这样维护世界和平！[/quote]  大佬们，别啊.我一窍不通才来这看看能否找到帮忙.

引用 1 楼 wowpH 的回复:你下载IDE没？就是那种用来写代码然后编译执行的软件。  要不我给你代做？？  一行代码不敲学什么编程，转行吧。CSDN论坛新手指南  大哥 别啊,我一个读美术出来的我真心不会啊.这个是我报读专升本一个必须要提交的作业. 我对C++一脸懵逼. 求助各位大佬.  跪谢啦.

引用 1 楼 wowpH 的回复:你下载IDE没？就是那种用来写代码然后编译执行的软件。  要不我给你代做？？  一行代码不敲学什么编程，转行吧。CSDN论坛新手指南  嗯，没错，就这样维护世界和平！


Question: 大一新生找不到错了（折半查找）

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

1. scanf的t前要加&（取地址符）； 2. for中把第一个分号前的low和high去掉，冗余代码； 3. 第一个if里改成t == a[mid]; 4. 最后一个printf加一个条件，即if (low > high)  建议以后直接贴代码，而不是贴图片～

scanf  t的取地址符呢 还有你的代码好乱


Question: 小写字母列表

#include<stdio.h> int main(void) { 	int i,j, n; 	char ch = 'a'; 	scanf_s("%d", &n); 	for (i = 1; i <= n; i++) 	{ 		for (j =1;j<=i;j++ ) 			printf("%c", ch++); 		printf("\n");  		ch = 'a'; 	}  	return 0; }

引用 1 楼 user-2 的回复：用一个一维数组保存这个字符串。每次在末尾加一个字符就行。  数组大小定为题目的n的最大值加1即可。  for循环输出。听不太懂呜呜

别忘了结贴。CSDN论坛新手指南

#include <stdio.h>  #define MAX_N 100  int main(void) { 	int n; 	scanf_s("%d", &n); 	char str[MAX_N]; 	for (int i = 0; i < n; ++i) { 		str[i] = (char)('a' + i); 		str[i + 1] = '\0'; 		printf("%s\n", str); 	} 	return 0; } /* 5 a ab abc abcd abcde 请按任意键继续. . . */


Question: 求解惑下递归函数

为什么不是每次加一 输入abcde输出abcde？

引用 2 楼 wowpH 的回复:可以发现，从a到e，地址是每次增加1。这就是那个加1的效果。数组在内存中，地址是连续的。

可以发现，从a到e，地址是每次增加1。这就是那个加1的效果。

CSDN论坛新手指南 #include <stdio.h> void reverseStr(char* str) { 	if ('\0' != str[0]) { 		// 不是最后一个字符，就继续递归， 		// 地址后移一个字节，因为char是一个字节 		reverseStr(str + 1); 		printf("%p\t", str);// 输出当前地址 		printf("%c\n", str[0]); 	} } int main(void) { 	char str[10]; 	scanf_s("%s", str, 10); 	reverseStr(str); 	return 0; } /* abcde 003DFDB8        e 003DFDB7        d 003DFDB6        c 003DFDB5        b 003DFDB4        a 请按任意键继续. . . */

根据递归函数其实是子集调用自己，每次调用到位置不会继续向后执行，而是从新调用自己，继续执行递归函数之前的函数体， 当最后不满足的时候就会返回来执行后面的，利用的就是栈的原理，先进后出。

CSDN论坛新手指南  顺序输出  #include <stdio.h> void reverseStr(char* str) { 	if ('\0' != str[0]) { 		printf("%p\t", str);// 输出当前地址 		printf("%c\n", str[0]); 		// 不是最后一个字符，就继续递归， 		// 地址后移一个字节，因为char是一个字节 		reverseStr(str + 1); 	} } int main(void) { 	char str[10]; 	scanf_s("%s", str, 10); 	reverseStr(str); 	return 0; }


Question: 求大佬解释一下，大一（｡ò ∀ ó｡）

#include <stdio.h> #include <string.h>  int main(void) {  	char str[100];   	printf("请输入一串字符串\n");   	gets(str);   	int i=0,m,n; 	char t;   	m=strlen(str);   	printf("请输入一个加密的条件\n");   	scanf("%d",&n); 	for(i=0;i<m;i++) 	{		 		t=str[i]; 		if(t >= 'A'   &&  t <= 'Z' - n) t += n; 		if(t >= 'a'   &&  t <= 'z' - n) t += n; 		if(t > 'Z'-n  &&  t <= 'Z') t = 'A' + n - 'Z' + t -1; 		if(t > 'z'-n  &&  t <= 'z') t = 'a' + n - 'z' + t -1; 		printf("%c",t); 	} 	 }

谢谢大佬，大一，以前没接触过编程，乱编了一个代码，不知道错那。

#include <stdio.h> #include <string.h>  int main(void) {     char str[100];     int i=0,m,n,t;      printf("请输入一串字符串\n");     gets(str);      m=strlen(str);     printf("请输入一个加密的条件\n");      scanf("%d",&n);     for(i=0;i<m;i++) {         t = str[i];         if(t>='A'&&t<='Z'-n) t+=n;         if(t>='a'&&t<='z'-n) t+=n;         if(t>='Z'-n&&t<='Z') t=t+'A'-'a'+n;         if(t>='z'-n&&t<='z') t=t+'A'-'a'+n;         //printf("%s",t);         str[i] = t;     }     printf("%s\n", str);     return 0; } 供参考～

引用 1 楼 喜欢做我自己的回复:贴代码，不要贴图 大佬求救啊，，，，，

#include <stdio.h> #include <string.h>  int main(void) { char str[100];   printf("请输入一串字符串\n");   gets(str);   int i=0,m,n,t;   m=strlen(str);   printf("请输入一个加密的条件\n");   scanf("%d",&n); for(i=0;i<m;i++) 	t=str[i]; if(t>='A'&&t<='Z'-n) t+=n; if(t>='a'&&t<='z'-n) t+=n; if(t>='Z'-n&&t<='Z') t=t+'A'-'a'+n; if(t>='z'-n&&t<='z') t=t+'A'-'a'+n; printf("%s",t); }

贴代码，不要贴图


Question: 大一C语言难题

#include<iostream> using namespace std; int    solution[10];  bool    IsSolve(int* data, int beg, int    end, int des) {     if (data[beg]==des)     {         solution[beg]=1;         return true;     }     if (beg<end)     {         if (IsSolve(data, beg+1, end, des-data[beg]))         {                solution[beg]=1;             return true;         }         if (IsSolve(data, beg+1, end, des)) { solution[beg]=0;             return true;         }     }     return    false; }  int main() {         int data[10];     int sum = 1000;     int no_solution = 0;     for (int i = 0; i < 9; ++i)         data[i] = 1<<i, sum -= 1<<i;     data[9] = sum;     for (int j = 1; j < 1001; ++j)     {         if (!IsSolve(data, 0, 10, j))         {             no_solution++;         }         else         {             cout << j << ":/t";             for (int k = 0; k < 10; solution[k++] = 0)                 cout << solution[k];             cout << endl;         }     }     cout << "无解数:" << no_solution << endl;     return 0; }


Question: 路过哪位大佬解答一下10到15行啥意思，看不懂

CSDN论坛新手指南 #include <stdio.h> int main() {     int a,b,c;     int num[3]={0};     int temp;     for(int i=0;i<3;i++){         scanf("%d",&num[i]);     }     for(int i=0;i<2;i++){         for(int j=0;j<2-i;j++){             if(num[j]>num[j+1]){                 temp=num[j];                 num[j]=num[j+1];                 num[j+1]=temp;             }         }     }     printf("%d->%d->%d\n",num[0],num[1],num[2]);         return 0; }

引用 2 楼 jena_wy的回复:从小到大排序, 如果后面的数小于前面的数,交换两个数.  我是那么理解的，假如i=0，则j=2,则i数组有一个数，j数组有三个数；依次类推，i=1，i=2；  这两个for到底干嘛用的，为嘛，i非要转为j。

引用 1 楼 不闻窗外事的回复:排序，每次外部的for循环都将最大的值放到后面，也就是说外部的for循环，第一次将最大的值放到最后一个，第二次将第二大的放到最后第二个，依次类推，最终获得从小到大的排序 我是那么理解的，假如i=0，则j=2,则i数组有一个数，j数组有三个数；依次类推，i=1，i=2；  这两个for到底干嘛用的，为嘛，i非要转为j。

从小到大排序, 如果后面的数小于前面的数,交换两个数.

引用 15 楼 wowpH的回复:[quote=引用 14 楼 qq_45804006 的回复:] [quote=引用 11 楼 wowpH的回复:][quote=引用 8 楼 qq_45804006 的回复:] [quote=引用 6 楼 wowpH的回复:]这里面多的很，看哪个最好理解。 http://image.baidu.com/search/index?tn=baiduimage&ct=201326592&lm=-1&cl=2&ie=gb18030&word=%C3%B0%C5%DD%C5%C5%D0%F2%B6%AF%CD%BC&fr=ala&ala=2&alatpl=sp&pos=0 大佬，俺不知道为啥j的最大值是2-i啊。  就是第二for那里  [/quote]因为后面是排好序的。不需要再遍历了。[/quote] 谢谢大佬，大佬祝你好运啊。[/quote]希望有好运。不过你为啥要祝我好运。CSDN论坛新手指南[/quote] 因为好人一生平安啊啊！

机智啊。我真的是太愚蠢了

引用 14 楼 qq_45804006 的回复:[quote=引用 11 楼 wowpH的回复:][quote=引用 8 楼 qq_45804006 的回复:] [quote=引用 6 楼 wowpH的回复:]这里面多的很，看哪个最好理解。 http://image.baidu.com/search/index?tn=baiduimage&ct=201326592&lm=-1&cl=2&ie=gb18030&word=%C3%B0%C5%DD%C5%C5%D0%F2%B6%AF%CD%BC&fr=ala&ala=2&alatpl=sp&pos=0 大佬，俺不知道为啥j的最大值是2-i啊。  就是第二for那里  [/quote]因为后面是排好序的。不需要再遍历了。[/quote] 谢谢大佬，大佬祝你好运啊。[/quote]希望有好运。不过你为啥要祝我好运。CSDN论坛新手指南

引用 11 楼 wowpH的回复:[quote=引用 8 楼 qq_45804006 的回复:] [quote=引用 6 楼 wowpH的回复:]这里面多的很，看哪个最好理解。 http://image.baidu.com/search/index?tn=baiduimage&ct=201326592&lm=-1&cl=2&ie=gb18030&word=%C3%B0%C5%DD%C5%C5%D0%F2%B6%AF%CD%BC&fr=ala&ala=2&alatpl=sp&pos=0 大佬，俺不知道为啥j的最大值是2-i啊。  就是第二for那里  [/quote]因为后面是排好序的。不需要再遍历了。[/quote] 谢谢大佬，大佬祝你好运啊。

崇拜，终于解决了啊😊😊😊😊

引用 4 楼 qq_45804006 的回复:[quote=引用 2 楼 jena_wy的回复:]从小到大排序, 如果后面的数小于前面的数,交换两个数.  我是那么理解的，假如i=0，则j=2,则i数组有一个数，j数组有三个数；依次类推，i=1，i=2；  这两个for到底干嘛用的，为嘛，i非要转为j。[/quote]  建议找一下冒泡排序代码以及冒泡排序的原理～

引用 8 楼 qq_45804006 的回复:[quote=引用 6 楼 wowpH的回复:]这里面多的很，看哪个最好理解。 http://image.baidu.com/search/index?tn=baiduimage&ct=201326592&lm=-1&cl=2&ie=gb18030&word=%C3%B0%C5%DD%C5%C5%D0%F2%B6%AF%CD%BC&fr=ala&ala=2&alatpl=sp&pos=0 大佬，俺不知道为啥j的最大值是2-i啊。  就是第二for那里  [/quote]因为后面是排好序的。不需要再遍历了。

为嘛是i＜2。j＜2-j

引用 6 楼 wowpH的回复:这里面多的很，看哪个最好理解。 http://image.baidu.com/search/index?tn=baiduimage&ct=201326592&lm=-1&cl=2&ie=gb18030&word=%C3%B0%C5%DD%C5%C5%D0%F2%B6%AF%CD%BC&fr=ala&ala=2&alatpl=sp&pos=0 大佬，俺不知道为啥j的最大值是2-i啊。  就是第二for那里

大佬，就是为什么要把i转化为j。  而且为什么是i-j。 其实那个图换来换去俺理解。


Question: C语言如何给指针分配内存？

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

这是个笔记，自问自答

所以，楼主的问题是？


Question: c语言检查不出来错误，但是运行时总是报错，求各路大神赐教

引用 7 楼 qq_45674693 的回复:[quote=引用 6 楼 wowpH的回复:][quote=引用 4 楼 qq_45674693 的回复:] [quote=引用 3 楼 user-2的回复:]你项目里面有两个C文件，都有main函数，这是不允许的，其中一个文件叫做wanzhengshu 谢谢谢谢，真的太优秀了[/quote]不会还不知道项目和main函数是啥吧。CSDN论坛新手指南[/quote] 项目还真不知道是啥意思[/quote]一个项目，也就是工程。大型的项目里面会有各种不同类型的源文件，配置文件，资源文件。通过项目可以集中管理。还有各种特殊配置，这些都是需要记录的。如果零零散散的话是非常不合理的。  main函数是程序执行的入口。如果你的项目里面有多个main函数。那么编译器并不知道该执行哪一个。就会报错。

引用 6 楼 wowpH的回复:[quote=引用 4 楼 qq_45674693 的回复:] [quote=引用 3 楼 user-2的回复:]你项目里面有两个C文件，都有main函数，这是不允许的，其中一个文件叫做wanzhengshu 谢谢谢谢，真的太优秀了[/quote]不会还不知道项目和main函数是啥吧。CSDN论坛新手指南[/quote] 项目还真不知道是啥意思

引用 4 楼 qq_45674693 的回复:[quote=引用 3 楼 user-2的回复:]你项目里面有两个C文件，都有main函数，这是不允许的，其中一个文件叫做wanzhengshu 谢谢谢谢，真的太优秀了[/quote]不会还不知道项目和main函数是啥吧。CSDN论坛新手指南

这种小问题，何必如此夸张，前路艰辛坎坷，需要百倍努力

引用 3 楼 user-2的回复:你项目里面有两个C文件，都有main函数，这是不允许的，其中一个文件叫做wanzhengshu 谢谢谢谢，真的太优秀了

引用 1 楼 user-2的回复:你这个项目里面有两个文件含有main函数 具体什么意思，能再稍微解释一下吗？谢谢

你这个项目里面有两个文件含有main函数


Question: 已知一个二维数组：{{14,26,18,17},{24,37,21,8},{19,31,22,16},{7,19,14,26}}，输出第2行的最大值和第3列的最

请参考

#include<stdio.h> int main() {     int a[4][4]={{14,26,18,17},{24,37,21,8},{19,31,22,16},{7,19,14,26}};     int i,j,max,min=0;      max = min = a[0][0];     for (i = 0; i < 4; i++)         for (j = 0; j < 4; j++) {             if (max < a[i][j])                 max = a[i][j];             if (min > a[i][j])                 min = a[i][j];         }     /*     for(i=0;i<4;i++)     {         //if(i=1)         if(i==1)         {             max=a[1][0];             for(j=1;j<4;j++)             {                 if(a[1][j]>a[1][j+1])                 {                     max=a[1][j];                 }             }         }         for(j=2;j<15;j+=4)         {             if(a[i][j]>a[i][j+3])             {                 min=a[i][j];             }         }     }     */     printf("结果：%d,%d\n",max,min);  } 供参考～

#include<stdio.h> int main() { 	int max1 = 0; 	int max2 = 0; 	int a[4][4] = { { 14, 26, 18, 17 }, { 24, 37, 21, 8 }, { 19, 31, 22, 16 }, { 7, 19, 14, 26 } }; 	int j;  	max1 = a[1][0]; 	for (j = 1; j<4; j++) 	{ 		if (a[1][j]> max1) 		{ 			max1 = a[1][j]; 		} 	} 	max2 = a[0][2]; 	for (j = 1; j < 4; j++) 	{ 		if (a[j][2] > max2) 		{ 			max2 = a[j][2]; 		} 	} 	printf("结果：%d,%d", max1, max2);  	return 0; }

晕，单循环就好了呀，还有j到15是什么鬼啊？最大就3


Question: 求助大佬

为什么不上机运行一下呢？顺便把s， x的值打印出来，可以了解到程序呢的运行顺序～

可以看看符号优先级的表，!是2级     !=是7级      +=是14级     ++是2级，先算2级再7再14，while语句是先判定括号里面的，再执行条件，前++是先把值自增再用自增后的值覆盖原值； 做的多了以后，像!x!=0这种就无所谓优先级，双重否定等于肯定，就是x=0，后面也就是s=s+(++x)，也很明显； 实际工程中很少用到这种写法，比如写x=0比!x!=0简单，多见于教材和习题；

有帮助记得给积分哦

答案是B    ++的优先级高于+= 先算++，再算+=   ！的优先级 高于 ！= 先进行！运算，在判断！=


Question: 这个编程哪错了

循环条件应该是year>2100 后面应该是取模运算吧 不是除法

#include<stdlib.h> #include<stdio.h> //#include<stdio.h>  int main() {     int year;      scanf("%d", &year);      if(year<2000&&year<2100) {         printf("Invalid year!");         return 0;     }      //for(year;year<2100;year++)     for(;year<2100;year++)     {         //if(year/4==0&&year/100!=0&&year/400!=0) countiue;         if((year % 4 == 0 && year % 100 != 0) || (year/400 == 0))             printf("%d ",year);     }     putchar(10);     return 0; } 供参考～ 楼主是想输出闰年吧

应该是取余运算符吧％，不是除／

错误很多吧  int main() {     int year;     scanf("%d",&year);     if(year<2000&&year<2100)    //这个条件有没有写错呢？应该year>2100吧     {         printf("Invalid year!");     }         for(year;year<2100;year++)         {            if(year/4==0&&year/100!=0&&year/400!=0) countiue;            printf("%d",year);          }     }   //这个大括号是多余的吧               else if(year>=2000&&year<2100&&year/4!=0)     {         printf("None\n");     }       return 0; }


Question: 求助

加getchar 和system("pause")

引用 9 楼 有点贪玩的回复:结果都会输出到那个黑框框里 但是有的IDE只要return 0，就把黑框框关了，有的不会关 我这个是Minrosoft Visual C++ 2010 Express，可能是这个软件的原因。

引用 4 楼 有点贪玩的回复:[quote=引用 3 楼 weixin_45718499 的回复:] [quote=引用 1 楼 有点贪玩的回复:]搜一下 error LNK1123吧，代码看着没问题 是我那个软件没设定好，我设定好后，把return 0; 换成getchar () ;他就行了，这两个有什么不同吗？[/quote]  getchar是在等待输入字符 return 0是代表程序正常退出   [/quote] 用return 0的话，它就直接退出，不显示结果吗？

引用 5 楼 棉猴的回复:你的程序是不是一个黑框一闪而过？ #include <stdio.h> #include <stdlib.h> int main() { 	char c1, c2; 	c1 = 65, c2 = 66; 	printf("%c,%c\n", c1, c2); 	printf("%d,%d\n", c1, c2); 	system("pause");//黑框会停住 	return 0; }  VS2015运行结果  对，然后我用getchar() ;才得出你现在给出的那个结果。

引用 3 楼 weixin_45718499 的回复:[quote=引用 1 楼 有点贪玩的回复:]搜一下 error LNK1123吧，代码看着没问题 是我那个软件没设定好，我设定好后，把return 0; 换成getchar () ;他就行了，这两个有什么不同吗？[/quote] 应该是程序执行完return立马返回，你看不到结果。用getchar()还等待你的一个输入；  可以把getchar();改成system("pause"); return 0保留～

引用 3 楼 weixin_45718499 的回复:[quote=引用 1 楼 有点贪玩的回复:]搜一下 error LNK1123吧，代码看着没问题 是我那个软件没设定好，我设定好后，把return 0; 换成getchar () ;他就行了，这两个有什么不同吗？[/quote]  getchar是在等待输入字符 return 0是代表程序正常退出

引用 1 楼 有点贪玩的回复:搜一下 error LNK1123吧，代码看着没问题 是我那个软件没设定好，我设定好后，把return 0; 换成getchar () ;他就行了，这两个有什么不同吗？

文件名最好不要以数字开头

搜一下 error LNK1123吧，代码看着没问题

引用 2 楼 喜欢做我自己的回复:文件名最好不要以数字开头 这里面有什么说法？想知道。


Question: C的函数

引用 4 楼 不好意思的平头哥 的回复:1.为什么你的编译器的io函数，输入到缓存区中不会立刻刷新。 2.没有头文件，sqrt函数编译时会报错  我是持怀疑态度的。你可以贴个代码以及运行截图来看看。

引用 3 楼 wowpH的回复:你说的前两点正常情况下都不成立。 下图为证 1、他会读取第一个有效数据。而不是你说的舍去第一个，读第二个。或者你可以截图来看。可能测试条件不同。 2、你的为0，是因为你没加头文件（非正常情况）。math.h。。  1.为什么你的编译器的io函数，输入到缓存区中不会立刻刷新。 2.没有头文件，sqrt函数编译时会报错

引用 5 楼 wowpH 的回复:[quote=引用 4 楼 不好意思的平头哥 的回复:] 1.为什么你的编译器的io函数，输入到缓存区中不会立刻刷新。 2.没有头文件，sqrt函数编译时会报错  我是持怀疑态度的。你可以贴个代码以及运行截图来看看。[/quote]

引用 5 楼 wowpH的回复:[quote=引用 4 楼 不好意思的平头哥 的回复:] 1.为什么你的编译器的io函数，输入到缓存区中不会立刻刷新。 2.没有头文件，sqrt函数编译时会报错  我是持怀疑态度的。你可以贴个代码以及运行截图来看看。[/quote] 嗯，scanf加上换行符的为什么不会停止读入，而是在读入到第二个非空格停止。

引用 1 楼 user-3 的回复:1.格式里面不要用换行 2.sqrt返回double，格式输出用lf 3.这也会被你发现，我更倾向于你搞错了，更大的可能性是你代码写错了 第3点亮了


Question: 大学c语言教科书上的一道例题。

多看一下后面，那些地方用到了flag，思考一下这些地方用flag用于表示什么，多看几遍代码，发现问题挺好的， 要记着多研究一下为什么会用。

标志变量，顾名思义，一个标志，执行最外面if语句意味着用户输入的值符合三角形的基本条件，其后，用三角形三边去判定是否是直角或等腰，如果是直角或等腰，就会把0赋给flag，那么最后一个if语句就不会执行，反之，前面两个不执行，那么flag的值就还为1，就会执行最后一个if语句。 说到底，flag是最后一个if的判定条件，当然，你也可以不用这个if，把它放到else里面

这个标志就是判断这个三角形是不是特殊三角形（等腰、直角），如果这个标志没有被赋值，就代表这个三角形是普通三角形


Question: C语言小问题

CSDN论坛新手指南

引用 3 楼 bsnow的回复:你可能没有搞清楚 水仙花数的概念。    如果数是3位 如： 153 = 1^3 + 5^3 + 3^3  是水仙花数 但是如果数是1位如： 比如  1 = 1^1     2 = 2^1 所以 1-9就是 水仙花数 再比如数是4位如： 1634 = 1^4 + 6^4 + 3^4 + 4^4  是水仙花数  所以你的问题是在 pow(a,3) 那你默认 数都是3位了。 虽然题目中写了是立方哈 我已经解决了问题 还是谢谢咯

可以跟踪一下啊。 再有，才三位数一定要用循环吗？一个式子就可以搞定的事情

自定义函数里面的a＝a除以10我改正过来了 换成了number＝number除以10 但是程序出现了问题 咋回事？


Question: 大一结课作求助

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

学生管理系统，订票系统等等吧


Question: C语言想要将输入的字符串拆分成单个字符要怎么才行

谢谢上面的几位大佬

getchar();就是一个字符，怎么再拆成字符呢？getchar()不是得到字符串哦。 另外，如果要和EOF比较，建议把c类型改成int

把char先改为string，这才是字符串的定义，然后按这样 len = str.length(); string str; char buf[len]; strcpy(buf, str.c_str());//strncpy(buf, str.c_str(), len);

你这个c只是接受输入的字符，只有单个字符


Question: C语言；n个节点的链表中随机取m个节点（无重复）组成一个新链表，，并打印出来，写出来无错误，但运行不了，能帮忙改下吗，救救孩子

引用 4 楼 自信男孩 的回复：#include<stdio.h> #include<stdlib.h> #include <time.h> //int n,m; //int r,q;  typedef struct node {     int data;     struct node*next; }LA; /*    typedef struct node1    {    int data1;    struct node1*next1;    }LA1;    */ //LA* head, head1; //LA1*head1; //LA1* g; //LA* h; //  LA *create_link(void) {     LA *p, *phead, *last;     int i, n;      printf("input n");     scanf("%d", &n);      phead=NULL;     for(i=1;i<=n;i++)     {         p = (LA*)malloc(sizeof(LA));         p->data = i;         p->next = NULL;          if (!phead) {             phead = p;             last = phead;             continue;         }         last->next = p;         last = p;     }      return phead; }  void show_link(LA *phead) {     LA *pcur = phead;      while (pcur) {         printf("%d\t", pcur->data);         pcur = pcur->next;     }     putchar(10); }  int count_link_len(LA *phead) {     LA *pcur = phead;     int cnt = 0;      while (pcur) {         cnt++;         pcur = pcur->next;     }      return cnt; }  LA *find_key_node(LA **phead, int key) {     LA *prev, *pcur;      pcur = prev = *phead;     while (pcur) {         if (key == pcur->data) {             if (pcur == *phead)                 *phead = (*phead)->next;             else                 prev->next = pcur->next;             return pcur;         }         prev = pcur;         pcur = pcur->next;     }      return NULL; }  LA *create_new_link(LA *phead) {     LA *new_phead = NULL, *pnew, *last;     int len, key, m, i;      srand(time(NULL));     len = count_link_len(phead);     printf("Please input m: ");     scanf("%d", &m);      if (m >= len)         m = len;      i = 0;     while (i < m) {         key = rand() % len + 1;         pnew = find_key_node(&phead, key);         if (!pnew)             continue;         printf("key = %d\n", key);         if (!new_phead) {             new_phead = pnew;             last = new_phead;             i++;             continue;         }         last->next = pnew;         last = pnew;         i++;     }     last->next = NULL;      return new_phead; }    int main() {     LA *phead, *new_phead;      phead = create_link();     show_link(phead);     new_phead = create_new_link(phead);     show_link(new_phead);      return 0; }  供参考～  建议把代码写的更清晰一些，如果把功能放在一起，比较混乱。跪谢了，，救世主啊，我会将代码分析写好，好好学编程的

昨天改了一晚上还不行

自学的链表。可能写的不太好。

救救孩子吧。。。。大佬们


Question: 这个求完数的哪里错了，求指教

引用 3 楼 weixin_45758739 的回复:问一下这个发帖的分数有啥用 对回帖人的一种奖励，然后回帖的人可以用这个分继续提问等等 就是一个虚拟的数字

问一下这个发帖的分数有啥用

引用 1 楼 weixin_45758739 的回复:我的，我看出来了，我是真的傻 你的输入之后首先就判断n, m的大小，然后保证m要大于等于n。但是for循环又从m开始，所以for循环不会执行。  解决办法就是把if判断做一下改动， 改成  if (n < m)

我的，我看出来了，我是真的傻


Question: 模式串匹配

#include <stdio.h> #include <string.h>  int main() {     char str1[100],str2[100];     printf("输入模式串\n");     scanf("%s",str1);     printf("输入匹配串\n");     scanf("%s",str2);          char *index = strstr(str1, str2);          if(index != NULL)     {         printf("%d\n", (int)(index - str1));     }     else     {         printf("Can't find the string: \"%s\"\n", str2);     }           return 0; }

不要用sizeof，用string.h下的strlen来测量字符串的长度会好点，你改改看

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


Question: C语言在屏幕上输出m以内所有满足要求的数。要求：该数除了1和本身之外所有因子之和为n，如果没有满足条件的数则输出"no such numbers"

建议贴出你的代码～


Question: c语言求救，怎么错了

#include<stdio.h> #include<math.h>  main() {     float a,b,c,p,q,s;     scanf("%f%f%f",&a,&b,&c);      if(a+b>c&&a+c>b&&b+c>a)     {         printf("是三角形");         if(a==b&&b==c&&b==c)             printf("等边三角形");         else if(a==b || a==c || b==c)             printf("等腰三角形");         else             printf("不等边三角形");         p=(a+b+c)/2;         q = p*(p-a)*(p-b)*(p-c);         s = sqrt(q);         printf("%f",s);     }     else         printf("不是三角形"); }  供参考～  注意大括号的位置；注意中英文符号～

养成良好代码编写习惯 if (xxx) {     ... } else {     ... }

if (a + b > c&& a + c > b&& b + c > a) printf("是三角形"); {  }//你这里又打印了printf，又加一个大括号，肯定不行吧  还有  main()前面要加一个返回类型吧

应该没有问题呀，报什么错。


Question: 救救孩子

养成良好代码编写习惯 if (xxx) {     ... } else {     ... } 这样可以避免你的错误

把printf("是三角形")；放在第一重if里面去，

你多大了？代码复制粘贴。问题直接说出来。CSDN论坛新手指南


Question: c语言初学，求助，哪里错了

引用 1 楼 有点贪玩的回复:恕我直言，问题发错了，一点缩进都没有，不会发代码块吗？ 对不起。。第一次用，不太会

#include<stdio.h>  void bubble_sort(int *arr, int len);  //void main() int main() {      int num, digit[16];     int i, idx = 0;      scanf("%d", &num);      while (num) {         digit[idx++] = num % 10;         num /= 10;     }     bubble_sort(digit, idx);      num = 0;     i = 0;     while (i < idx) {         num *= 10;         num += digit[i++];     }     printf("%d\n", num); #if 0     int a,b,c,d,e,t;     scanf("%d",&a);     b=a%10;     c=a/10%10;     d=a%100;     if(b<c)     {         e=b;         b=c;         c=e;     }     else if(b<d)     {         e=b;         b=d;         d=e;     }     else if(c<d)     {         e=c;         c=d;         d=e;     }     t=100*b+10*c+d;     printf("%d\n",t); #endif }  void bubble_sort(int *arr, int len) {     int i, j;     int tmp;      for (i = 0; i < len; i++)         for (j = 0; j < len - 1 - i; j++)             if (arr[j] < arr[j+1]) {                 tmp = arr[j];                 arr[j] = arr[j+1];                 arr[j+1] = tmp;             } }  供参考～

d = a % 100; 改为 d = a / 100;

d应该是百位上的数吧，应该用除／运算符，而不是取余 另外代码确实乱

恕我直言，问题发错了，一点缩进都没有，不会发代码块吗？


Question: 这题编译运行正常，不知道错在哪，怎么改正

另外看看你的代码。CSDN论坛新手指南

这是两个题吧？CSDN论坛新手指南

引用 4 楼 qqdreamypp的回复:[quote=引用 2 楼 user-1的回复:]另外看看你的代码。CSDN论坛新手指南 我上面3楼发的这几题图[/quote] 怎么坐，翻译也看不懂，大神求助

引用 2 楼 user-1的回复:另外看看你的代码。CSDN论坛新手指南 我上面3楼发的这几题图


Question: C语言  数据结构

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

引用 4 楼 weixin_45814978的回复:引用 2 楼 weixin_45814978 的回复：引用 1 楼 user-3 的回复：自己搜博客。。。。。你会吗..... 自己回复自己做什么？ 还有，谦虚一点，你是来寻求帮助的。 再有，作业自己做，又不是哥德巴赫猜想。会做的话根本没什么了不起，人家不说不代表不会做，也可能是根本不屑

CSDN论坛新手指南： https://blog.csdn.net/pfdvnah/article/details/102736418?utm_source=app

引用 2 楼 weixin_45814978的回复:引用 1 楼 user-3 的回复：自己搜博客。。。。。你会吗 我会不会不重要。。。。  PS：我应该会。

引用 1 楼 user-3 的回复：自己搜博客。。。。。你会吗

自己搜博客。。。。。


Question: 数据结构（c语言实现）火车票务系统，程序运行出现中断（我只写了一个函数）

下面的scanf都没有写对  scanf("%s,p->data.num"); printf("起始站为："); scanf("%s,p->data.startstation"); printf("终点站为："); scanf("%s,p->data.stopstaion"); printf("首发时间："); scanf("%s,p->data.starttime"); printf("到达时间："); scanf("%s,p->data.stoptime"); printf("票价："); scanf("%f,p->data.price");  应该 		printf("列车号为："); 		scanf("%s",p->data.num); 		printf("起始站为："); 		scanf("%s",p->data.startstation); 		printf("终点站为："); 		scanf("%s",p->data.stopstation); 		printf("首发时间："); 		scanf("%s",p->data.starttime); 		printf("到达时间："); 		scanf("%s",p->data.stoptime); 		printf("票价："); 		scanf("%f",&p->data.price);

scanf那引号和单词拼写错了，我已经改了。但是问题还是那样

0x00000032 处有未经处理的异常: 0xC0000005: Access violation

报错是啥。CSDN论坛新手指南

谢谢大家了，已经解决了

#include <stdio.h> #include <windows.h> #include <time.h> #include <string.h> #include <stdlib.h>   //定义存储火车信息的结构体 typedef struct train {     char num[10]; //列车号     char startstation[20];  //起始站     char stopstation[20];   //终点站     char starttime[10];     //首发时间     char stoptime[10];      //到达时间     double price;           //票价 }DataType; //定义该结构体  //定义存储结点的结构体  typedef struct LNode {     DataType data; //     struct LNode *next; } *LinkList;    void enter(LNode *head) //录入学生信息 {     LinkList p,r; //尾插法，p指向新结点，r指向尾结点     int i,n; //n表示列车数     r=head;     printf("请输入要输入的列车数：");     scanf("%d",&n);     printf("请输入列车信息：");     for(i=1;i<=n;i++);     {         p=(LinkList )malloc(sizeof(LNode));         p->next=NULL;         printf("列车号为：");         //scanf("%s,p->data.num");         scanf("%s", p->data.num);         printf("起始站为：");         //scanf("%s,p->data.startstation");         scanf("%s", p->data.startstation);         printf("终点站为：");         //scanf("%s,p->data.stopstaion");         scanf("%s", p->data.stopstation);         printf("首发时间：");         //scanf("%s,p->data.starttime");         scanf("%s", p->data.starttime);         printf("到达时间：");         //scanf("%s,p->data.stoptime");         scanf("%s", p->data.stoptime);         printf("票价：");         //scanf("%f,p->data.price");         scanf("%lf", &p->data.price);         r->next = p;  //工作指针中的数据付给尾结点         //r=r->next; //尾结点后移         r = p; //尾结点后移         printf("-----------------------------------------\n");     }  }   void menu()     //管理员菜单 {     LNode *head;     head=(LinkList)malloc(sizeof(LNode));     head->next=NULL;     int choice;     //用于记录管理员选择     printf("\t\t\t\t\t/**********欢迎来到管理员系统**********/\n");     printf("\t\t\t\t\t请选择您要进行的操作：\n");     printf("\t\t\t\t\t1、查看所有列车信息\n");     printf("\t\t\t\t\t2、增加列车信息\n");     printf("\t\t\t\t\t3、删除列车信息\n");     printf("\t\t\t\t\t4、修改列车信息\n");     printf("\t\t\t\t\t5、查找列车信息\n");     printf("\t\t\t\t\t6、录入列车信息\n");     printf("\t\t\t\t\t0、退出系统\n");     printf("请选择你要进行的操作（0-6）：\n");     scanf("%d",&choice);     system("cls");     //清屏     switch (choice)     {         case 1:             printf("基本列车信息如下：\n");              break;         case 2:              break;         case 3:              break;         case 4:               break;         case 5:              break;         case 6:             enter(head);             break;         case 0:             system("cls");      //清屏             printf("成功退出系统！！\n");             exit(0);         default :             printf("出错！！！！\n");             // choice1();     } }  int main ()      //主函数 {     system("color 70");     menu();     system("pause");     //防止闪退     return 0; }  供参考～  代码应该编译不过去，对比代码查一下自己的问题～


Question: 最大值和最小值

引用 4 楼 自信男孩的回复:去掉第一个scanf中的\n 另外，C语言好像不支持不确定长度的数组。 所以，数组在定义的时候需要确定其长度。  建议直接贴代码吧～ 谢谢大佬的建议（凑字啦。。。。。）

引用 4 楼 自信男孩的回复:去掉第一个scanf中的\n 另外，C语言好像不支持不确定长度的数组。 所以，数组在定义的时候需要确定其长度。  建议直接贴代码吧～ 好的，下次我直接粘贴代码

各位大佬，谢谢！错误已经改正了！

n是一个未知数,定义数组大小是不对的.

数组的定义有问题吧

截个图吧CSDN论坛新手指南


Question: mqtt协议实现请求/响应的功能。

顶一下。。。。


Question: 谁能帮我看看这个程序哪里不对，只对这个程序进行修改，不需要彻底换掉整个程序

这就能体现字写得好看，而且电脑还用得不够多

为什么不上机自己调试一下呢？建议输入机器，编译运行，以及调试一下。 纸上谈兵对于编程经验帮助很少～

引用 3 楼 cherish＄的回复:已经敲过了，程序有错误 敲过了为什么不复制粘贴代码。   PS：字一般。看着麻烦。

已经敲过了，程序有错误

动手敲一下吧，说不定自己就看出来了。CSDN论坛新手指南

j<10那里手误，主要是别的问题

引用 9 楼 user-5的回复:[quote=引用 7 楼 cherish＄ 的回复:] 嗯，我试了下可以了，谢谢  是我之前说的那个问题么[/quote] 嗯嗯，输出也有点问题

引用 7 楼 cherish＄ 的回复:嗯，我试了下可以了，谢谢  是我之前说的那个问题么

引用 7 楼 cherish＄ 的回复:嗯，我试了下可以了，谢谢及时结贴。CSDN论坛新手指南

嗯，我试了下可以了，谢谢

引用 4 楼 wowpH的回复:[quote=引用 3 楼 cherish＄的回复:]已经敲过了，程序有错误 敲过了为什么不复制粘贴代码。   PS：字一般。看着麻烦。[/quote] . ...  .. ..   .

if（i==j&&j!=0）printf("1");  你这里需要把值赋予给数组吧，而不仅仅是打印出来


Question: c语言编程题

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

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

int a,b,c; scanf("%d%d%d",&a,&b,&c);


Question: C语言：大一卑微小白求助找不到错误

你的退出循环的条件是，y等于0，那么循环里面最后一句b=y，那么b也等于0， 0是不能做分母的。倒数第四行是不合法的。

不要沉，不要沉


Question: C语言结构体问题

引用 7 楼 wowpH的回复:CSDN论坛新手指南 谢谢，我认真读了一下，第一次发帖，经验不足，不好意思

CSDN论坛新手指南

正常引用即可。

引用 2 楼 自信男孩的回复:最好体现到代码里，或者对于自己的怀疑可以用代码试一下，验证一下的～ 可以看一下我下面的回复吗？我写了个例子来表达我不太明白的地方

引用 楼主 qq_45813992的回复:当结构体成员属于另一个结构体类型时，应该如何写输入函数呢？ 比如说: struct Date 	{int month; 		int day; 		int year; 		}; struct Student 		{int num; 			char name[20]; 			char sex; 			int age; 			struct Date birthday; 			char addr[30]; 			}; 最后我应该如何写scanf函数将struct Student中的数据输入呢？

最好体现到代码里，或者对于自己的怀疑可以用代码试一下，验证一下的～

这个问题有点无厘头，没看懂。什么叫如何写输入函数？


Question: c语言程序

double型数据转换成低精度的类型会被系统截断，你看看有没有警告

引用 楼主 qq_45817781的回复:请问是那儿错了呢？ 应该是scanf("%d %d",&a,&b);

引用 8 楼 提及的回复:第一：使用 scanf 时，如果要自定义分割符号，那么输入的时候必须配对 你好像输入的是 点 不是逗号 第二：scanf 使用 %d 及其同类，如果入到非法输入就会退出函数（笔记） 比如： scanf("%d %d",&a, &b),如果一开输入 a吗，那么 a 和 b 都不会赋值，所以最好使用初始化值，避免垃圾值  写代码的时候，该加空格就加，美观一点（通常都是使用 格式化工具的  x=a+b x = a + b  c=a*a+b*b c = a * a + b * b 格式化工具是什么？每次都打空格的化感觉好麻烦。

引用 108 楼 qq_45813444的回复:y未赋值，所以i也是一个随机的数啊，所以i=687194也是正常 嗯，用scanf的，谢！

引用 105 楼 liudachu的回复:可能是变量i没有赋初值 嗯，好的，知道了，谢谢，！

引用 104 楼 wharder的回复:终端输入框里注意是不是英文逗号 嗯，好的，知道了，谢谢。

应该是应该没有初始化变量吧

y未赋值，所以i也是一个随机的数啊，所以i=687194也是正常

哪错了哪错了哪错了哪错了

#include<stdio.h> int main() {  int n,i,Ai,Bi,Ci,Di,Ei;  int A[6],B[6],C[6],D[6],E[6];   while (scanf("%d",&n)!=EOF)   {     if(n<6)   {     for(i=0;i<=n;i++)     {       scanf("%d",&A[i]);       scanf("%d",&B[i]);       scanf("%d",&C[i]);     }     for(i=0;i<=n;i++)     {       Di=Ai+Bi;       Ei=Di*Ci;     }     printf("%5d\n%5d\n",D[i],E[i]);     }   }   return 0;  }

可能是变量i没有赋初值

终端输入框里注意是不是英文逗号

引用 99 楼 weixin_45843310的回复:或者是into double 错了 现在改回来了，谢谢，

引用 97 楼 user-11的回复:直接先赋值看看，然后再看看是不是scanf错了 scanf是对的，谢谢，

引用 100 楼 flf1234567898的回复:你的数据类型使用有问题，一会int和double混合使用，导致你的结果出现截断误差，建议你去看一下数据类型转换 嗯，知道了，谢谢您，

或者是into double 错了

我认为你的if嵌套有问题

直接先赋值看看，然后再看看是不是scanf错了

引用 95 楼 qq_45839786的回复:[quote=引用 12 楼 qq_45817781的回复:][quote=引用 8 楼 提及的回复:]第一：使用 scanf 时，如果要自定义分割符号，那么输入的时候必须配对 你好像输入的是 点 不是逗号 第二：scanf 使用 %d 及其同类，如果入到非法输入就会退出函数（笔记） 比如： scanf("%d %d",&a, &b),如果一开输入 a吗，那么 a 和 b 都不会赋值，所以最好使用初始化值，避免垃圾值  写代码的时候，该加空格就加，美观一点（通常都是使用 格式化工具的  x=a+b x = a + b  c=a*a+b*b c = a * a + b * b 您好: 第一是:我用scanf中的是逗号； 第二是:我用scanf函数时，如果格式控制符之间是空格，有时会发生错误，所以我用逗号隔开。 [/quote] 你不加逗号试试，我用的vs感觉应该可以[/quote] 嗯，现在改好了，谢谢，


Question: c语言

引用 3 楼 自信男孩 的回复:楼主的程序没问题，只是每个printf中都没加换行符，所以所有的输出都是在一行里。  还回复呢。都注销账号了，无语……

没错，就是没有换行，换行要用\n

账号注销了，管理员怎么不删。

请使用\n换行，请及时结贴，谢谢！


Question: 字符数组的定义和引用；输入2个字符串,并将第二个字符串连接在第一个字符串的后面,输出改变后的第一个字符串,不准使用字符串连接函数,要求自己写代码实现相应的功能。

楼主玩这个玩得挺嗨的，我能说什么呢？打好基础比什么都重要！

哈哈哈哈哈玩得嗨哈哈哈哈

sprintf(src, "%s%s", src1, src2) printf(src)

引用 6 楼 自信男孩 的回复:[quote=引用 2 楼 提及 的回复:] 呀，错了，撤销第一句话  改为 scanf  的 兄弟 sscanf 不知道知不知道 好像用snprintf或sprintf吧，不是用sscanf吧  #include "stdio.h" int main() {     //char a[10],b[10];     char a[32],b[32], c[128];     int i, j;      printf("请输入第一个字符串：");     gets(a);      printf("请输入第二个字符串：");     gets(b);  #if 0     i = 0;     while (a[i])         i++;     j = 0;     while (a[i++] = b[j++])         ; #endif     snprintf(c, 128, "%s%s", a, b);     puts(a);     puts(b);     puts(c);     return 0; } 供参考～[/quote]   哈哈哈哈，对

引用 2 楼 提及 的回复:呀，错了，撤销第一句话  改为 scanf  的 兄弟 sscanf 不知道知不知道 好像用snprintf或sprintf吧，不是用sscanf吧  #include "stdio.h" int main() {     //char a[10],b[10];     char a[32],b[32], c[128];     int i, j;      printf("请输入第一个字符串：");     gets(a);      printf("请输入第二个字符串：");     gets(b);  #if 0     i = 0;     while (a[i])         i++;     j = 0;     while (a[i++] = b[j++])         ; #endif     snprintf(c, 128, "%s%s", a, b);     puts(a);     puts(b);     puts(c);     return 0; } 供参考～

#include "stdio.h" int main() {     //char a[10],b[10];     char a[128],b[32];     int i, j;      printf("请输入第一个字符串：");     gets(a);      printf("请输入第二个字符串：");     gets(b);      i = 0;     while (a[i])         i++;     j = 0;     while (a[i++] = b[j++])         ;      puts(a);     puts(b);     return 0; } 供参考～  可以模拟一个strcat的。

引用 2 楼 提及的回复:呀，错了，撤销第一句话  改为 scanf  的 兄弟 sscanf 不知道知不知道 还没学sscanf，我只是提前学一下，看到这个题目，感兴趣

只能说限制不明确，应该改为不准调用库函数，只能是自己的函数

你的 scanf 白学了，   这个不是字符串连接函数，这是字符串格式化函数


Question: c语言

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

i % 10 == 7  取余运算还没学吗？


Question: 这咋做啊用c语言

很基础的C语言题目，我想课本上可能就有这样的例子吧。 查一下对于这样的问题不会，建议找一下自己的原因～


Question: 求助大神>o<

第二题是比较日期外加一个乘法计算？  我有点懵。。。什么鬼题目。CSDN论坛新手指南

https://blog.csdn.net/Java_Dmz/article/details/80868822 比较时间 if(a > 0) {     ... } else {     ... } 多个条件   if(a > 0 && b > 1 && c >2)  if (a > 0 ||  b < 2)

时间的比较方法： 1、分别按年、月、日依次比较。 2、把日期算成时间戳进行比较，时间戳的概念在网上搜下。 3、把日期格式化成固定的字符串YYYYMMDD，然后进行字符串比较 4、把日期格式化成数字yyyy*10000+mm*100+dd,再进行数据的比较

这个方法我知道，就是不知道怎么用C语言表达

引用 2 楼 fireyou的回复:比较时间，过期后欠款金额乘1.1 是不会比较时间吗？ 不知道格式，还不懂设多个变量在if语句中使用

比较时间，过期后欠款金额乘1.1 是不会比较时间吗？