Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: C语言运算符优先级

回复:
user: user-1
content: C语言非零为一

user: user-2
content: 3 + 8 * 4 && 5 || 6 - 4 * 6 --> 3 + 32 && 5 || 6 - 24 --> 35 && 5 || -18 --> true && true || true --> true || true --> true ==> 1

user: user-3
content: C语言中，数学运算符的优先级高于逻辑运算符，所以先算加减乘除，最后剩下两个数先&&然后和最后一个数||的逻辑运算，因为||运算的两边只要有一个1，结果就是1，所以结果为1啰。
user-0 提问: 如何看待一个不会写makefile的图像处理算法工程师？？

回复:
user: user-1
content: 引用 5 楼 图像大师 的回复:[quote=引用 2 楼 走好每一步 的回复：][quote=引用 楼主 图像大师 的回复:] 公司新招了一个图像处理算法工程师，40岁左右，在北京某大型企业工作十余年。最近，我发现这个工程师，居然不会写makefile文件，make一下出错了，就傻眼了。同时，对于重复包含头文件、函数未定义等error也不知如何处理。老板花了大价钱请来的，不知如何评价。  算法是数学，编程不好不奇怪。[/quote]我们是一家规模不大的民企，搞算法的除了研究算法，还得负责把算法移植到板卡，供软件调用。看样子，大企业可能不是我们这玩法[/quote]  规模不大那就没办法了，大公司要的精和专。 小公司要啥都会的

user: user-0
content: 引用 2 楼 走好每一步 的回复：[quote=引用 楼主 图像大师 的回复:] 公司新招了一个图像处理算法工程师，40岁左右，在北京某大型企业工作十余年。最近，我发现这个工程师，居然不会写makefile文件，make一下出错了，就傻眼了。同时，对于重复包含头文件、函数未定义等error也不知如何处理。老板花了大价钱请来的，不知如何评价。  算法是数学，编程不好不奇怪。[/quote]我们是一家规模不大的民企，搞算法的除了研究算法，还得负责把算法移植到板卡，供软件调用。看样子，大企业可能不是我们这玩法

user: user-2
content: 不会写makefile有啥奇怪的呀。不是也有很多人不会写正则表达式吗。临到用时，百度下不就好了。

user: user-3
content: 这很正常啊。比如一个研发汽车发动机的人，你要他会给汽车外壳喷漆？这不扯蛋嘛

user: user-1
content: 引用 楼主 图像大师 的回复:公司新招了一个图像处理算法工程师，40岁左右，在北京某大型企业工作十余年。最近，我发现这个工程师，居然不会写makefile文件，make一下出错了，就傻眼了。同时，对于重复包含头文件、函数未定义等error也不知如何处理。老板花了大价钱请来的，不知如何评价。  算法是数学，编程不好不奇怪。

user: user-4
content: 引用 楼主 图像大师 的回复:公司新招了一个图像处理算法工程师，40岁左右，在北京某大型企业工作十余年。最近，我发现这个工程师，居然不会写makefile文件，make一下出错了，就傻眼了。同时，对于重复包含头文件、函数未定义等error也不知如何处理。老板花了大价钱请来的，不知如何评价。 人家做算法的不一定要写Makefile，不会也正常，我也Makefile也得百度

user: user-5
content: 搜“跟我一起写Makefile”
user-0 提问: 在linux环境下用sqlite3实现学生成绩管理系统（C语言）

回复:
user: user-0
content: 希望有大佬能帮忙解决下

user: user-0
content: 上面的是大概框架.下面的是sprintf.C #include<stdio.h> #include<unistd.h> int main(int argc, char const *argv[]) { 	char name[]="张三"; 	char sex[]="男"; 	int class = 1; 	char kemu[] = "形势与政策"; 	int result = 100; 	char a[300]; 	sprintf(a,"insert into student values(\"%s\",\"%s\",%d,\"%s\",%d);",name,sex,class,kemu,result); 	printf("%s\n",a ); 	return 0; }

user: user-0
content: #include "head.h" #include "sqlite3.h" int i=0; int callback(void * para, int n, char **value, char **name ) { 	int j; 	if (i==0) 	{ 		printf("当前有多少列记录%d\n",n ); 		for(j = 0; j < n; ++j) 		{ 			printf("%s\t",name[j]); 		}  		printf("\n"); 	} 	i=1; 	for(j = 0; j < n; ++j) 	{ 		printf("%s\t",value[j]); 	}  	printf("\n");  	return 0; } int callback1(void * para, int n, char **value, char **name ) {  	printf("\n");  	return 0; } int main(int argc, char const *argv[]) { 	sqlite3 *sq; 	sqlite3_open("xnsydx.db", &sq); /* code */ 	char sql[100]="create table student(name text,number int,sex text,home text,class int);"; 	sqlite3_exec(sq,sql,NULL,NULL,NULL); 	char sel[100]="select * from student;";  	sqlite3_exec(sq,sel,callback1,NULL,NULL); 	i=0; 	insert into student values("%s","%s",%d,"%s",%d);   	******1.xxxx******增加某位学生的成绩记录（姓名，班级，学号，科目名称，成绩） 	******2.xxxx******删除某位学生的记录（计网，形势与政策） 	******3.xxxx******修改某位学生的某一科的成绩 	******4.xxxx******查询，***1，查询学生的全部成绩*** 							***2，按照学生的科目进行查询*** 							***3，按照班级查看学生的成绩***（计算出平均分） 	sprintf 	snprintf 	strcpy       	sqlite3_close(sq);    	return 0; }
user-0 提问: 大佬们求助

回复:
user: user-1
content: scanf("%d,%d",&i1,&i2);

user: user-2
content: scanf("%d,%d",&1,&2);

user: user-3
content: scanf格式输入不符导致的错误，按照格式"%d，%d" 你输入的两个数字之间必须有一个中文的逗号
user-0 提问: C语言递归问题

回复:
user: user-1
content: 递归就是自己调用自己，那么问题出现了，如果一直调用咋个办，难道无穷无尽。所以一定要有结束递归调用的条件，这点很重要，自己调用自己前一定要有终止的条件，否则会堆栈耗尽崩溃。

user: user-2
content: 刚刚看到到的一道算法题，满足下楼主的要求。 C++不用任何算术运算符实现整数加法 int add_no_arithm(int a, int b) {     if (b == 0) return a;     int sum = a ^ b; // add without carrying     int carry = (a & b) << 1; // carry, but don’t add     return add_no_arithm(sum, carry); // recurse } 所谓递归就是自己调用自己，然后满足一定条件后，按调用层次，一层一层的返回。就比如上面的递归函数，当b==0的时候，返回上一层的add_no_arithm的值，上一层又返回它的上一层add_no_arithm的值，直到最外层add_no_arithm

user: user-3
content: 你自己写一个正常的求阶乘的程序，再写一个用递归求阶乘的函数，你比较一下，然后递归的你可以逆推一下，从=1基本条件开始推。

user: user-4
content: 自己网上找个简单的递归程序调试下就懂了

user: user-5
content: “给定一个小点的输入，完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门！ 递归函数关注以下几个因素 ·退出条件 ·参数有哪些 ·返回值是什么 ·局部变量有哪些 ·全局变量有哪些 ·何时输出 ·会不会导致堆栈溢出
user-0 提问: 走台阶递归问题

回复:
user: user-0
content: 引用 10 楼 早打大打打核战争 的回复:这样能够计算的n更大一些，不过就题目中的限制1 <= N <= 30，用int也是可以的 好的，十分感谢！

user: user-1
content: 引用 3 楼 user-4 的回复: #include<stdio.h> int countway(int n); int main() { 	int N; 	int a; 	while (scanf("%d", &N)) { 		a = countway(N); 		printf("%d\n", a); 	} } int countway(int n){ 	if (n < 0) 		return 0; 	else if (n == 0) 		return 1; 	return countway(n - 1) + countway(n - 2) + countway(n - 3); } 非常糟糕的做法

user: user-2
content: 这样能够计算的n更大一些，不过就题目中的限制1 <= N <= 30，用int也是可以的

user: user-0
content: 引用 8 楼 早打大打打核战争 的回复: #include <stdio.h>  int main() {   unsigned int f[31] = {0, 1, 2, 4};    for (int i = 4; i < 31; i++) f[i] = f[i - 1] + f[i - 2] + f[i - 3];   for (int n; scanf("%d", &n) != EOF;) printf("%u\n", f[n]);    return 0; }  可以解释下为什么用unsigned定义吗。。

user: user-3
content: 记忆性递归试试，还不行的话，建议检查下输出格式是否符合要求  引用 2 楼 qq_40103142 的回复:刚开始用递归，后面发现递归会超时就换成了长迭代，但是不知道为什么是wrong answer

user: user-2
content: #include <stdio.h>  int main() {   unsigned int f[31] = {0, 1, 2, 4};    for (int i = 4; i < 31; i++) f[i] = f[i - 1] + f[i - 2] + f[i - 3];   for (int n; scanf("%d", &n) != EOF;) printf("%u\n", f[n]);    return 0; }

user: user-0
content: 用记忆性递归还是不行，提交显示wrong answer，但是题目上只让输出一共有多少中方法，我按照之前一般的输出格式输出的呀，不知道错在哪

user: user-4
content: #include<stdio.h> int main() { 	int N; 	int dp[40] = {0}; 	dp[0] = 1; 	for (int i = 0; i <= 30; i++) { 		dp[i + 1] += dp[i]; 		dp[i + 2] += dp[i]; 		dp[i + 3] += dp[i]; 	} 	while (scanf("%d", &N)) 	 		printf("%d\n",dp[N]); }

user: user-4
content: 记忆性递归（也有人叫备忘录算法），通过存储函数结果，避免重复运算，一定程度上效率接近DP算法  #include<stdio.h> #include<string.h> int countway(int n); int save[50]; int main(){ 	memset(save, -1, sizeof(save)); 	save[0] = 1; 	int N; 	int a; 	while (scanf("%d", &N)) { 		a = countway(N); 		printf("%d\n", a); 	} } int countway(int n){ 	if (n < 0) 		return 0; 	if (save[n] != -1) 		return save[n]; 	return save[n] = countway(n - 1) + countway(n - 2) + countway(n - 3); }

user: user-4
content: #include<stdio.h> int countway(int n); int main() { 	int N; 	int a; 	while (scanf("%d", &N)) { 		a = countway(N); 		printf("%d\n", a); 	} } int countway(int n){ 	if (n < 0) 		return 0; 	else if (n == 0) 		return 1; 	return countway(n - 1) + countway(n - 2) + countway(n - 3); }

user: user-0
content: 刚开始用递归，后面发现递归会超时就换成了长迭代，但是不知道为什么是wrong answer

user: user-3
content: 这哪里是用递归算法了？
user-0 提问: 新手请多关照：有关指针指向常量的一个看法和问题。

回复:
user: user-0
content: 推论我知道了。那假说对吗？

user: user-1
content: 引用 10 楼 weixin_45358177 的回复:搜了，谢谢你！那你觉得我的观点对吗，下午想的一个假说？刚上完高中，也就只能通过运行结果推测还不了解的计算机原理了。 推论错 *p 赋值完全合法 标准也没有忘记相关情况

user: user-0
content: 引用 9 楼 lin5161678的回复:[quote=引用 7 楼 weixin_45358177 的回复:] 谢谢，那么我的观点对吗？还有就是其实只知道C有几个标准，初学者喜欢把名词挂在嘴边，可能是我的小小的虚荣心作祟。说正事：所以未定义行为是说const这句话就没用了吗？ 百度搜索 未定义行为 就可以了[/quote] 搜了，谢谢你！那你觉得我的观点对吗，下午想的一个假说？刚上完高中，也就只能通过运行结果推测还不了解的计算机原理了。

user: user-1
content: 引用 7 楼 weixin_45358177 的回复:谢谢，那么我的观点对吗？还有就是其实只知道C有几个标准，初学者喜欢把名词挂在嘴边，可能是我的小小的虚荣心作祟。说正事：所以未定义行为是说const这句话就没用了吗？ 百度搜索 未定义行为 就可以了

user: user-0
content: 引用 1 楼 轻箬笠的回复:楼主放照片也就算了，竟然还是侧向的。这是考验我们的脖子啊。 我以为你们手机上也有呢😂😂😂

user: user-0
content: 引用 5 楼 lin5161678的回复:标准并没有忘记这种代码  标准把这种代码归类为未定义行为 结果没意义  不应该这样写   顺便说一句 结果未必是 9 9 谢谢，那么我的观点对吗？还有就是其实只知道C有几个标准，初学者喜欢把名词挂在嘴边，可能是我的小小的虚荣心作祟。说正事：所以未定义行为是说const这句话就没用了吗？

user: user-0
content: 引用 1 楼 轻箬笠的回复:楼主放照片也就算了，竟然还是侧向的。这是考验我们的脖子啊。 哈哈，不好意思，拍的时候也不知道，下次竖着拍。

user: user-1
content: 标准并没有忘记这种代码  标准把这种代码归类为未定义行为 结果没意义  不应该这样写   顺便说一句 结果未必是 9 9

user: user-1
content: 引用 3 楼 yunate 的回复:int * p = &a; 这一句编译过不了，除非强转转换一下C++会 C不会

user: user-2
content: int * p = &a; 这一句编译过不了，除非强转转换一下

user: user-2
content: int * p = &a; 这一句编译过不了，除非强转转换一下

user: user-3
content: 楼主放照片也就算了，竟然还是侧向的。这是考验我们的脖子啊。
user-0 提问: Vsc编译器

回复:
user: user-1
content: 不是插件的可以解决的，你创建程序的时候要在向导中选择相应的程序类型 Win32 Application --> WinMain Win32 Console Application --> main  main对应#pragma comment(linker, "/subsystem:console")   WinMain对应#pragma comment(linker, "/subsystem:windows")

user: user-0
content: 还真的可以，谢谢大佬，那是否有什么插件可以解决这个程序类型不匹配呢，嘻嘻嘻嘻

user: user-1
content: 程序类型不匹配 加上以下代码即可  #pragma comment(linker, "/subsystem:console")
user-0 提问: 求大佬帮忙看下这个程序怎么写

回复:
user: user-0
content: 求大佬们帮帮忙，谢谢。

user: user-0
content: 引用参考这方面的开源项目   请问有具体的开源项目的名字吗

user: user-1
content: 参考这方面的开源项目
user-0 提问: PTA平台段错误，好像指针乱飞了，求高人指点，题目是多项式乘法和加法

回复:
user: user-1
content: 在你的 Mult函数中 while (t) { 	if (t->Next->exp == exp)  在这种条件下，怎么可能保证t一定是有后续的呢？！当t->next=NULL时，一定会出现段错误的。  同时，你的多项式乘法函数的算法是完全错误的。

user: user-0
content: 引用 1 楼 自信男孩 的回复：https://blog.csdn.net/wwxy1995/article/details/82561510  供参考～  加法没问题，主要是乘法，问题是出在乘法上。你好，可以具体说说嘛？问题出在哪里？段错误应该是指针的问题吧？

user: user-2
content: https://blog.csdn.net/wwxy1995/article/details/82561510  供参考～  加法没问题，主要是乘法，问题是出在乘法上。

user: user-0
content: 引用 4 楼 weixin_45416408 的回复：还有，抛开答案对错不说，为什么在自己机器上编译运行都没问题呢？

user: user-0
content: 引用 3 楼 coo135 的回复：在你的 Mult函数中 while (t) { 	if (t->Next->exp == exp)  在这种条件下，怎么可能保证t一定是有后续的呢？！当t->next=NULL时，一定会出现段错误的。  同时，你的多项式乘法函数的算法是完全错误的。谢谢谢谢，我比较菜。这段确实有问题，得改进？ 请问一下，当t->next＝null时，最后就是t=null，不就跳出while循环了吗？怎么会段错误呢？😂对不起，我对段错误不太懂，不忙的时候可以说说嘛？
user-0 提问: 急！要求修改C语言代码，使用户登陆路由器时，只能用ip或域名其中之一登陆！

回复:
user: user-0
content: 引用 1 楼 user-1的回复:这问题真是无力吐槽，问得太业余了 工作中的问题，不是业余，有什么好的办法嘛

user: user-1
content: 这问题真是无力吐槽，问得太业余了
user-0 提问: 我问一下csdn的一些C语言编译器是不是有很多支持的地方？

回复:
user: user-0
content: 书上不是这么弄的呀，

user: user-1
content: #include <stdio.h>  int main(void) {     unsigned int un = 3000000000;/* int 是32位数，short是16位数。*/     short end = 200;     long big = 65537;     long long verybig = 12345678908642;      printf("-1 = %u\n", -1);     printf("un = %#x\n", un);     printf("un = %u and ont %d\n", un, un);     printf("end = %hd and %d\n", end, end);     printf("big = %ld and %d\n", big, big);      return 0; }  你的代码没有运行，而是本身就有编译错误。首先编译通过了才会运行，否则运行终止；  un是无符号数，如果用%d输出，那么最高位就是符号位，如上的代码，可以把un按照16进制输出，然后看一下最高位是不是1， 如果是1，那么%d输出的就是负值。 下面的分析和这个一样的。

user: user-2
content: https://docs.microsoft.com/zh-cn/cpp/c-runtime-library/format-specification-syntax-printf-and-wprintf-functions?view=vs-2019
user-0 提问: c的链表糊涂了

回复:
user: user-1
content: 哈哈，你把创建链表以及简单使用的代码看明白你就懂了。

user: user-1
content: 哈哈，你把创建链表以及简单使用的代码看明白你就懂了。

user: user-2
content: 数据结构对单链表进行数据排序 http://bbs.csdn.net/topics/392201633

user: user-3
content: 引用 3 楼 weixin_45378677的回复:[quote=引用 1 楼 user-5的回复:]List  movies; 等价于 Node* movies 链表是一连串的结点（new那才是创建结点），说白了这里只是创建一个指针，用来存放链表头结点的地址 可是在后面例题中，同样的代码List movies;被当做创建了一个链表，真的烦，快被搞炸了[/quote] 链表本身是通过next指针链接的节点链。 所以创建链表首先要创建头节点，或者说你创建一个节点的时候可以把它看做是链表的表头。 只有在把对链表的操作封装到类或者结构体的时候，创建节点和创建链表才有不同。 事实上简单链表类的数据成员也就只有一个节点指针，在创建链表的时候要对它初始化。

user: user-0
content: 引用 1 楼 user-5的回复:List  movies; 等价于 Node* movies 链表是一连串的结点（new那才是创建结点），说白了这里只是创建一个指针，用来存放链表头结点的地址 可是在后面例题中，同样的代码List movies;被当做创建了一个链表，真的烦，快被搞炸了

user: user-4
content: 百度下typedef的作用，不是创建

user: user-5
content: List  movies; 等价于 Node* movies 链表是一连串的结点（new那才是创建结点），说白了这里只是创建一个指针，用来存放链表头结点的地址
user-0 提问: 怎么让手机控制蓝牙模块使继电器开合

回复:
user: user-0
content: 就是在一个单片机的p3.3输入高电平，另外一个单片机dp3.3也输出高电平，单片机要用那一种stc12c2052,或者stc89c52rc，或者stm8s103f3p6系统板，还是Nano V3.0系统板。还有我用的是hc-05蓝牙模块。
user-0 提问: c语言如何跳转

回复:
user: user-1
content: 引用 7 楼 csucxy 的回复:从理论上讲，任何算法都可以不使用goto语句而实现。原则上goto能不用则不用，因为它严重破坏程序的结构性。只有某些特殊情况下，使用goto可以获取极大好处，而又不至于严重破坏程序的结构性、可读性时保守地使用。 我以前也这么认为的，goto破坏了程序的结构性，造成可读性变差。自从我用纯c语言写完一个程序，我发现这完全是扯淡，纯c的程序，稍微复杂点，不用goto，代码更加没法看。

user: user-2
content: 从理论上讲，任何算法都可以不使用goto语句而实现。原则上goto能不用则不用，因为它严重破坏程序的结构性。只有某些特殊情况下，使用goto可以获取极大好处，而又不至于严重破坏程序的结构性、可读性时保守地使用。 至目前为止，本人写程序时还从未使用过goto。至于楼主的问题，必然是具体的问题具体分析。针对楼主贴出的程序，二楼的方案当然是恰当的，只是二楼的while循环形成了死循环，也应该避免，猜测楼主的意思，可改成如下的样子： #include <stdio.h> #include <stdlib.h> #include <time.h>  int main() {     int a, b, c;     while (1)     {         srand((unsigned)time(NULL));         a = (rand() % 5);         b = 2;         c = a + b;          if (c == 3)         {             printf("OK\n");             break;         }         else             printf("不OK\n");     }      return 0; }

user: user-3
content: 最简单的跳转就是goto，而且你稍微动脑子想想就知道goto和label本身就是跳转的最小集了 引用 3 楼 qq_41207969 的回复:[quote=引用 2 楼 自信男孩 的回复:] goto语句都可以用循环或其他语句来替换的，楼上已经帮你解决了，使用while循环 用循环确实可以，但在复杂的程序里面循环用多了不是会显得很复杂嘛，这段代码我就是用来举个例子问一问，就是想问一下有没有跳转语句（一行代码搞定的那种），而且不用像goto一样需要label的[/quote]

user: user-1
content: 跳转需要提供跳转后的地址，goto lable。这里lable就是要去的地址。如果楼主只想跳转，只能写个函数了

user: user-3
content: 你的例子完全不应该用goto，破坏程序可读性 引用 11 楼 qq_41207969 的回复:谢谢各位，我也是之前一直听说goto语句不好用，尽量不要用，刚才试了一下，，，哎呀真香

user: user-0
content: 谢谢各位，我也是之前一直听说goto语句不好用，尽量不要用，刚才试了一下，，，哎呀真香

user: user-4
content: 引用 3 楼 qq_41207969的回复:[quote=引用 2 楼 自信男孩 的回复:] goto语句都可以用循环或其他语句来替换的，楼上已经帮你解决了，使用while循环 用循环确实可以，但在复杂的程序里面循环用多了不是会显得很复杂嘛，这段代码我就是用来举个例子问一问，就是想问一下有没有跳转语句（一行代码搞定的那种），而且不用像goto一样需要label的[/quote] 没有label的跳转机制是怎么知道要跳到哪里去的

user: user-0
content: 引用 2 楼 自信男孩 的回复:goto语句都可以用循环或其他语句来替换的，楼上已经帮你解决了，使用while循环 用循环确实可以，但在复杂的程序里面循环用多了不是会显得很复杂嘛，这段代码我就是用来举个例子问一问，就是想问一下有没有跳转语句（一行代码搞定的那种），而且不用像goto一样需要label的

user: user-5
content: goto语句都可以用循环或其他语句来替换的，楼上已经帮你解决了，使用while循环

user: user-6
content: 弱弱的问一句，使用循环来实现不可以吗？ #include<stdio.h> #include <stdlib.h> #include <time.h> int main() {     int a,b,c;     srand(time(NULL));     while(1){         a=(rand()%5);         b=2;         c=a+b;           if(c==3)             printf("%s\0","OK");         else             printf("%s\0","不OK");     }     return 0; }
user-0 提问: 大佬们教教我

回复:
user: user-1
content: int n[] = { 1,2,3,4,5};	 	int length = sizeof(n) / sizeof(int); 	int loop = length * 2; 	int i = 0, j = 1; 	while (i < loop) { 		printf("%d ", (i < length ? n[i] : n[length - j++])); 		i++; 	}  int n[] = { 1,2,3,4,5,6,7,8,9};好处是不用改n[]下面的程序.

user: user-2
content: void main() {     int n[] = {1,2,3,4,5};     int i=0;     while (i<10) {         printf("%d ", (i<5 ? n[i]: n[4-i%5]));         i++;     } }

user: user-3
content: void main() {     int n[] = {1,2,3,4,5};     int i=0;     while (i<10) {         printf("%d ", (i<5 ? n[i]: n[4-i%5]));         i++;     } } 用while

user: user-3
content: for example void main() {     int n[] = {1,2,3,4,5};     for (int i=0; i<10; i++) {         printf("%d ", (i<5 ? n[i]: n[4-i%5]));     } }
user-0 提问: 为什么这个程序在dev c++里可以正常运行在vs2019里就不可以

回复:
user: user-1
content: 数据结构对单链表进行数据排序 http://bbs.csdn.net/topics/392201633

user: user-2
content: 新建一个空项目  ,新建一个cpp. 粘贴代码 . 然后 项目 -> 属性 -> C/C++ -> 预处理器 -> 预处理器定中添加 _CRT_SECURE_NO_WARNINGS 这个预定义
user-0 提问: 求助一个C语言编程题目

回复:
user: user-1
content: for (int i = 0, n[] = {'A', 'C', 'G', 'T'}; i < 1 << 20; i++, puts(""))     for (int j = 9; j >= 0; j--) printf("%c", n[i >> j * 2 & 3]);

user: user-0
content: 非常感谢，因为初学对这里的位运算还不是很理解，但是在电脑上实现了还是很开心，仿佛打开了新世界的大门😄😄
user-0 提问: malloc函数Debug Assertion Failed!

回复:
user: user-1
content: a=(char *)malloc(100); a="12s"; 如上这两句，第二句已经导致内存泄露了。指针a指向了堆上的100个字节大小的内存空间，但是第二句相当于把指向堆上的空间 改成了字符串常量"12s"了，相当于改变了指针变量里的地址值。后面free(a);已经有问题了，因为现在a指向的是"12s"，不是堆上 开始申请的空间了，所以会有问题。改为： a=(char *)malloc(100); strcpy(a, "12s"); 即可。

user: user-2
content: 两个错误，c数组这样声明长度只有1，c数组赋值没有加\0  char c[10]=""; a=(char *)malloc(100); c[0]='1'; c[1]='2'; c[2]='s'; c[3]='\0'; strcpy(a,c); 引用 3 楼 qq_41207969 的回复:感谢，那么如果需要对a逐位赋值的话应该怎么办？我想着先对一个数组进行赋值，完了再用strcpy拷贝： 	char c[]=""; 	a=(char *)malloc(100); 	c[0]='1'; 	c[1]='2'; 	c[2]='s'; 	strcpy(a,c); 但运行的时候还是12s后面有个问号有个框。。

user: user-0
content: 谢谢两位大佬，问题解决了，笔芯么么哒

user: user-1
content: 引用 3 楼 qq_41207969 的回复:感谢，那么如果需要对a逐位赋值的话应该怎么办？我想着先对一个数组进行赋值，完了再用strcpy拷贝： 	char c[]=""; 	a=(char *)malloc(100); 	c[0]='1'; 	c[1]='2'; 	c[2]='s'; 	strcpy(a,c); 但运行的时候还是12s后面有个问号有个框。。 那是因为没有加'\0'

user: user-0
content: 感谢，那么如果需要对a逐位赋值的话应该怎么办？我想着先对一个数组进行赋值，完了再用strcpy拷贝： 	char c[]=""; 	a=(char *)malloc(100); 	c[0]='1'; 	c[1]='2'; 	c[2]='s'; 	strcpy(a,c); 但运行的时候还是12s后面有个问号有个框。。

user: user-3
content: 引用 1 楼 自信男孩 的回复:a=(char *)malloc(100); a="12s"; 如上这两句，第二句已经导致内存泄露了。指针a指向了堆上的100个字节大小的内存空间，但是第二句相当于把指向堆上的空间 改成了字符串常量"12s"了，相当于改变了指针变量里的地址值。后面free(a);已经有问题了，因为现在a指向的是"12s"，不是堆上 开始申请的空间了，所以会有问题。改为： a=(char *)malloc(100); strcpy(a, "12s"); 即可。 内存泄漏的问题，这位已经说明白了。  针对第二个例子说下。 int output(char *a) { a=(char *)malloc(100); a[0]='1'; a[1]='2'; a[2]='s'; a[3]='\0'; //	a="12s"; printf("%s",a); free(a); return 0; } int main() { char *b; output(b); return 0; } 字符串需要带字符串截止符'\0';
user-0 提问: 求梯形对角线的交点坐标？

回复:
user: user-1
content: 求AD和BC的直线解析式。 然后用直线解析式均线是求交点坐标。

user: user-2
content: https://www.zybang.com/question/698d4b459e366ee73d3033c862b2ffd9.html 参考上面这个，写出直线方程。然后二元一次方程。

user: user-0
content: 哪位大神，可以帮助一下

user: user-3
content: 梯形简单很多啊，中学数学题都不会解了么 以C为原点，A是xa,h  B是xb,h D是xd, 0 解一下两个二元一次方程不就好了
user-0 提问: 对于一个C小白，算法方面有什么书可以借鉴

回复:
user: user-1
content: C小白，《数据结构与算法》一绿皮书足已。建议先把简单的数据结构利用C搞顺溜（数组、链表、二叉树），再去搞搞算法。

user: user-2
content: 刘汝佳的《算法竞赛入门经典》紫皮书。

user: user-3
content: 微积分 概率论 离散数学  数学学得越精通越好  数据结构 算法导论 opencv OpenGL

user: user-4
content: 《算法精解（C语言描述）》

user: user-5
content: 数据结构推介清华邓俊辉的，虽然没看过，不过口碑貌似不错。 中科大的数据结构也不错，不过细节上有些错误，印刷也有些错误，不知道新版有没校正。 《数据结构与算法经典问题解析》、《趣学算法》、《无处不在的算法》都不错 当然少不了《算法》、《算法导论》。 《具体数学》《离散数学及其应用》《组合数学》《图论》《矩阵分析》《TAOCP》多看看、认认真真做些题 线性代数推介李尚志的《线性代数》，比较偏几何技巧，要做图形算法的可以认真学学
user-0 提问: strchr函数的问题

回复:
user: user-1
content: 建议先了解一下这个函数的原理。从网上查一下吧

user: user-2
content: 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。

user: user-3
content: strchr函数功能为在一个串中查找给定字符的第一个匹配之处。函数原型为：char *strchr(const char *str, int c)，即在参数 str 所指向的字符串中搜索第一次出现字符 c（一个无符号字符）的位置。strchr函数包含在C 标准库 <string.h>中。  也就是说strchr说查找给定字符的，查找成功反正所在位置的指针，失败返回null。对于if来说，null表示false，非null表示true
user-0 提问: 求的值总是0，求大佬看看

回复:
user: user-1
content: 15 行   zhi = (double)n / (double)m

user: user-2
content: 值，总是零的原因在于。。你的n和m都是 int型。。。因为都是整形，n小于m时，怎么除都是0。。。  然后，你将0，赋给了 double型的zhi。。。  你吧 m和n，声明为 double型就好啦。

user: user-3
content: 别贴图贴代码

user: user-4
content: getchar函数只能接受单个字符，输入数字也按字符处理。输入多于一个字符时，只接收第一个字符。

user: user-5
content: 把zhi = n/m;改成zhi = n*1.0/m;再试试； 因为n/m是按照整型除法来计算的，后面n*1.0/m是按照双精度浮点数来算除法的。

user: user-6
content: 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。
user-0 提问: 使用CreateFile打开设备，WDK编译没有问题，但使用vs 2015编译无法打开设备

回复:
user: user-1
content: 和用什么编译没关系，只和跑在平台有关

user: user-0
content: 引用 1 楼 user-1的回复:和用什么编译没关系，只和跑在平台有关 同样的代码，在同一台机器上打开同一个设备，vs编译的就是找不到设备
user-0 提问: 对书本上的一个说法存疑。

回复:
user: user-0
content: 引用 2 楼 Italink的回复:char *b =“House”真正的字符串不是b，等号右边的才是真正的字符串，这里赋值只是把常字符串"House"的首地址给了b，也就是b其实是指向的一个常字符串"House"，所以修改b是非法的，后来的标准都不允许出现类似这样的形式：char* = const char* 发现不同了。用字符数组定义字符串是有名字的，而用字符指针时，字符串是没有名字的，是字面变量。是不一样的。谢谢啦，才明白你说的。

user: user-1
content: 不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！

user: user-0
content: 引用 2 楼 Italink的回复:char *b =“House”真正的字符串不是b，等号右边的才是真正的字符串，这里赋值只是把常字符串"House"的首地址给了b，也就是b其实是指向的一个常字符串"House"，所以修改b是非法的，后来的标准都不允许出现类似这样的形式：char* = const char* 没有看明白您的说法中的因果关系，我说一下我的的想法。 首先，“所以”之前的话我是知道的。定义b是字符指针变量，一开始b是字符串的首地址，之后b[2]就是*（b+2）就是'u'。 其次，当时刚学指针时，做交换两个数的值，在被调函数中完成：两个指针形参接受a，b的地址，在被调函数中用指针变量交换，最后主函数里的a，b也交换。基于这个现象，我以为用指针操作是对系统中的内存操作，如果x=&a，*x就是a，所以操作被调函数可以和主函数结果统一。这里的字符串，我开始认为和之前是相同的，b+2就是'u'的地址，对*（b+2）或b[2]操作就是对那个元素操作，我觉得和用已知可以的字符数组操作是一样的，和用指针对数值数组操作也是一样的。这是我目前的看法。 还是说书上这个说法就是这么规定的呢？

user: user-0
content: 引用 1 楼 user-3的回复:看清楚，to是第二个参数是b，不是a WoW，刚发现诶！

user: user-2
content: char *b =“House”真正的字符串不是b，等号右边的才是真正的字符串，这里赋值只是把常字符串"House"的首地址给了b，也就是b其实是指向的一个常字符串"House"，所以修改b是非法的，后来的标准都不允许出现类似这样的形式：char* = const char*

user: user-3
content: 看清楚，to是第二个参数是b，不是a
user-0 提问: memcpy函数怎么把一个序列的k位拷贝到另一个序列的第n~n+k位

回复:
user: user-1
content: memcpy的第一个参数设成你希望起始的地址就好了

user: user-2
content: data[7]是字符，memcpy第一个参数传地址，所以应该改成&data[7]

user: user-3
content: memcpy(&data[7],Buffer,10); 或者 memcpy(data+7,Buffer,10);

user: user-0
content: 代码没贴全，后面fclose和free这些步骤都是有的（因为我的代码有问题，贴全也没必要）

user: user-4
content: data[7]修改成data+7就可以了，另外用malloc要判断返回值，程序结束前需要free掉malloc的内存 这些是良好的习惯
user-0 提问: 用API写的一个文件搜索程序，出现了很神奇的情况，跪求大神来看下

回复:
user: user-1
content: 说白了是你调试能力太差了，所有加list的地方都用fout打印，很难么？ 你容器初始化之后fout打印可能有内容么？这样不就知道哪个流程多出来内容了？ 我上面就是告诉你一会cout 一会fout，然后只贴fout的内容，鬼知道你想表达什么 引用 3 楼 geralt14 的回复:[quote=引用 2 楼 636f6c696e的回复:]没看懂你的逻辑，一会cout一会fout，能不能统一下打印，再仔细描述下你的问题 里面说了fout是用来测试的吧，cout是用来输出结果啊，把list的内部fout出来看下。。下面不是有fout出来的结果截图吗，显示的list内部变化很奇怪啊[/quote]

user: user-1
content: 哪里奇怪了 引用 3 楼 geralt14 的回复:[quote=引用 2 楼 636f6c696e的回复:]没看懂你的逻辑，一会cout一会fout，能不能统一下打印，再仔细描述下你的问题 里面说了fout是用来测试的吧，cout是用来输出结果啊，把list的内部fout出来看下。。下面不是有fout出来的结果截图吗，显示的list内部变化很奇怪啊[/quote]

user: user-0
content: 引用 2 楼 636f6c696e的回复:没看懂你的逻辑，一会cout一会fout，能不能统一下打印，再仔细描述下你的问题 里面说了fout是用来测试的吧，cout是用来输出结果啊，把list的内部fout出来看下。。下面不是有fout出来的结果截图吗，显示的list内部变化很奇怪啊

user: user-1
content: 没看懂你的逻辑，一会cout一会fout，能不能统一下打印，再仔细描述下你的问题

user: user-2
content: 在文件大小相同的前提下：  读刚读过的文件比头次读没读过的文件快  读转速快的硬盘上的文件比读转速慢的硬盘上的文件快  读没有磁盘碎片的文件比读有磁盘碎片的文件快  读文件不处理比边读边处理快  单线程从头到尾一次读文件比多线程分别读文件各部分快（非固态硬盘上）  读固态硬盘上的文件比读普通硬盘上的文件快 遍历文件类似。
user-0 提问: 请教大神：自己实现的简单printf()函数，多个参数处理，不能输出

回复:
user: user-0
content: 貌似不行呢，大神

user: user-1
content: char* str = args; 错了  args 是一个指向栈的指针 你需要将这个指针解引用 才能得到指向你的字符串的指针 char* str = *(char**)args; 就没问题了

user: user-2
content: 你可以找一下关于不定参的文章看一下  #include<stdio.h> #include <stdlib.h> #include<stdarg.h>   void my_printf(const char * format, ...) { 	va_list begin; 	va_start(begin, format); 	if (!format) { 		printf("no data,quit\n"); 		return; 	} 	const char *p = format; 	while (*p != '\0') { 		if (*p == '%') { 			p++; 			if (*p == 's') { 				const char *temp = va_arg(begin, const char *); 				while (*temp)putc(*temp++, stdout); 			} 			else if (*p == 'd') { 				//待实现 			} 		} 		else { 			putc(*p, stdout); 		} 		p++; 	}  }  int main() { 	printf("---test begin---\n"); 	my_printf("Hello,my name is %s,i am %d years old\n", "asdfasdfasf", 50); 	printf("---test end---\n"); 	return 0; }

user: user-3
content: 不定参不能这么写的吧
user-0 提问: void *是在定义什么

回复:
user: user-0
content: 引用 6 楼 自信男孩 的回复:[quote=引用 5 楼 hesoyam119 的回复:] [quote=引用 1 楼 user-4 的回复:] 定义一个可以指向任意类型的指针，使用的时候需要用强制转换 这是一个空指针是吗？我不知道我的函数里接下来要用到什么类型的指针，但一定会用到指针，所以我定义一个放在那里，用的时候转换即可？  麻烦了大神[/quote] 是不是空指针，要看实参，这儿定义的是一个形参。[/quote] 谢谢大神

user: user-1
content: 引用 5 楼 hesoyam119 的回复:[quote=引用 1 楼 user-4 的回复:] 定义一个可以指向任意类型的指针，使用的时候需要用强制转换 这是一个空指针是吗？我不知道我的函数里接下来要用到什么类型的指针，但一定会用到指针，所以我定义一个放在那里，用的时候转换即可？  麻烦了大神[/quote] 是不是空指针，要看实参，这儿定义的是一个形参。

user: user-0
content: 引用 1 楼 user-4 的回复:定义一个可以指向任意类型的指针，使用的时候需要用强制转换 这是一个空指针是吗？我不知道我的函数里接下来要用到什么类型的指针，但一定会用到指针，所以我定义一个放在那里，用的时候转换即可？  麻烦了大神

user: user-0
content: 引用 3 楼 轻箬笠 的回复:void *定义一个通用的指针。 比如 void func(void *p, int type) { if (type == 1) { struct A *pa = (struct A *)p; ... } else if (type == 2) { struct B *pb = (struct B *)p; ... } }  因为任何指针都可以强制转换为void * 秒懂 谢谢大神

user: user-2
content: void *定义一个通用的指针。 比如 void func(void *p, int type) { if (type == 1) { struct A *pa = (struct A *)p; ... } else if (type == 2) { struct B *pb = (struct B *)p; ... } }  因为任何指针都可以强制转换为void *

user: user-3
content: 无类型指针

user: user-4
content: 定义一个可以指向任意类型的指针，使用的时候需要用强制转换
user-0 提问: 四个排序（冒泡排序，选择排序，插入排序，快速排序）

回复:
user: user-1
content: 各种排序算法动画演示http://www.webhek.com/misc/comparison-sort/

user: user-2
content: 这个分数就是奖励给回答你问题的人的。如果你觉得他回答得好，就可以多给几分；回答得不好，就不给分。 你给别人的分数会从你自己的分数里扣除。

user: user-0
content: 第一次发帖，想问下大家这个分数是啥意思
user-0 提问: 请问这个该怎么解决，用dev就没事，用vc2010就报错

回复:
user: user-1
content: vs2010太老了 不支持新的c标准，要么换新版vs，要么在最前面定义c

user: user-2
content: 代码呢

user: user-0
content: 我忽略这个调试错误的弹窗，就输入一个数字，我输入5，最后结果是-4

user: user-0
content: 会出一个调试错误的框，说"b"未在被初始化的情况下使用

user: user-0
content: 引用 1 楼 lin5161678的回复:c先声明 别用vs写c 我这是vc啊，学校里面需要用这个，然后考试也要用vc，你说的先声明我也试过了，又有不一样的报错，

user: user-2
content: c先声明 别用vs写c

user: user-3
content: cpp不是bpp打错了

user: user-3
content: c语言所有变量的定义必须在函数开头部分，这也是与c++的一个区别，你把文件改成bpp估计就不会报错
user-0 提问: 推箱子，但是输出地图后人物不移动实在看不出问题来希望大佬们能给点帮助

回复:
user: user-1
content: 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。

user: user-2
content: 加调试输出呗

user: user-0
content: 引用 1 楼 赵4老师的回复:代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。 已经找到错误了，这些解答
user-0 提问: 野指针

回复:
user: user-1
content: 楼主是读书笔记，有意识去改善自己代码，赞一个

user: user-2
content: 引用 2 楼 636f6c696e 的回复:这代码很多是无意义代码，实际项目中根本不会这么写 毕竟还不是写在项目里的，没必要要求那么高吧。  有意识的去避免野指针/内存泄露还是挺好的，应该支持楼主

user: user-3
content: 这代码很多是无意义代码，实际项目中根本不会这么写

user: user-4

user: user-5
content: 原来还可以在论坛写学习笔记，但分数怎么处理呢？
user-0 提问: 随便做题的时候遇到很诡异的现象，求解惑

回复:
user: user-0
content: 非常感谢，果然不细心，就会有奇奇怪怪的问题出现=-=

user: user-1
content: 随便写的代码，自然会随便出现问题。

user: user-2
content: 和后面count++其实没有直接联系 但是代码是有问题的 前面的循环里i为9的时候  i+1实际上已经越界了,因为没有a[10]这个元素,所以最后的判断将是未知的结果 所以判断循环里i<9才行,然后还得加上数据结尾时的数列,因为后面没有数据了,前面的循环判断不到

user: user-0
content: 具体作用就是输入一段数据，然后找出连续递增或递减数列的个数，并列出来。 代码虽然是随便写的，但很好奇为什么会有这种现象
user-0 提问: 有人能看下我这个搜索文件的程序为什么会出错吗，求高人指点，解决了继续加分 

回复:
user: user-0
content: 引用 1 楼 赵4老师的回复:system("dir /b /a-d c:\\*.* >d:\\allfiles.txt"); //读文件d:\\allfiles.txt的内容即C:\\下所有文件的名字 system("dir /b /a-d /s c:\\*.* >d:\\allfilesinsub.txt"); //读文件d:\\allfilesinsub.txt的内容即C:\\下所有文件的名字包含子目录 system("dir /b /ad  c:\\*.* >d:\\alldirs.txt"); //读文件d:\\alldirs.txt的内容即C:\\下所有子目录的名字 请记住，能用shell命令获取文件、文件夹信息或者操作文件、文件夹最好用shell命令获取或者操作，而不要用各种API获取或者操作，因为当遇到非法文件夹名或非法文件名或非法文件长度、非法文件日期、压缩文件、链接文件、稀疏文件……等各种意料之外的情况时，API会处理的不全面或陷入死循环，而shell命令不会。 如果嫌system黑窗口一闪，将system("...")替换为WinExec("cmd /c ...",SW_HIDE); 好的，我试试，谢谢老师

user: user-1
content: system("dir /b /a-d c:\\*.* >d:\\allfiles.txt"); //读文件d:\\allfiles.txt的内容即C:\\下所有文件的名字 system("dir /b /a-d /s c:\\*.* >d:\\allfilesinsub.txt"); //读文件d:\\allfilesinsub.txt的内容即C:\\下所有文件的名字包含子目录 system("dir /b /ad  c:\\*.* >d:\\alldirs.txt"); //读文件d:\\alldirs.txt的内容即C:\\下所有子目录的名字 请记住，能用shell命令获取文件、文件夹信息或者操作文件、文件夹最好用shell命令获取或者操作，而不要用各种API获取或者操作，因为当遇到非法文件夹名或非法文件名或非法文件长度、非法文件日期、压缩文件、链接文件、稀疏文件……等各种意料之外的情况时，API会处理的不全面或陷入死循环，而shell命令不会。 如果嫌system黑窗口一闪，将system("...")替换为WinExec("cmd /c ...",SW_HIDE);

user: user-0
content: 引用 1 楼 赵4老师 的回复:system("dir /b /a-d c:\\*.* >d:\\allfiles.txt"); //读文件d:\\allfiles.txt的内容即C:\\下所有文件的名字 system("dir /b /a-d /s c:\\*.* >d:\\allfilesinsub.txt"); //读文件d:\\allfilesinsub.txt的内容即C:\\下所有文件的名字包含子目录 system("dir /b /ad  c:\\*.* >d:\\alldirs.txt"); //读文件d:\\alldirs.txt的内容即C:\\下所有子目录的名字 请记住，能用shell命令获取文件、文件夹信息或者操作文件、文件夹最好用shell命令获取或者操作，而不要用各种API获取或者操作，因为当遇到非法文件夹名或非法文件名或非法文件长度、非法文件日期、压缩文件、链接文件、稀疏文件……等各种意料之外的情况时，API会处理的不全面或陷入死循环，而shell命令不会。 如果嫌system黑窗口一闪，将system("...")替换为WinExec("cmd /c ...",SW_HIDE);  老师，我又新开了一贴，能去那个帖子里看下吗，还是这个有新的问题。（不过还是拿API写的，感觉不像老师说的API出错情况啊）
user-0 提问: 是什么的问题啊   大佬们 (我是一名高中生）  

回复:
user: user-1
content: 希望楼主不要犯类似 “早知道吃完第七个包子就饱了，我为什么还要吃前六个包子呢？！” 这种低级错误。

user: user-2
content: 参考：https://blog.csdn.net/gengli2017/article/details/77422432

user: user-3
content: 无法打开pdb不是什么错误。楼主应该聚焦在自己的代码的问题上面

user: user-4
content: 我只知道找不到pdb文件的这一堆是没问题的。我们用VS编译程序，后面链接dll动态链接库的时候都会跟这一句。
user-0 提问: 我是个新学的菜鸟，求帮助

回复:
user: user-0
content: 图片代码，输出的第一行是please score顶行的第二行是liu，前有空格，但是这个空格不是printf（“       liu  ”）中的吗？

user: user-1
content: %6.1f 表示保留一位小数, 整体占6位,不足左侧补空格 比如 printf("%6.1f\n",3.141592f); 输出为    3.1 前面为3个空格

user: user-1
content: %6.1f 表示保留一位小数, 整体占9位,不足左侧补空格 比如 printf("%6.1f\n",3.141592f); 输出为    3.1 前面为3个空格

user: user-2
content: 输出float类型, 6表示设置域为6,即加上标点也只能输出6个字符的浮点数. 1表示输出到小数点后1位.
user-0 提问: C语言程序设计

回复:
user: user-0
content: 引用 1 楼 轻箬笠的回复:定义个数组 char data[13] = {0}; scanf获取输入数据 定义个int数组 int ean[12] = {0}; for (int i = 0; i < 12; i++)    ean[i] = data[i] - '0'; 后面应该就方便了吧 还没看到数组那呢，不会数组，这一章是表达式。数组

user: user-1
content: 定义个数组 char data[13] = {0}; scanf获取输入数据 定义个int数组 int ean[12] = {0}; for (int i = 0; i < 12; i++)    ean[i] = data[i] - '0'; 后面应该就方便了吧
user-0 提问: 新手小白求教

回复:
user: user-1
content: 这个问题大了去了，没有入口函数，还有中文的分号，代码一点也不规范，while循环没有把需要执行的语句用大括标明，都不会向你想的那样执行，这代码简直一塌糊涂，回去先写好hello world吧

user: user-2
content: Hello World都没通关。还是看书吧

user: user-3
content: 大括号不配对，函数名未找到 程序写的很随意

user: user-4
content: 好好看看书先

user: user-5
content: 找本书或者教程基础学起吧，函数都不知道就直接写能写对么
user-0 提问: 萌新求教

回复:
user: user-1
content: 这个提示是在说你strupr未定义、print未定义，print这个是你少些了f，有两处，strupr这个应该是这个编译环境里没有这个函数，你先把这个函数注释掉再运行看看

user: user-2
content: strupr，strlwr、print函数没有定义，引用的string.h有这个方法吗。我所查到的string.h中是没有这两个方法定义的。也没有查到print函数的定义

user: user-3
content: 这样编译是不会错误的，如果错误的，看看是不是自己的编译器配置错了呢？

user: user-3
user-0 提问: c语言编写

回复:
user: user-1
content: 1、字符串的长度最多只能存放 定义的定符数组的长度-1个字符，否则后面的字符就不知道是什么值了，也不知道什么时修改能遇到字符串结束符。 2、你用的是C还是C++,以中字符串的比较不能使用== 3、记得gets函数会在字符串尾部加上回车符，记不清了，你测下长度，和你输入的长度比较下就知道了。

user: user-2
content: char admin1[10],password1[6]; 数组长度不够，没考虑字符串截止符。 改成char admin1[11],password1[7];  引用 1 楼 user-3 的回复:字符串比较应使用strcmp： if(0 == strcmp(admin1 ,"0411180101")  && 0 == strcmp(password1, "171917"")

user: user-3
content: 字符串比较应使用strcmp： if(0 == strcmp(admin1 ,"0411180101")  && 0 == strcmp(password1, "171917"")
user-0 提问: printf函数用了两个预定义宏，warning显示 too many arguments for format [-Wformat-extra-args]

回复:
user: user-1
content: printf("%s(%d): %s() open file %s failed! ", __FILE__,__LINE__,__func__,file);

user: user-1
content: 参考这个 #define Y_DBG(fmt,args...)  printf("=====> %s(%d): %s() "#fmt"\n",__FILE__,__LINE__,__func__,##args)  printf("open file %s failed! ",file,__func__,__LINE__); 改成 printf("%s(%d): %s() open file %s failed! ", __FILE__,__func__,__LINE__,file);

user: user-2
content: __func__宏是字符串，__LINE__宏是数字

user: user-3
content: printf("open file %s，%s, %d failed! ",file,__func__,__LINE__); 前后不对应，所以会有警告～
user-0 提问: 请问各位大神,为什么STM32F103自动重传模式下2个CAN设备同时发送时数据优先级低的发不出去

回复:
user: user-0
content: 但是把自动重传模式关掉就发的出去了

user: user-0
content: 是那个低优级的就没发出去过

user: user-1
content: 说明发送通道一次只能发送一个呀，所以每次都发了高优先级的
user-0 提问: 求代码 谢谢！！

回复:
user: user-1
content: #include<iostream> using namespace std;  int main() {          for(int i = 1; i <= 9; i++)     {         for( int j = 1; j <= i; j++)         {           int a;           cout << j << "*" << i << "=" << i * j << " ";           }            cout << endl;      }     return 0; }

user: user-0
content: 引用 1 楼 main(进击的菜鸟)的回复:去百度都比贴吧问的快 😂好的哈哈哈哈哈哈哈

user: user-2
content: 去百度都比贴吧问的快
user-0 提问: 该版本与你运行的Windows版本不兼容

回复:
user: user-1
content: 怎么看是多少位的程序？ 同样的程序有时候就会发生这种问题，不明白

user: user-0
content: 引用 2 楼 smwhotjay的回复: 16位程序，你编译器不对吧。 同样的情况，无任何更改，有段时间完美运行，不是那个问题

user: user-2
content: 引用 2 楼 smwhotjay 的回复: 16位程序，你编译器不对吧。 +1  另外补充一点，64位的windows中只能运行32位和64位的程序，不能运行16位的程序（不论是windows程序还是dos程序）

user: user-3
content: 16位程序，你编译器不对吧。

user: user-4
content: Visual C++ 2010 Express简体中文版http://pan.baidu.com/s/1bnwRVLt
user-0 提问: 大佬们，为啥会出现3221225477错误

回复:
user: user-1
content: 因为原来的代码中S是一个指针，指针他默认指向的空间是随机的，你还没有给它指向一个变量，访问时当然会越界（据我所知，3221225477是指std::out_of_range）

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

user: user-2
content: 因为定义成指针，那么S是一个野指针，所以S->base就可能会导致段错误， 因为S指向的区域可能是不可写的，那么S->base = xxx;其实就是对其写的操作。

user: user-3
content: theStack *S;表示你声明了一个指向theStack的指针变量，程序运行时它全指针变量分配了内存空间，但是指针的值是无效的。即它没有指向任何的变量，也就是对于这个指针没以有赋值。 theStack S;表示声明了一个theStack的变量，

user: user-4
content: theStack *S是一个空指针，当然会报错 你要么搞成栈内存：theStack S; 要么动态申请：theStack *S =(theStack *) malloc(sizeof(theStack));
user-0 提问: 想问大佬这个是怎么回事

回复:
user: user-1
content: 引用 4 楼 斟秋 的回复:[quote=引用 2 楼 main(进击的菜鸟)的回复:]1、将函数写在主函数前面，否则会有警告：隐式声明函数。若函数写在主函数后面，主函数前面要声明函数。 2、return (z) 应该是return z;(个人认为) but唐浩强那本书上就是这样一模一样[/quote]  书也会有错的，别完全相信

user: user-2
content: 把错误描述复制一下，然后在网上搜一下。可能跟你的编译环境有关系  引用 4 楼 斟秋 的回复:[quote=引用 2 楼 main(进击的菜鸟)的回复:]1、将函数写在主函数前面，否则会有警告：隐式声明函数。若函数写在主函数后面，主函数前面要声明函数。 2、return (z) 应该是return z;(个人认为) but唐浩强那本书上就是这样一模一样[/quote] 谭老师的数也说多个带有main函数的文件一起编译了没？

user: user-0
content: 引用 1 楼 自信男孩的回复:把错误描述复制一下，然后在网上搜一下。可能跟你的编译环境有关系 好的我试试看下......

user: user-0
content: 引用 3 楼 @风轻云淡_的回复:你的这个项目里是不是有多个main函数？ 没有吧好像...我和书上的例题一模一样

user: user-0
content: 引用 2 楼 main(进击的菜鸟)的回复:1、将函数写在主函数前面，否则会有警告：隐式声明函数。若函数写在主函数后面，主函数前面要声明函数。 2、return (z) 应该是return z;(个人认为) but唐浩强那本书上就是这样一模一样

user: user-3
content: 你的这个项目里是不是有多个main函数？

user: user-1
content: 1、将函数写在主函数前面，否则会有警告：隐式声明函数。若函数写在主函数后面，主函数前面要声明函数。 2、return (z) 应该是return z;(个人认为)

user: user-2
content: 把错误描述复制一下，然后在网上搜一下。可能跟你的编译环境有关系
user-0 提问: while里面有getchar的问题

回复:
user: user-0
content: 引用 3 楼 嗯 额的回复:[quote=引用 1 楼 轻箬笠的回复:]你输入1后打回车也算一个字符。 int main() { 	char a = getchar(); 	char b = getchar();      return 0; } 比如上面这个测试代码，如果1，然后回车。a='1'， b='\n';  针对目前这个情况，你加个getchar没事，建议改成 a = getchar(); fflush(stdin); 我试了用fflush，如果有两个字符用getchar赋值，中间加一个fflush不能分两次输入，[/quote] 后面那个getchar直接忽略了

user: user-0
content: 引用 1 楼 轻箬笠的回复:你输入1后打回车也算一个字符。 int main() { 	char a = getchar(); 	char b = getchar();      return 0; } 比如上面这个测试代码，如果1，然后回车。a='1'， b='\n';  针对目前这个情况，你加个getchar没事，建议改成 a = getchar(); fflush(stdin); 我试了用fflush，如果有两个字符用getchar赋值，中间加一个fflush不能分两次输入，

user: user-1
content: 回车也是一个字符，所以你实际输入了1和回车2个字符

user: user-2
content: 你输入1后打回车也算一个字符。 int main() { 	char a = getchar(); 	char b = getchar();      return 0; } 比如上面这个测试代码，如果1，然后回车。a='1'， b='\n';  针对目前这个情况，你加个getchar没事，建议改成 a = getchar(); fflush(stdin);
user-0 提问: 新手请多关照：strcpy函数

回复:
user: user-1
content: 程序问题很多，导致报错原因是Str2空间少1，没有\0，这样strcpy就不知道拷贝了多长的数据导致越界 str1表示也不对，应该改成这样： char str1[11]="1111111111"; char str2[6]="China";

user: user-2
content: str1, str2越界了，定义的时候已经越界了。"China"是5个字符，定义5个字符数组，那么'\0'往哪放？

user: user-3
content: 引用 5 楼 轻箬笠 的回复:[quote=引用 4 楼 weixin_40290083 的回复:] char str1[10]="1111111111"; 这位朋友对于字符串截止符好像也不懂啊[/quote]  没有注意数他的字符串长度，他本身对str1的定义也是有问题的，我想说的是不应该把它放到{}中间。

user: user-4
content: 引用 4 楼 weixin_40290083 的回复:char str1[10]="1111111111"; 这位朋友对于字符串截止符好像也不懂啊

user: user-3
content: char str1[10]="1111111111";

user: user-5
content: 这个应该编译都不过吧，字符串长度都不对

user: user-6
content: 兄弟，与其你过来问那么多问题，还不如好好找本书看下字符串学下基础 你问的这些问题都是对字符串不懂导致的 字符串必须有截止符，所以char数组的长度是字符长度+1

user: user-4
content: 改成char str1[] = "1111111111", str2[] = "China"; 问题原因是数组长度不够，没有保存字符串截止符

user: user-7
content: 字符数组越界了，学习下怎么判断字符串的结束

user: user-8
content: 兄弟，如果你想玩好C，字符比指针更重要！不是指字符函数，就是指单个字符的组成和处理，很简单，别忽视。我是玩嵌入式的，绝大部分操作都以字符（char）作为最底层操作
user-0 提问: 学习C语言

回复:
user: user-1
content: 看你将来想做前端还是后端，前端用的基本就是html+css+js 后端常用的有php   java   c#

user: user-0
content: 引用 3 楼 轻箬笠的回复:html+css+js和C++关联程度很小 知道，但是感觉只学C有点单一了

user: user-2
content: html+css+js和C++关联程度很小

user: user-0
content: 引用 1 楼 user-3的回复:C#C#C# 为什么要学C#呢？

user: user-3
content: C#C#C#
user-0 提问: linux下openssl 命令加密过程是怎么样的？怎么用openssl库来用C代码实现？

回复:
user: user-1
content: 建议查看官方api，下载开源代码，自己编译，然后看着api实现功能，可以参考官方实例和网上资料

user: user-2
content: int decrypt_data(const char *_key, const char *_vt,char *_raw_ptr,size_t _raw_size     , char **_dst_buf, size_t *_dst_size ) {   DES_key_schedule schedule;   uchar key1[8];   des_cblock *iv3;   int pading ;   size_t i, vt_size ;   char *mid_buf;   memset( key1,0,8);   memcpy( key1, _key, 8 );   DES_set_key_unchecked( (const_DES_cblock*)&key1, &schedule);   vt_size = strlen( _vt );   iv3 = (des_cblock *)malloc(vt_size * sizeof(uchar));   memcpy(iv3,_vt,vt_size);   *_dst_buf = (char*)malloc(_raw_size);   DES_cbc_encrypt( (const uchar*)_raw_ptr, *_dst_buf, _raw_size, &schedule, iv3, DES_DECRYPT);   free(iv3);   return 1; } 其中key iv,得先转成8字节的数组,而非命令行的16进制字符串 然后_raw_ptr也要从base64转过来

user: user-3
content: openssl既有命令也有API，具体加密算法都是有专业文档定义每一步过程的

user: user-4
content: 计算机密码学
user-0 提问: 怎么样才能循序渐进地学好编程，从入门到精通呢？

回复:
user: user-0
content: 引用 3 楼 浅笑丷梨花落゛的回复:自定义的max()函数，要放在main()前面 哦哦，明白了，但是我这个也可以，不过好像是要麻烦一些，谢谢大佬哦！

user: user-0
content: 引用 2 楼 main(进击的菜鸟)的回复:先把编程100例吃透，把最基础的掌握了 编程100例是什么呀大佬

user: user-0
content: 引用 1 楼 user-6的回复:return 0;就是返回这个函数，主函数返回就到了操作系统了，所以要加暂时，可以用getchar();system("pause");各种都可以，但是必须在return 之前 循序渐进就是掌握了必须的语法之后，再进一步就是实战了，找个自己感兴趣的东西，从头设计，攻城拔寨，如果觉得自己设计有点吃力，可以找别人好点的代码来读，再进一步改进。做东西期间就会遇到各种问题，不过得过且过，兴趣是最大的老师。 谢谢大佬！我就是现在比较迷茫

user: user-1
content: 先把编程100例吃透，把最基础的掌握了  引用 2 楼 main(进击的菜鸟) 的回复:先把编程100例吃透，把最基础的掌握了 去百度菜鸟教程100例

user: user-2
content: Visual C++ 2010 Express简体中文版http://pan.baidu.com/s/1bnwRVLt C语言教程（附带C语言100例）http://download.csdn.net/detail/zhao4zhong1/8830817

user: user-3
content: 给你个简单直接快速的方法，交费跟项目，前提有基础

user: user-0
content: 好哒，谢谢大佬~有头绪了

user: user-0
content: 引用 12 楼 伽利略打小怪兽的回复:关于闪退， system("pause")； 加在main函数 return之前。 好的，我去试试看

user: user-0
content: 引用 11 楼 伽利略打小怪兽的回复:有两个地方需要指出。 一、定义变量时，请顺便初始化。 int a, b, c,k; 改为 int a = 0, b = 0, c = 0, k = 0;  二、scanf_s对应的输入格式 scanf_s("%d, %d, %d", &a, &b, &c); 若你这样写，则你在输入时应该是这样“1,2,3" + 回车。  再来说说怎样学好编程。 看书+练习。 1、看书时请划出知识点，或在笔记本上划出知识点拓扑图。 2、每看一章，都要思考这一章讲了些什么。 3、一本书至少看三遍，也可以每一章至少看三遍。第一遍快读，看到你认为重要的就勾出来(也不用过多思考)，      第二遍认真阅读，重点思考之前勾画的部分，顺便做好笔记。第三遍是你再通读整本书后，返过来回味，增强记忆的。 4、关于练习，可以多看看各公司笔试题。网上很多。  好了，能说的都在这儿了。编程之路苦逼而漫长，劝君回头是岸。 哇，写的很详细，很专业。真的学到了，谢谢大佬！

user: user-4
content: 关于闪退， system("pause")； 加在main函数 return之前。

user: user-4
content: 有两个地方需要指出。 一、定义变量时，请顺便初始化。 int a, b, c,k; 改为 int a = 0, b = 0, c = 0, k = 0;  二、scanf_s对应的输入格式 scanf_s("%d, %d, %d", &a, &b, &c); 若你这样写，则你在输入时应该是这样“1,2,3" + 回车。  再来说说怎样学好编程。 看书+练习。 1、看书时请划出知识点，或在笔记本上划出知识点拓扑图。 2、每看一章，都要思考这一章讲了些什么。 3、一本书至少看三遍，也可以每一章至少看三遍。第一遍快读，看到你认为重要的就勾出来(也不用过多思考)，      第二遍认真阅读，重点思考之前勾画的部分，顺便做好笔记。第三遍是你再通读整本书后，返过来回味，增强记忆的。 4、关于练习，可以多看看各公司笔试题。网上很多。  好了，能说的都在这儿了。编程之路苦逼而漫长，劝君回头是岸。

user: user-1
content: 引用 5 楼 ELOO丶WLQ 的回复:[quote=引用 2 楼 main(进击的菜鸟)的回复:]先把编程100例吃透，把最基础的掌握了 编程100例是什么呀大佬[/quote] 去百度菜鸟教程100例

user: user-5
content: 自定义的max()函数，要放在main()前面

user: user-1
content: 先把编程100例吃透，把最基础的掌握了

user: user-6
content: return 0;就是返回这个函数，主函数返回就到了操作系统了，所以要加暂时，可以用getchar();system("pause");各种都可以，但是必须在return 之前 循序渐进就是掌握了必须的语法之后，再进一步就是实战了，找个自己感兴趣的东西，从头设计，攻城拔寨，如果觉得自己设计有点吃力，可以找别人好点的代码来读，再进一步改进。做东西期间就会遇到各种问题，不过得过且过，兴趣是最大的老师。
user-0 提问: C语言如何把字符串追加到一个已有字符串的文件中

回复:
user: user-0
content: 引用 4 楼 自信男孩的回复:如果仅仅是把字符串追加到文件中（已经有字符串的文件），那么没必要使用strcat，直接以"a+"的方式打开文件，然后向文件里写字符串就好了。 你程序的问题应该是有两个main函数，可能是编译时另一个文件里也有main，一起编译了。建议查一下自己的编译环境 谢谢大佬，我懂了٩( 'ω' )و

user: user-0
content: 引用 4 楼 自信男孩的回复:如果仅仅是把字符串追加到文件中（已经有字符串的文件），那么没必要使用strcat，直接以"a+"的方式打开文件，然后向文件里写字符串就好了。 你程序的问题应该是有两个main函数，可能是编译时另一个文件里也有main，一起编译了。建议查一下自己的编译环境 那怎么向文件里写字符串？

user: user-1
content: 如果仅仅是把字符串追加到文件中（已经有字符串的文件），那么没必要使用strcat，直接以"a+"的方式打开文件，然后向文件里写字符串就好了。 你程序的问题应该是有两个main函数，可能是编译时另一个文件里也有main，一起编译了。建议查一下自己的编译环境

user: user-0
content: 引用 1 楼 user-2的回复:strcat(str,"\n"); strcat(str,s); 修改一下，用sprintf(str,"\n%s",s); str原来没有初始化，用strcat结果不可预料 还有其他错误吧，还是运行不了有error，求大神发个完整的程序🙏

user: user-0
content: 还有其他错误吧，还是运行不了有error，求大神发个完整的程序😭

user: user-2
content: strcat(str,"\n"); strcat(str,s); 修改一下，用sprintf(str,"\n%s",s); str原来没有初始化，用strcat结果不可预料
user-0 提问: 求大佬帮忙用c语言编一个程序

回复:
user: user-0
content: 引用 2 楼 曾經的過去的回复:最短路径算法吗  。。。 对的。。。。。。。。。

user: user-1
content: 最短路径算法吗  。。。

user: user-0
content: 有大佬吗
user-0 提问: strlen和sizeof的区别

回复:
user: user-1
content: 引用 4 楼 Martin Morning 的回复:[quote=引用 3 楼 636f6c696e的回复:]同意，代码本身就是错的 字符串必须末尾有\0 并不是所有char数组都是字符串 只有字符串才能用strlen获取长度  你的第一个例子，strlen就是内存越界，结果是未定义值 可是我在第一个例子中无论定义多少个字符，l 的结果总是字符个数加1。如果说代码错误，那么到底存在哪呢，能不能具体解释一下[/quote] 因为你的第一个字符数组用strlen的最后大小取决于，这块内存到什么地方有0，你是结果总是字符数加一，是因为首先字符是固定的，那后面内存中什么时候有0呢，你的字符数组分配在栈中，一般来讲，后面的变量分配会占用。具体什么原因，你把字符数组的内存地址打印出来，直接看栈的内容。

user: user-0
content: 引用 3 楼 636f6c696e的回复:同意，代码本身就是错的 字符串必须末尾有\0 并不是所有char数组都是字符串 只有字符串才能用strlen获取长度  你的第一个例子，strlen就是内存越界，结果是未定义值 可是我在第一个例子中无论定义多少个字符，l 的结果总是字符个数加1。如果说代码错误，那么到底存在哪呢，能不能具体解释一下

user: user-2
content: 同意，代码本身就是错的 字符串必须末尾有\0 并不是所有char数组都是字符串 只有字符串才能用strlen获取长度  你的第一个例子，strlen就是内存越界，结果是未定义值

user: user-0
content: 引用 1 楼 lin5161678的回复:代码错 分析结果毫无意义  至于strlen 和 sizeof 请直接百度 第一种赋值方法错了吗，为什么不能这么用

user: user-3
content: 代码错 分析结果毫无意义  至于strlen 和 sizeof 请直接百度

user: user-2
content: 不同环境不同编译器实现不一致，我这边的环境不同字符数结果是不一样的 所以叫做未定义行为 引用 4 楼 Martin Morning 的回复:[quote=引用 3 楼 636f6c696e的回复:]同意，代码本身就是错的 字符串必须末尾有\0 并不是所有char数组都是字符串 只有字符串才能用strlen获取长度  你的第一个例子，strlen就是内存越界，结果是未定义值 可是我在第一个例子中无论定义多少个字符，l 的结果总是字符个数加1。如果说代码错误，那么到底存在哪呢，能不能具体解释一下[/quote]

user: user-4
content: char b[] ="abcde"; 等价于 char b[] = { 'a', 'b', 'c', 'd', 'e', '\0' }; // 字符串是有结束符的 char a[] = { 'a', 'b', 'c', 'd', 'e'}; 等价于 char a[5] = { 'a', 'b', 'c', 'd', 'e'}; --> 注意此时后面没有结束符，strlen(a)的结果取决于a后面的'\0'的位置，但这已经是越界了，结果是错误的
user-0 提问: PAT乙级1080题，测试点3超时，怀疑是给结构体内部数据赋值太费时了

回复:
user: user-1
content: 你贴张图片，让神仙给你找错？代码贴出来，附上题目链接，别人才可以帮你调试，做修改啊

user: user-2
content: 呵呵，看你不知道所以才告诉你的 引用 4 楼 Mr_relativity 的回复:[quote=引用 2 楼 自信男孩的回复:]耗时是时间复杂度大了，影响时间复杂度的主要还是循环次数 这种定义式的回答，我也知道说，但没解答我的问题啊[/quote]

user: user-0
content: 引用 2 楼 自信男孩的回复:耗时是时间复杂度大了，影响时间复杂度的主要还是循环次数 这种定义式的回答，我也知道说，但没解答我的问题啊

user: user-0
content: 引用 1 楼 636f6c696e的回复:单纯的赋值根本不耗多少时间，该优化的是循环 这种定义式的回答，我也知道说，但没解答我的问题啊

user: user-3
content: 不要疑神疑鬼的啦，PAT要求算法的复杂度在N*logN，你这N*N的算法一定超时的。 乙级PAT搞来搞去就是些排序之类的简单算法。  这道题用C语言写，思路如下： 1：首先将学号和在线编程成绩读入到student数组中，期中、期末成绩置-1。 2：按照学号，用快速排序（qsort）对数组进行排序。 3：读入学号、期中成绩，用二分法（bsearch）查找学号，找到则修改对应的期中成绩。 4：读入学号、期末成绩，用二分法（bsearch）查找学号，找到则修改对应的期末成绩；并按规则计算出总成绩； 5：按总成绩、学号，进行快速排序。 6：输出：在线编程成绩>=200并且总成绩>=60 的记录。

user: user-4
content: 耗时是时间复杂度大了，影响时间复杂度的主要还是循环次数

user: user-2
content: 单纯的赋值根本不耗多少时间，该优化的是循环

user: user-0
content: 引用 6 楼 Italink的回复:你贴张图片，让神仙给你找错？代码贴出来，附上题目链接，别人才可以帮你调试，做修改啊 代码怎么贴出来呢，直接粘贴，格式会乱啊

user: user-0
content: 引用 楼主 Mr_relativity的回复:问题描述： 我是一个编程小白，在做PAT乙级1080题目时，自己的程序提交，发现测试点3超时，网上搜索多说是因为循环对比确定学生导致了超时，要用map的方法锁定学生，显然那样做是OK的。 但我发现把我程序中所有循环里的赋值语句删除或者把原本赋值给结构体的语句改为赋值给数组，再提交，就不会超时了（虽然答案还是错误的），这是为什么呢？    为此我一直怀疑赋值给结构体数组很耗时，但就是一个赋值操作，不应该这么耗时啊，求大佬解答！！！！（图片附上题目和代码）  第一张图片是题目，第二张是头文件，第三、四张是第1次的代码截图，第五、六张是第2次代码截图 *****第二次我本来想先在循环里把值赋给三个数组（改成赋给数组之后就不超时了，只是答案错误）。但计算结束后再赋回给结构体数组的操作（就是引用住的那部分赋值语句）居然又导致了超时，种种迹象让我老觉得是赋值给结构体数组导致的超时 题目地址：https://pintia.cn/problem-sets/994805260223102976/problems/994805261493977088

user: user-0
content: 引用 6 楼 Italink的回复:你贴张图片，让神仙给你找错？代码贴出来，附上题目链接，别人才可以帮你调试，做修改啊 哦，我的错；新手，不知道规矩，哈哈(๑>؂<๑）
user-0 提问: pi求法

回复:
user: user-1
content: #include <stdio.h> long a=10000; long b; long c=2800; long d; long e; long f[2801]; long g; int main() {     for(;b-c;) f[b++]=a/5; //  while (1) { //      if (0==b-c) break; //      f[b]=a/5; //      b++; //  }      //f[0 - 2800] = 10000/5     for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a)           for(b=c;d+=f[b]*a,f[b]=d%--g,d/=g--,--b;d*=b); //  while (1) { //      d=0; //      g=c*2; //      if (0==g) break; //      b=c; //      while (1) { //          d+=f[b]*a; //          f[b]=d%--g; //          d/=g--; //          --b; //          if (0==b) break; //          d*=b; //      } //      c-=14; //      printf("%.4d",e+d/a); //      e=d%a; //  }  	return 0; }

user: user-2
content: #include<math.h> 可以去掉的，因为程序里并没有使用数学函数

user: user-3
content: 所以你的问题是什么？秀一段乱命名别人根本看不懂的代码么？
user-0 提问: 成绩统计系统，写入的信息读取不出来

回复:
user: user-1
content: 读文件有问题，你应该能看到编译器给你的警告； 改成如下： fscanf(fp,"%10s,%10s,%8.2f,%8.2f" ,student[i].num, student[i].name,&student[i].c, &student[i].math);

user: user-0
content: 再次运行程序时总会把我上次写入的信息给清掉
user-0 提问: 字符串数组的初始化

回复:
user: user-0
content: 引用 3 楼 636f6c696e的回复:错误代码导致的未定义行为 只能说明编译器中a、b、c是连续内存 所以打印c的时候，由于没有找到截止符'\0'，因此也打印了b的内容 b的长度比较长，一般都会有截止符 可是我把b和a删去了也会出现两次abc？？

user: user-1
content: 错误代码导致的未定义行为 只能说明编译器中a、b、c是连续内存 所以打印c的时候，由于没有找到截止符'\0'，因此也打印了b的内容 b的长度比较长，一般都会有截止符

user: user-0
content: 引用 1 楼 轻箬笠的回复:习惯用第一种。 至于为什么有两个abc，应该说c[]没有字符串截止符 那b为什么就有截止符呢

user: user-2
content: 习惯用第一种。 至于为什么有两个abc，应该说c[]没有字符串截止符

user: user-0
content: 谢谢老哥，你一说我更懂了。不过我已经结贴了

user: user-0
content: 谢谢老哥，你一说我更懂了。不过我已经结贴了

user: user-0
content: 懂了，谢谢老哥。不过我刚刚已经结贴

user: user-3
content: 这个和编译器对局部变量的布局有关，不同的编译器对局部变量有不同的方案 你换一个编译器可能就有不同的结果，因为你的代码中对c变量的写法属于C语言标准中未定义的行为 你可以用printf("%u\n", sizeof(c));看看，结果是3，这说明没有结束符，所以c严格来说不是一个有效的字符串 强行显示会越界直到遇到结束符为止，你的情况刚好越界显示了

user: user-2
content: 引用 2 楼 Martin Morning 的回复:[quote=引用 1 楼 轻箬笠的回复:]习惯用第一种。 至于为什么有两个abc，应该说c[]没有字符串截止符 那b为什么就有截止符呢[/quote] 好像b这种初始化方式，后面没有值的，就都是初始化为0的吧
user-0 提问: 在被调用的函数中定义数组，长度为变量。

回复:
user: user-1
content: vs不支持这个特性 人家定位就是C++ 要测试C语言的一些新特性 换IDE  顺便书里面写错了  变成数组没有分main函数和非main函数 都一样

user: user-1
content: 引用 5 楼 自信男孩 的回复:C++支持可变长数组，C语言还是不支持的。不过，如果想用可变数组也是没问题， 使用malloc/free就可以了。比如你在func中这样使用： int iArray = (int *)malloc(sizeof(int) * n); 用完记着释放错了 C++根本不存在变长数组  变长数组是C语言特性

user: user-1
content: 引用 2 楼 user-4 的回复:[quote=引用 1 楼 weixin_45358177 的回复:] 导致我每次只能用很大的数组下标来开一个很大的空间，才能让我较自由地输入。 你这是什么书，在非托管语言中数组分配在译时必须为确定的空间,要不你就动态分配内存，自己管理，用完释放。[/quote]不是必须

user: user-2
content: C++支持可变长数组，C语言还是不支持的。不过，如果想用可变数组也是没问题， 使用malloc/free就可以了。比如你在func中这样使用： int iArray = (int *)malloc(sizeof(int) * n); 用完记着释放

user: user-3
content: 最新的C语言标准好像可以，换个新的编译器吧

user: user-1
content: 引用 11 楼 自信男孩 的回复:[quote=引用 7 楼 lin5161678 的回复:] [quote=引用 5 楼 自信男孩 的回复:] C++支持可变长数组，C语言还是不支持的。不过，如果想用可变数组也是没问题， 使用malloc/free就可以了。比如你在func中这样使用： int iArray = (int *)malloc(sizeof(int) * n); 用完记着释放错了 C++根本不存在变长数组  变长数组是C语言特性[/quote]  https://www.jianshu.com/p/cdc4c3ffc031  供参考～[/quote] 你的链接很清楚的写了是C99呀 这是C语言标准  C++标准里面没有变长数组这种东西的  C++编译变长数组Error

user: user-2
content: 引用 7 楼 lin5161678 的回复:[quote=引用 5 楼 自信男孩 的回复:] C++支持可变长数组，C语言还是不支持的。不过，如果想用可变数组也是没问题， 使用malloc/free就可以了。比如你在func中这样使用： int iArray = (int *)malloc(sizeof(int) * n); 用完记着释放错了 C++根本不存在变长数组  变长数组是C语言特性[/quote]  https://www.jianshu.com/p/cdc4c3ffc031  供参考～

user: user-0
content: Thank  you！

user: user-0
content: 引用 4 楼 636f6c696e的回复:最新的C语言标准好像可以，换个新的编译器吧 前辈，弱弱地问一句编译器怎么换？

user: user-0
content: 引用 2 楼 user-4的回复:[quote=引用 1 楼 weixin_45358177 的回复:] 导致我每次只能用很大的数组下标来开一个很大的空间，才能让我较自由地输入。 你这是什么书，在非托管语言中数组分配在译时必须为确定的空间,要不你就动态分配内存，自己管理，用完释放。[/quote] 谭浩强的C程序设计第四版。

user: user-4
content: 引用 1 楼 weixin_45358177 的回复:导致我每次只能用很大的数组下标来开一个很大的空间，才能让我较自由地输入。 你这是什么书，在非托管语言中数组分配在译时必须为确定的空间,要不你就动态分配内存，自己管理，用完释放。

user: user-0
content: 导致我每次只能用很大的数组下标来开一个很大的空间，才能让我较自由地输入。
user-0 提问: 求助

回复:
user: user-1
content: “微差事”这样的？据说微差事比较坑

user: user-0
content: 引用 5 楼 仙人板板！的回复:个人接c++开发，性价比最高，毕业课设都可以联系我 我只是额大一学生哈哈哈

user: user-2
content: 个人接c++开发，性价比最高，毕业课设都可以联系我

user: user-3
content: 打工。。。家教。。。

user: user-0
content: 引用 1 楼 user-3的回复:这个可以有，不过商业的一般都是整个项目的，这种也可以找某宝个人，看看有没有专业查错或技术攻关的。 那对于大一的学生有没有啥子适合的赚钱的么

user: user-3
content: 这个可以有，不过商业的一般都是整个项目的，这种也可以找某宝个人，看看有没有专业查错或技术攻关的。
user-0 提问: 关于gets函数，此题为什么只运行一次？

回复:
user: user-0
content: 引用 6 楼 自信男孩的回复:[quote=引用 4 楼 weixin_45358177 的回复:] [quote=引用 2 楼 自信男孩的回复:]在for循环之后加一条语句getchar(); 只执行一次的原因是scanf输入后会把换行符留在输入缓存里，所以遇到gets时直接返回了。 还有一个问题是：为什么在输入三个成绩时 前两个scanf之后不用吸收，而都可以继续输入下一个scanf？@636f6c696e@自信男孩[/quote] 因为前两个输入的是浮点型，%f，回车不会和它匹配。另外，gets可以细查一下实现原理，它是遇到换行符就返回的。[/quote] 那和%s匹配吧？但是这种情况不用getchar没问题。

user: user-0
content: 那么请问怎么同时引用呢？

user: user-1
content: 没有@功能吧，只有引用，你可以引用两个人的回复 引用 7 楼 weixin_45358177 的回复:OK，这下更清楚了。谢谢啦！另外能告一下怎么@吗？

user: user-0
content: OK，这下更清楚了。谢谢啦！另外能告一下怎么@吗？

user: user-2
content: 引用 4 楼 weixin_45358177 的回复:[quote=引用 2 楼 自信男孩的回复:]在for循环之后加一条语句getchar(); 只执行一次的原因是scanf输入后会把换行符留在输入缓存里，所以遇到gets时直接返回了。 还有一个问题是：为什么在输入三个成绩时 前两个scanf之后不用吸收，而都可以继续输入下一个scanf？@636f6c696e@自信男孩[/quote] 因为前两个输入的是浮点型，%f，回车不会和它匹配。另外，gets可以细查一下实现原理，它是遇到换行符就返回的。

user: user-0
content: 引用 1 楼 636f6c696e的回复:用getchar();吸收下第一次输入的回车字符 怎么@呢？每次只能回复一个人吗？而且还得引用改楼的回答。

user: user-0
content: 引用 2 楼 自信男孩的回复:在for循环之后加一条语句getchar(); 只执行一次的原因是scanf输入后会把换行符留在输入缓存里，所以遇到gets时直接返回了。 还有一个问题是：为什么在输入三个成绩时 前两个scanf之后不用吸收，而都可以继续输入下一个scanf？@636f6c696e@自信男孩

user: user-0
content: 嗯，确实可以解决谢谢大家！

user: user-2
content: 在for循环之后加一条语句getchar(); 只执行一次的原因是scanf输入后会把换行符留在输入缓存里，所以遇到gets时直接返回了。

user: user-1
content: 用getchar();吸收下第一次输入的回车字符
user-0 提问: C语言课程设计时排序出现错误

回复:
user: user-1
content: void sort(struct tele *s) {     struct tele a;     int i,j;     for(i=0;i<cur-1;i++)         for(j=0;j<cur-i-1;j++)             if(strcmp(s[j].name, s[j+1].name) > 0)             {                 a=s[j];                 s[j]=s[j+1];                 s[j+1]=a;             }     printf("Done!\n");     press();     return ; } 供参考～  字符串比较应该用字符串函数来处理，而不是直接比较值，那就成了比较地址值了。