Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 蓝桥杯c++练习系统提交总是显示运行错误

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 用一维数组就可以，要点在于杨辉三角形是左右对称的，可以用第n层的前半部分计算出第n+1层的后半部分，再逆序复制到前半部分就完成了:  #include <stdio.h>  int main() {   for (int n; ~scanf("%d", &n) && n > 0 && n < 35;)     for (int i = 1, j, m[35] = {0, 1}; i <= n; i++)     {       for (j = i; j > i / 2; j--) m[j] = m[i - j] + m[i - j + 1];       for (j = 2; j <= i / 2; j++) m[j] = m[i - j + 1];       for (j = 1; j <= i; j++) printf("%d ", m[j]);       puts("");     }    return 0; }

user: user-3
content: //杨辉三角 #include <iostream> using namespace std;   int main() {     int n, **p;     cin >> n;     if(n<1) return 0;     if(n>34) n = 34;     p = new int* [n];     for(int i=0; i<n; i++){         p[i] = new int[2*n];    //二维数组申请完毕     }     for(int i=0; i<n; i++){         p[i][0] = 1;         p[i][i] = 1;     }     for(int i=2; i<n; i++){         for(int j=1; j<i; j++){             p[i][j] = p[i-1][j-1] + p[i-1][j];         }     }     //for(int i=0; i<=n; i++){  //越界 i < n     for(int i=0; i<n; i++){         for(int j=0; j<=i; j++){             cout << p[i][j]<<" ";         }         cout << endl;     }      for (int i = 0; i < n; i++)         delete p[i];     delete p;     return 0; } 供参考～  问题是越界访问了。详见上面的代码；另外，建议加上释放delete空间的操作～

user: user-4
content: 修改如下，供参考：//杨辉三角 #include <iostream> using namespace std;  int main() { 	int n, **p; 	cin >> n; 	if(n<1) return 0; 	if(n>34) n = 34; 	p = new int* [n]; 	for(int i=0; i<n; i++){ 		p[i] = new int[2*n];    //二维数组申请完毕 	} 	for(int i=0; i<n; i++){ 		p[i][0] = 1; 		p[i][i] = 1; 	} 	for(int i=2; i<n; i++){ 		for(int j=1; j<i; j++){ 			p[i][j] = p[i-1][j-1] + p[i-1][j]; 		} 	} 	for(int i=0; i<n; i++){   //for(int i=0; i<=n; i++){ 这句错误，数组越界 		for(int j=0; j<=i; j++){ 			cout << p[i][j]<<" "; 		} 		cout << endl; 	} 	return 0; }  //10 //1 //1 1 //1 2 1 //1 3 3 1 //1 4 6 4 1 //1 5 10 10 5 1 //1 6 15 20 15 6 1 //1 7 21 35 35 21 7 1 //1 8 28 56 70 56 28 8 1 //1 9 36 84 126 126 84 36 9 1 //请按任意键继续. . .
user-0 提问: 关于gets()函数的返回值

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 供参考： //百度百科对fgets函数的解释 //fgtes函数原型是:char *fgets(char *buf, int bufsize, FILE *stream); //从文件结构体指针stream中读取数据，每次读取一行。读取的数据保存在buf指向的字符数组中， //每次最多读取bufsize-1个字符（第bufsize个字符赋'\0'），如果文件中的该行，不足bufsize个字符， //则读完该行就结束。如若该行（包括最后一个换行符）的字符数超过bufsize-1，则fgets只返回一个 //不完整的行，但是，缓冲区总是以NULL字符结尾，对fgets的下一次调用会继续读该行。函数成功将返回buf， //失败或读到文件结尾返回NULL。因此我们不能直接通过fgets的返回值来判断函数是否是出错而终止的，应该 //借助feof函数或者ferror函数来判断。  //参考：https://my.oschina.net/u/3979769/blog/2208662 //下面这种用法，是安全的判断文件读取结束或者出错的好方式，切忌不能使用while(!feof(fp))， //还有对于fgets的第二个参数是最大能读取文件字符的个数，一般最大的长度是1024字节。 //while(fgets(..., stream)){          /* ... */ //}  //if(ferror(stream)){          /* ... */ //}  //stream：文件指针，如果读键盘输入的字符串，固定写为stdin //（1）如果键盘输入的字符个数少于bufsize-1个，函数会将回车录走，输出是将回车打印出来； //（2）如果键盘输入的字符大于bufsize-1个，函数录走bufsize-1个字符后，剩下的字符留在数据缓冲区，下次 //直接读取缓冲区内容，不会等键盘输入而跳过输入，导致输入失败。  //返回值 //1.成功，则返回第一个参数buf； //2.在读字符时遇到eof，则eof指示器被设置，如果还没读入任何字符就遇到这种情况，则buf保持原来的内容，返回NULL； //3.如果发生读入错误，error指示器被设置，返回NULL，buf的值可能被改变。  //如何处理掉换行符？ //遍历字符串，遇到换行符，并将其替换成空字符。遇到空字符，就丢弃输入行剩余的字符。  //为什么要丢弃过长输入行中的余下字符？ //输入行中多出来的字符会被留在缓冲区中，成为下一次读取语句的输入。  //读取整行输入并用空字符代替换行符，或者读取部分输入，并丢弃其余部分 char * s_gets(char *st,int n) { 	char *ret_val; 	int i=0; 	ret_val = fgets(st,n,stdin); 	if(ret_val!=NULL) 	{ 		while(st[i]!='\n' && st[i]!='\0') 			i++;  		if(st[i]=='\n') 			st[i]='\0'; 		else 			while(getchar()!='\n') 				continue; 	} 	return ret_val; }

user: user-3
content: fgets() returns s on success, and NULL on error or when end of file occurs while no characters have been read.  输入EOF就可以返回NULL，输入EOF的方式请详见楼上的回复！

user: user-4
content: windows <enter> <ctrl+z> <enter>  linux <ctrl+d>
user-0 提问: 大一学生，学c语言，这个题我。。。

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-0
content: #include<stdio.h>void pai(int a[],int n);int main(){	int a[1000],b[1000],yin;	int c[500];	int m;	scanf("%d",&m);	for(int j=0;j<m;j++)	{		int n,i;		scanf("%d",&n);		for(i=0;i<n;i++)		{			scanf("%d",&a[i]);		}		for(i=0;i<n;i++)		{			scanf("%d",&b[i]);		}		pai(a,n);  		pai(b,n);		int fast1=0,slow1=n-1,fast2=0,slow2=n-1;		int win=0,lose=0;		for(i=0;i<n;i++)      		{			if(a[fast1]>b[fast2])    			{				win++;				fast1++;				fast2++;			}			else if(a[slow1]>b[slow2])  			{				win++;				slow1--;				slow2--;			}			else			{				if(a[slow1]<b[fast2])				{					lose++;					slow1--;					fast2++;				}			}		yin=(win-lose)*200;	}	c[j]=yin;}    for(int k=0;k<m;k++)    {    	printf("%d\n",c[k]);	}	return 0;}void pai(int a[],int n){	int i,j,temp;	for(i=0;i<n-1;i++)	{		for(j=i+1;j<n;j++)		{			if(a[j]>a[i])			{				temp=a[j];				a[j]=a[i];				a[i]=temp;			}		}	}}嗯 写对了

user: user-2
content: 这题可以用贪心算法来，首先我们只要尽可能多让田忌的马比齐王的马快， 同时要保证刚刚好田忌的马比齐王的马快，同时要保证这匹马是田忌所有比齐王快的马中的速度最小的那匹马， 所以我们可以先给齐王和田忌的马都由小到大排好序，将田忌的马的速度遍历，如果田忌马比齐王马快，记好这匹马，然后 双方的马同时后移就好。

user: user-3

user: user-4
content: 对比2个数据都大于即可
user-0 提问: 请问显示insert为找不到标识符是什么情况

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: #include<stdio.h> #include<malloc.h> #define MAX_SIZE 10 typedef struct {     int* data;     int length;     int Maxsize; }SqeList;  void Insert(SqeList& L);  int main() {     SqeList L;     Insert(L);     return 0; } void Insert(SqeList& L) {     L.data = (int*)malloc(MAX_SIZE * sizeof(int));     L.length = 0;     //L.Maxsize = 10;     L.Maxsize = MAX_SIZE; } 供参考～

user: user-3
content: 调用的函数在main函数之后的话需要声明，之前则不用

user: user-4
content: 函数声明要在前，修改如下，供参考：#include<stdio.h> #include<malloc.h> #define a 10 typedef struct {    int* data;    int length;    int Maxsize; }SqeList;  void Insert(SqeList& L);//函数声明在前  int main() {    SqeList L;    Insert(L);//调用在后    return 0; }  void Insert(SqeList& L) {    L.data = (int*)malloc(a * sizeof(int));    L.length = 0;    L.Maxsize = 10; }

user: user-5
content: 函数写在主函数之后，都必须先生命函数原型。
user-0 提问: 主函数中的代码问题：字符输入超过4个就处于无限输入状态

回复:
user: user-0
content: 谢谢大家，从一个简单的问题把以前学的C语言捡起来一些了

user: user-1
content: 题主的问题给的条件不是很完整，下面我会假设题主的问题在进行解答: 1.这个程序的目的应该是输入一个数字N作为字符长度。 2.之后通过for循环让数组A接受字符。  先讲程序出现的第一个问题 char A[]={'\0'}; 这样定义的数组会根据字符的长度来分配数组长度 所以该段代码相当于 char A[0] = '\0';    (因为'\0' 长度为1) 要实现上面的代码应该给数组分配足够的空间   设置char A[255] = {0}  或者 使用new(这个可以分配任意空间)   就不会出现上面问题。  最后讲讲程序为什么会出现 ’ 输入超过4个就处于无限输入状态 ‘    的问题   编译器会根据变量的顺序来分配空间 所以变量在内存中的形式大概是 A     00 00 00 00   (char类型  4字节    这里虽然为char类型但编译器还是会分配4个字节  ，这个不做深究)  N    00 00 00 00    (int 类型  4字节) i      00 00 00 00    (int 类型  4字节)  讲这个的目的是让你知道，&A[4]  取第5个字节时 实际上是对应N的空间  会改变N的大小 (可以调试或者printf  打印N看看) 所以会导致无限循环，。。。

user: user-2
content: 楼主，数组A只有1个字符的长度，当你输入N>1的时候，数组就越界了，那个>1空间的内容就不可控了，碰运气了。修改如下，供参考：#include<stdio.h> int main() {    int i,N;    char *A;    //char A[]={'\0'}; //这句定义的只是一个字符长度    printf("请输入字符的数量：\n");    scanf("%d",&N);    getchar();    A = new char[N];//动态字符数组    printf("请输入:\n");    for(i=0;i<N;i++)     {       scanf("%c",&A[i]);       printf("A[%d]=%c\n",i,A[i]);//输出 看看是否正确     }    printf("输入完成\n");    delete []A;    return 0; }  //请输入字符的数量： //15 //请输入: //Happy New Year! //A[0]=H //A[1]=a //A[2]=p //A[3]=p //A[4]=y //A[5]= //A[6]=N //A[7]=e //A[8]=w //A[9]= //A[10]=Y //A[11]=e //A[12]=a //A[13]=r //A[14]=! //输入完成 //请按任意键继续. . .

user: user-3
content: 一个简单道理：没被发现错误不等于没有错误。

user: user-3
content: 打一个稍有冒犯但是恰当的比方： 你要是偷了3次东西还没被抓住，你是否认为那是因为3小于等于4呢？

user: user-0
content: 引用 1 楼 user-3的回复:从错误出发得到正确的概率无穷小，得到错误就很正常了。 数组A只有1个字符的长度，所以错了。 但是输入的字符数小于等于4个就可以

user: user-3
content: 从错误出发得到正确的概率无穷小，得到错误就很正常了。 数组A只有1个字符的长度，所以错了。
user-0 提问: 求指导

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-0
content: 引用 1 楼 user-3的回复:你这个照片上的干涉条纹看得我脑壳疼，就不能复制文本发上来吗？  问题大概出在i++上面，因为#define是直接替换的，所以第二张图里的SQ(i++)会被替换成(i++)*(i++), 就多加了一次。 对不起  下次就直接复制粘贴

user: user-2
content: //调用函数时： //1   i=1 -> while(i<=5) -> printf("SQ=%d\n",SQ(i++)); 1*1 =`1,i(i++) = 2; //4   i=2 -> while(i<=5) -> printf("SQ=%d\n",SQ(i++)); 2*2 = 4,i(i++) = 3; //9   i=3 -> while(i<=5) -> printf("SQ=%d\n",SQ(i++)); 3*3 = 9,i(i++) = 4; //16  i=4 -> while(i<=5) -> printf("SQ=%d\n",SQ(i++)); 4*4 =16,i(i++) = 5; //25  i=5 -> while(i<=5) -> printf("SQ=%d\n",SQ(i++)); 5*5 =25,i(i++) = 6; //请按任意键继续. . .

user: user-2
content: 供参考：//带参数的宏定义和函数之间有一定类似之处，但本质上有区别: //1.函数调用时，先求出实参表达式的值，然后代入形参，而使用带参数的宏只是进行字符替换。 //2.函数调用是在程序运行时处理的，为形参分配临时的内存单元。而宏置换则是在预处理阶段进行的，在置换时并不分配内存单元， //不进行值的传递处理，也没有“返回值”的概念。 //3.对函数中的实参和形参都要定义类型，二者的类型要求一致，如不一致，应进行类型转换。而宏不存在类型问题，宏名无类型， //它的参数也无类型，只是一个符号代表，置换时，代入指定的字符串即可。定义宏时，字符串可以是任何类型的数据。 //4.调用函数只可得到一个返回值，而用宏可以设法得到几个结果。 //5.使用宏次数多时，宏展开后源程序变长，因为每展开一次都使程序增长，而函数调用不会使源程序变长。 //6.宏替换不占运行时间，只占预处理时间。而函数调用则占运行时间(分配单元、保留现场、值传递、返回)。  #include<stdio.h> #define SQ(y) ((y)*(y))  //带参数的宏定义:带参数的宏定义不是进行简单的字符串替换，还要进行参数替换 //#define  S(r)  PI*r*r //area=S(a+b);  → area=PI * a+b * a+b; //#define  S(r)  PI*(r)*(r) //area=S(a+b);  → area=PI*(a+b)*(a+b);  int main() {     int i=1;     while(i<=5){         printf("%d\n",SQ(i++));         //这句替换为:         //printf("%d\n",((i++)*(i++)));     }     return 0; }  //2      i=1 -> while(i<=5) -> printf("%d\n",((i++)*(i++))); 1 * (i++)2 =2,  i(i++)=3; //12     i=3 -> while(i<=5) -> printf("%d\n",((i++)*(i++))); 3 * (i++)4 =12, i(i++)=5; //30     i=5 -> while(i<=5) -> printf("%d\n",((i++)*(i++))); 5 * (i++)6 =30, i(i++)=6; //请按任意键继续. . .

user: user-3
content: 你这个照片上的干涉条纹看得我脑壳疼，就不能复制文本发上来吗？  问题大概出在i++上面，因为#define是直接替换的，所以第二张图里的SQ(i++)会被替换成(i++)*(i++), 就多加了一次。
user-0 提问: C语言中的match函数在哪个头文件里？

回复:
user: user-1
content: 新手路过学习。

user: user-2
content: Match函数是Excel中使用较为广泛的一个函数。其主要作用是：在“范围”单元格中搜索特定的项，然后返回该项在此区域中的相对位置。 通俗的将：MATCH函数返回指定值在数组中的位置，如果在数组中没有找到该值则返回…

user: user-3
content: baidu c++ 正则表达式

user: user-4
content: 这个需要自己

user: user-0
content: 引用 1 楼 智者知已应修善业的回复:math.h一般见于C、C++程序设计，#include <math.h> 是包含math头文件的意思， .h是头文件的扩展名（header file），这一句声明了本程序要用到标准库中的 math.h文件。math.h头文件中声明了常用的一些数学运算，比如乘方，开方运算等等。 我要的是match

user: user-2
content: math.h一般见于C、C++程序设计，#include <math.h> 是包含math头文件的意思， .h是头文件的扩展名（header file），这一句声明了本程序要用到标准库中的 math.h文件。math.h头文件中声明了常用的一些数学运算，比如乘方，开方运算等等。

user: user-5
content: C语言没有这个函数 好了 下一题
user-0 提问: 为什么我这代码还是超时

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 学习学习，C没碰过、、

user: user-3
content: 如此说来这就是水题，卡I/O时间而已，C用getline/gets应该也可以过：  #include <stdio.h>  char buf[1048576]; int i, j, n[4] = {0};  int main() {   gets(buf);   for (i = 0; buf[i];) n[buf[i++] & 3]++;   for (i = 1, j = 0; i <= 4; i++) while(n[i & 3]--) buf[j++] = i + 96;   puts(buf);    return 0; }

user: user-4

user: user-5
content: 也就是说像我在17，18楼说的那样， 17 开大缓冲区，整行一次输入即可。 18 系统不会鉴定什么O，都是逗你玩的。

user: user-6
content: 学习一下，问题应该出现在排序算法上

user: user-7
content: 试试这个能不能过#include <stdio.h> #include <stdlib.h>  int cmp(const void *a, const void *b) {     return *(char *)a - *(char *)b; }  int main() {    char ch[1024];    gets(ch);    qsort(ch,strlen(ch),sizeof(char),cmp);    puts(ch);       return 0; }  //abaaccbdbdbdabbabcbcabdcabdcbadbcabdcbadbcbadbcabdcabaaccbdbdbdabbabcbcabdcabdcbadbcabdcbadbcbadbcabdc //aaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbccccccccccccccccccccccdddddddddddddddddddd //请按任意键继续. .

user: user-8
content: 引用 26 楼 m0_55067373 的回复:[quote=引用 22 楼 Chivas_/Regal 的回复:]#include<bits/stdc++.h> using namespace std; int main () {     string s;     cin>>s;     sort(s.begin(),s.end());     cout<<s; }  过了，我看到学校其他成功通过的都是用的c++,c语言提交的都失败了[/quote] 其实如果用一下快排流程的话也可以用C过，我这个sort就是为了方便也懒得打快排了。。。。。

user: user-0
content: 引用 22 楼 Chivas_/Regal 的回复:#include<bits/stdc++.h> using namespace std; int main () {     string s;     cin>>s;     sort(s.begin(),s.end());     cout<<s; }  过了，我看到学校其他成功通过的都是用的c++,c语言提交的都失败了

user: user-9
content: unistd.h time(nullptr)现在时间，结束时-开始时，算下时间有帮助

user: user-9
content: 两下时间。。

user: user-3
content: sort的时间复杂度是O(n*logn)

user: user-8
content: #include<bits/stdc++.h> using namespace std; int main () {     string s;     cin>>s;     sort(s.begin(),s.end());     cout<<s; }

user: user-10
content: test: 'abaaccbdbdbdabbabcbcabdcabdcbadbcabdcbadbcbadbcabdc'.split('').sort((a, b) => a.charCodeAt(0)-b.charCodeAt(0)).join('') res: "aaaaaaaaaaaabbbbbbbbbbbbbbbbbbcccccccccccdddddddddd"

user: user-11
content: 算法的问题了

user: user-5
content: 至于O(n)还是O(1)的，我不认为一个OJ真的能识别得出来，何况大O本来就是个模糊概念。

user: user-5
content: 还有两种可能。 一是行长度确有上限，可以一次一行弄进来在内存里分析，比一次又一次输入快得多。 二是系统输入不止一行却不肯明说，我们处理一行就歇了，当然会超时。

user: user-3
content: 那就是算法的问题了，必须找到更高效的算法

user: user-0
content: 引用 14 楼 早打大打打核战争 的回复:再简化一些：  #include <stdio.h>  int main() {   int n[4] = {0};    for (char c; (c = getchar()) != 10;) n[c & 3]++;   for (int i = 1; i <= 4; i++) while(n[i & 3]--) putchar(i + 96);   puts("");    return 0; }   还是超时。。。

user: user-3
content: 再简化一些：  #include <stdio.h>  int main() {   int n[4] = {0};    for (char c; (c = getchar()) != 10;) n[c & 3]++;   for (int i = 1; i <= 4; i++) while(n[i & 3]--) putchar(i + 96);   puts("");    return 0; }
user-0 提问: 求助，结构体写入出现了错误

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 还有，不能那样初始化FileData，还是老老实实strcpy吧。 说到这里，应该通不过编译才对，谈何运行啊，费解。

user: user-2
content: 补充： 形参里引用字符串都不规范，字符串形参char*类型就可以了，后面的方括号都去掉。 另外对形参字符串sizeof没啥用，还是strlen+1吧。  读文件的函数里居然先读一个字符，然后再读结构体。啃过一口的苹果还拿来卖，你是乔布斯啊？ 读字符和读结构体之间需要rewind或者fseek回去才行。  主函数里的 scanf_s("%s",FileName,29);

user: user-3
content: 代码太长，大概溜了一眼。 首先，MagicNumber[4]的长度为4，FDW1={“SOT\n” 这样的方式赋值造成数组越界（字符串多个\0字符）； 其次，二进制写入文件，文件内容都是二进制，本来就看不到“嘿嘿嘿，测试运行”这样的字符串 第三，FDR1.MagicNumber != “SOT\n” 这样的比较是错的（这是地址比较），字符串比较要用strcmp。

user: user-0
content: "嘿嘿嘿，测试运行'，这句话不知道为什么没有被写入
user-0 提问: 链栈问题

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: p = S; free(p); 不就是free(S)了么

user: user-3
content: #include <stdio.h> #include <stdlib.h> #include <stdbool.h>  //#define Stack_ElemType int typedef  int Stack_ElemType;// int typedef struct StackNode {     struct StackNode* next;     Stack_ElemType data; }StackNode,*LinkStack;  //链栈初始化 // 返回的是链栈的首地址 //StackNode* initStack(LinkStack S) { StackNode* initStack(LinkStack *S) {     *S = (LinkStack)malloc(sizeof(StackNode));     if (*S == NULL) {         printf("内存分配不成功！\n");         return 0;     }//;     (*S)->next = NULL;     return *S; } //; //创建链栈 StackNode* CreatStack(LinkStack S) {     StackNode* p;     int j = 1;     Stack_ElemType t = 0;     while (j) {         printf("请输入栈顶元素,输入-1时结束创建\n ");         //scanf_s("%d", &t);         scanf("%d", &t);         if (t == -1) {             break;         }         p = (LinkStack)malloc(sizeof(StackNode));         if (p == NULL) {  // 动态分配空间后要进行判断否则会有警告             printf("内存分配不成功！\n");             //return 0;             return S;         }//;         p->data = t;         p->next = S;         S = p;     }//;      return S; } // 链栈的压栈 void pushStack(LinkStack &S, Stack_ElemType e) {     StackNode* p;     p = (LinkStack)malloc(sizeof(StackNode));     if (p == NULL) {  // 动态分配空间后要进行判断否则会有警告         printf("内存分配不成功！\n");         return;     }     p->data = e;     p->next = S;     printf("%d\n", p->data);     S = p;// 现在栈顶为刚压栈的p的结点  }; StackNode* popStack(LinkStack S, Stack_ElemType* e) {     StackNode *p;     if (S == NULL) {         //return 0;         return NULL;     }     *e = S->data;     p = S;     S = S->next;     free(p);     return S; }//;  Stack_ElemType StackLenth(StackNode S) {     int i = 1;     StackNode* p;     p = S.next;     while (p) {         p = p->next;         i++;     }//;     return i; }  int main(void) {     StackNode* S;     S = NULL;     Stack_ElemType j = 0;     S = initStack(&S);     S = CreatStack(S);      //for (int i = 0; i < 5; i++) {     for (int i = 0; S; i++) {         S = popStack(S, &j);         if (S)             printf("%d\n", j);     }//;     S = popStack(S, &j);     if (S)         printf("%d\n", j);     return 0; }   供参考～  多处出现了多余的分号;其他问题，供参考～
user-0 提问: 小白请教！！关于二叉树的建立问题（Run-Time Check Failure #2 - Stack around the variable 'tre）

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-0
content: 懂了是我在对树结点的线索进行初始化的时候，传的是一个一级指针的地址，而函数的接收同样是一个一级指针导致出错！
user-0 提问: 单片机89c52  C语言编写秒表遇到K2暂停键时不时失效，求大佬看下代码有什么问题

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 如果概率比较高，在前后加个打印调试下看看

user: user-3
content: 按代码的逻辑看，按键受影响的有2处，主函数和中断，所以有可能在极短时间内调用了2次，所以会产生是不是地现象，因此，需要处理好这2处的逻辑关系。

user: user-3
content: 当然也可能短了，对于主函数中调用来说，同时中断可以影响主函数调用，因此，现象就是时不时地受到影响的结果。

user: user-4
content: 难道不需要消抖么？
user-0 提问: VS Code debug模式无法找到 对应的exe，但是 路径下面是有已编出来的二进制文件。具体配置如下。

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html
user-0 提问: fgets函数使用

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-0
content: 感谢😀😀😀😀

user: user-0
content: 引用 1 楼 user-4的回复:fgets不会返回EOF，因为这个函数是char *类型。 当出错或遇到文件结束，它返回NULL。 感谢感谢😀😀😀😀

user: user-0
content: 引用 2 楼 qybao的回复:fgets的返回值是char* 所以 != EOF 改为 != NULL 谢谢啦😀😀😀😀

user: user-2
content: 参考：https://www.cnblogs.com/coder-jhm1314/articles/4561006.html

user: user-3
content: fgets的返回值是char* 所以 != EOF 改为 != NULL

user: user-4
content: fgets不会返回EOF，因为这个函数是char *类型。 当出错或遇到文件结束，它返回NULL。
user-0 提问: oj题目，为什么ac不过

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 供参考：#include<stdio.h> #define MAX 1000//最大输入个数  int bubbleSort(int *A,int len)//排序 {    int i,j,t;    for(i = 0;i < len-1;i++)    {       for(j = 0;j < len-i-1;j++)       {          if(A[j] > A[j+1])          {             t = A[j+1];             A[j+1] = A[j];             A[j] = t;          }       }    } }  int bingji(int *A,int *B,int lenA,int lenB)//并集 {    int i,j;    int flag,index = lenB;    int *buffer = (int *)malloc(sizeof(int) * (lenA+lenB));    for(i = 0;i< lenA+lenB;i++)//初始化buffer空间。    {       buffer[i] = -1;    }    for(i = 0;i < lenB;i++)    {       buffer[i] = B[i];    }    for(i = 0;i < lenA;i++)    {       flag = 1;       for(j = 0;j < lenB;j++)       {          if(A[i] == B[j])          {             flag = 0;          }       }       if(flag)       {          buffer[index] = A[i];          index++;       }    }    bubbleSort(buffer,lenA+lenB);//排序    for(i = 0;i < lenA+lenB;i++)    {       if(buffer[i] != -1)       printf("%d ",buffer[i]);    }    printf("\n");    free(buffer); }  int jiaoji(int *A,int *B,int lenA,int lenB)//交集 {    int i,j;    int flag,index = 0,len = lenA > lenB ? lenA:lenB;    int *buffer = (int *)malloc(sizeof(int) * len);    for(i = 0;i < lenA;i++)    {       flag = 0;       for(j = 0;j < lenB;j++)       {          if(A[i] == B[j])             flag = 1;       }       for(j = 0;j < index;j++)       {          if(A[i] == buffer[j])             flag = 0;       }       if(flag)       {          buffer[index] = A[i];          index++;       }    }    bubbleSort(buffer,index);//排序    for(i = 0;i< index;i++)       printf("%d ",buffer[i]);    printf("\n");    free(buffer); }  int yuji(int *A,int *B,int lenA,int lenB)//余集 {    int i,j;    int flag,index = 0;    int *buffer = (int *)malloc(sizeof(int) * lenA);    for(i = 0;i < lenA;i++)    {       flag = 1;       for(j = 0;j < lenB;j++)       {          if(A[i] == B[j])             flag = 0;       }       if(flag)       {          buffer[index] = A[i];          index++;       }    }    bubbleSort(buffer,index);//排序    for(i = 0;i < index;i++)       printf("%d ",buffer[i]);    printf("\n");    free(buffer); }  int main() {    int a[MAX],b[MAX];//集合    int i = 0,m = 0,n = 0;    scanf("%d",&n);    for(i = 0;i < n;i++)       scanf("%d",&a[i]);     scanf("%d",&m);    for(i = 0;i < m;i++)       scanf("%d",&b[i]);    printf("\n");     jiaoji(a,b,n,m);//交集    bingji(a,b,n,m);//并集    yuji(a,b,n,m);//余集        return 0; }

user: user-3
content: 我是说题目本身自相矛盾，你怎么写代码有可能是白费力气。

user: user-0
content: 引用 1 楼 user-3 的回复:样例输出与题目要求不符，pass 输出一致啊，不信你自己运行一下看看

user: user-3
content: 样例输出与题目要求不符，pass
user-0 提问: 我想把文件里的内容读取出来并且存到结构体中，在写完第一个程序的时候，运行结果如第一个所示，第二个程序运行结果如第二个图所示，看起来是文件中的内容没能读取出来。

回复:
user: user-0
content: 引用 4 楼 自信男孩的回复:程序2具有相同的问题，建议改一下～ 谢谢谢谢，已经改好了，非常感谢

user: user-1
content: 程序2具有相同的问题，建议改一下～

user: user-1
content: #include<stdio.h> #include<string.h> #include<stdlib.h>  int main(void) {     FILE *fp;     fp=fopen("access.log","r+");     if(!fp){         printf("false");         return -1;    //直接返回     }     else{         printf("true");     }     char method[255];     char ip[255];     char protocol[255];     char time[255];     char add[255];     int port;     char page[255];     int status;     char exploer_info[255];     char key;     char value;      //while(port=getc(fp)!=EOF)     while((port=getc(fp))!=EOF)     {         putchar(port);         struct record         {             char method[255];             char ip[255];             char protocol[255];             char time[255];             char add[255];             char port;             char page[255];             char status;             char exploer_info[255];             struct prams             {                 char key[255];                 char value[255];             };             char prams_cnt;         };         fgets(method,100,fp);     }     printf("%s",method);     int fclose(FILE *fp);     return 0; } 程序1有问题；详见注释掉的那句；

user: user-0
content: 引用 1 楼 user-2的回复:你的代码很难受。。。首先所有变量没有初始化（尤其是数组），然后函数内部定义结构体很诡异。首先把基本的初始化搞好之后，才有必要检查逻辑。 好的，谢谢指点

user: user-2
content: 你的代码很难受。。。首先所有变量没有初始化（尤其是数组），然后函数内部定义结构体很诡异。首先把基本的初始化搞好之后，才有必要检查逻辑。
user-0 提问: OJ上时间超限，请大佬帮看看

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 简化路灯状态反转操作，其他没看出毛病： while(q--)         {             scanf("%d %d %d %d",&x1,&y1,&x2,&y2);             for(i=x1;i<=x2;i++)             {                 for(j=y1;j<=y2;j++)                 {                     //if(a[i][j]==1)                     //    a[i][j]=0;                     //else if(a[i][j]==0)                     //    a[i][j]=1;                     a[i][j] = !a[i][j];  //取反                 }             }         }
user-0 提问: 正学C语言，想找一个编程软件，有好的推荐吗

回复:
user: user-1
content: vs2010，体积很小，，不错的选择

user: user-2
content: 在用Dev-C++

user: user-3
content: Dev C++ 简洁好用

user: user-4
content: 用了这么多，Vs2019社区版还是很棒的。如果是linux下，geany也很好

user: user-5
content: 建议vs和dev都装上  vs有关键字补全，报错也比较高级  dev适合写一些短点的小程序，比较方便

user: user-6
content: 我觉得vs不错。其他的没试过。

user: user-7
content: 用vc2019吧，免费版，功能强大，调试方便

user: user-8
content: 作为入门，我觉得CodeBlocks挺好用的。

user: user-9
content: Dev-C++ 是最容易上手的，而且是免费的

user: user-10
content: vc2010express

user: user-11
content: dev c++ vs2019这些都可以
user-0 提问: 学校的这道oj题为什么通过不了

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: #include <stdio.h> #include <math.h>  unsigned int get_odd_bit(unsigned int n, int bit_len); int main() { #if 0     unsigned int x,n;     int i,y;     char s[50];     scanf("%u",&x);     i=0;     while(x>0)     {         s[i++] = x%2 +'0';         x=x/2;     }     s[i]='\0';     puts(s);     y = i-1;     for(i=y;i>=0;i--) if((i+1)%2==0) s[i]='0';     puts(s);     for(i=y,n=0;i>=0;i--) n+=pow(2.0,y-i)*(s[i]-'0');     printf("%u\n",n); #else     unsigned int x;      scanf("%u", &x);      x = get_odd_bit(x, 32);      printf("%u\n", x); #endif     return 0; }   unsigned int get_odd_bit(unsigned int n, int bit_len) {     unsigned int s = 0;     int i;      for (i = 0; i < bit_len; i++) {         if (i % 2)             s += ((n >> i) & 1u) ? (1u << i) : 0;     }      return s; }  供参考 楼主的代码是没问题的，但是不符合题目要求。因为题目要求自定义函数实现，楼主把逻辑都写在main函数里。 建议楼主把自己的逻辑用一个自定义函数来实现试试。以上是自己用自定义函数来实现的，参考一下

user: user-3
content: 需要这么复杂吗？ 用&运算就好了呀？二进制1010就是16进制a 所以 y = x & 0xaaaaaaaa 就可以了
user-0 提问: 初学C语言的小白求助各位大佬

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 代码楼上有，传送两个及以上的值就要用到指针

user: user-3
content: 代码我就不发了，楼上的就可以了 我就只说说错误的地方吧 第一点：就是while上面那个scanf语句是多余的。 第二点：你调用的函数类型是void型，主函数的t,s,k不会随之发生改变，可以改为有返回型的函数或者用指针

user: user-3
content: 代码我就不发了，楼上的就可以了 我就只说说错误的地方吧 第一点：就是while上面那个scanf语句是多余的。 第二点：你调用的函数类型是void型，主函数的t,s,k不会随之发生改变，可以改为有返回型的函数或者用指针

user: user-4
content: 这个问题的详细分析，请参考公众号推文 #include<stdio.h> void Temperature(double t,double *s, double *k); int main(void) { 	double t,s,k;  	printf("请输入华氏温度："); 	//scanf("%lf",&t); 	while(scanf("%lf",&t)==1) 	{ 		Temperature(t,&s,&k); 		printf("华氏温度:%.2f\n摄氏温度:%.2f\n开氏温度:%.2f",t,s,k); 	 }  	   printf("结束");    	return 0; } void Temperature(double t,double *s, double *k) { 	*s=5.0/9.0*(t-32.0); 	*k=*s+273.16; }

user: user-5
content: 供参考：#include<stdio.h> float Temperature(float t);//void Temperature(float t); 空函数当然什么都不返回了 int main(void) {     float t;     printf("请输入华氏温度（小数为零不可省略）：");//scanf("%f",&t);     while(scanf("%f",&t)!=EOF){ //用 Ctrl + z 结束输入        printf("华氏温度:%.2f\n摄氏温度:%.2f\n开氏温度:%.2f",t,Temperature(t),Temperature(t)+273.16);     }     printf("结束");      return 0; }  float Temperature(float t)//void Temperature(float t) {    float s;//k;    s=5.0/9.0*(t-32.0);    //k=s+273.16; //函数只能返回一个值，所以返回摄氏温度值。    return s; }

user: user-6
content: #include<stdio.h> void Temperature(float t, float *s, float *k); int main(void) {     float t,s,k;      printf("请输入华氏温度（小数为零不可省略）：");     //scanf("%f",&t);   //去掉这次的输入，否则需要输入两次～     while(scanf("%f",&t)==1)   //这里还有一个scanf呢，用一个吧，建议保留这个～     {         Temperature(t, &s, &k);         printf("华氏温度:%.2f\n摄氏温度:%.2f\n开氏温度:%.2f",t,s,k);     }     printf("结束");      return 0; } void Temperature(float t, float *s, float *k) {     //float s,k;      *s=5.0/9.0*(t-32.0);     *k=*s+273.16; }  供参考～

user: user-7
content: while(scanf("%f",&t)==1)，你认为while（）中仅仅是一个判断吗，就像通常的判断一样if（xxx函数==0） return-1；xxx函数依然执行啊
user-0 提问: 萌新想问一下各位，这个C语言实现比较大小为什么不能实现呢

回复:
user: user-0
content: 谢谢各位，解决问题了

user: user-1
content: if (a>b>c || a > c > a) 改成：  if ((a > b && b > c) || (a > c && c > a)) 另外一个if也这么改，试试～

user: user-2
content: a>b>c 编译器会按顺序进行表达式运算，a>b  成立就返回1  ，不成立就返回0。  之后返回的结果(1或0) 会与c比较   。所以这里跟我们的逻辑不一样。

user: user-3
content: 由于运算法则的原因，关系运算不能连着写。 可以写成 a>b && a>c 这种形式。
user-0 提问: 为什么会出现写入访问权限冲突。 tail 是 nullptr？

回复:
user: user-0
content: 引用 1 楼 user-2的回复:if (heado = NULL)             heado = ptr2;         else             tail->next = ptr2; 这里错了，应该为if (heado == NULL) 自己看了半个小时没看出来竟然犯了这么低级的错误，谢谢哈

user: user-1
content: struct ListNode* reverse(struct ListNode* head) {     struct ListNode* ptr1, * ptr2, * heado = NULL, * tail = NULL;     int a[100], index = 0;     for (ptr1 = head; ptr1 != NULL; ptr1 = ptr1->next)         a[index++] = ptr1->data;     for (int i = index - 1; i >= 0; i--)     {         ptr2 = (struct ListNode*)malloc(sizeof(struct ListNode));         ptr2->data = a[i];         ptr2->next = NULL;         //if (heado = NULL)         if (heado == NULL)             heado = ptr2;         else             tail->next = ptr2;         tail = ptr2;     }     return heado; } 供参考～  =不是比较==是比较

user: user-2
content: if (heado = NULL)             heado = ptr2;         else             tail->next = ptr2; 这里错了，应该为if (heado == NULL)
user-0 提问: #pragma 和interrupt

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: #pragma interrupt( )表示中断服务子程序

user: user-3
content: 你需要看对应编译器的说明
user-0 提问: 求助，DEVC++运行不了这个程序

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 你是不是写成for(int i=0;i<10;i++)了，这是C99的，所有编译不了。 要在外面定义变量才可以

user: user-3
content: 不要写 for(int i=0;i<10;i++) 写成 int i; ... for(i=0;i<10;i++) 就好

user: user-4
content: linux下使用gcc/g++编译器另外加上vim编辑器；
user-0 提问: 【求助】 java 改写成 c

回复:
user: user-1
content: for example int main() {     char s[256], *p;     int n;     fgets(s, 256, stdin);     scanf(“%d”, &n);     p = strtok(s, “ “);     while(p != NULL) {         n--;         if(n==0) break;         p = strtok(p, “ “);     }     print(“%s\n”, s);     printf(“extracword: “);     if(p!=NULL) printf(“%s\n”, p);     else printf(“nothing\n”);     return 0; }

user: user-0
content: 例如输入 my name is jack 2 提出第二个单词在这里是name 输出应该是 my name is jack  extracWord: name

user: user-0
content: 如不用strtok呢 使用fgets（）改写java code能否实现呢？

user: user-1
content: 比如 char *s; int n; while((s=gets()) != NULL) { //这里相当于hasNextLine     sscanf(s, “%d”, &n);//这里相当于nextInt     printf(“%d”, n); }

user: user-2
content: 建议楼主描述一下需求，根据需求去用C实现～
user-0 提问: C语言题目

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: a[0]是2，剩下399个都是0

user: user-0
content: int a[Y]={2}的意思是数组里面每个元素都是2吗

user: user-2
content: 一个数有很多位，它要乘以2 积的个位=原数的个位×2的结果取个位 积的十位=（原数的十位×2的结果+原数的个位×2的结果的十位）的结果取个位 积的百位=（原数的百位×2的结果+原数的十位×2的结果的十位）的结果取个位 循环吧  以上描述中提到的位是十进制下的单独一个数位，提到的×2的结果可能是1位数也可能是2位数，结果的十位就是进位的意思 你自己随便写个竖式计算，然后记住每个数字都是单独的变量（数组元素），然后描述计算过程，就是这样了

user: user-3
content: 引用 7 楼 forever74 的回复:超大数计算超高精度计算基本就都是这么写的，网上一搜一大堆，就是硬模拟竖式计算嘛。不光是乘2，更重要的是四则和各种其他运算。当然这个代码不够精致，还有一些无用功在里面。请问，我还是有些搞不懂硬模拟竖式计算是怎么模拟计算的？

user: user-2
content: #include <stdio.h> #define X 1000 #define Y 400 int Fun() { 	int a[Y] = { 2 }, b[Y]; //原本有个2 	int sum = 0; 	int i, j, m, n; 	for (i = 1; i < X; ++i) { //这个循环999次，每次乘2 		for (j = 0; j < Y; ++j) //把上次结果保存起来作为下次的运算数 			b[j] = a[j]; 		for (n = 0; n < Y; ++n) //这个就是a=b*2 			if (n == 0) 				a[n] = 2 * b[n] % 10;  //最低位也就是个位不用考虑进位，因为没人给它进 			else  				a[n]=(2*b[n]+2*b[n-1]/10)%10; //其他位就得考虑进位了，a[1]是十位，a[2]是百位，依次类推 	} 	for (m = 0; m < Y; m++) //按要求累加各数位 		sum += a[m]; 	return sum; } int main(void) { 	printf("%d\n", Fun()); 	return 0; }  输出 1366

user: user-0
content: 老哥要不可以从第一个循环开始到结束详细注释一下吗 就把我当成一个新手解释一下 这个确实是看不懂

user: user-2
content: 按照10进制从低到高一位一位算，考虑到低位进上来的进位就行。如果你说的是填空的这句话的话。

user: user-2
content: 超大数计算超高精度计算基本就都是这么写的，网上一搜一大堆，就是硬模拟竖式计算嘛。不光是乘2，更重要的是四则和各种其他运算。当然这个代码不够精致，还有一些无用功在里面。

user: user-0
content: 你好 可以解释一下思路吗 就是怎么想出来要这么写的

user: user-2
content: 就是计算2的1000次方的值，因为它太大，所以需要用数组元素表示它的各位数字。计算的时候参考手写竖式的计算过程。

user: user-2
content: a[n]=(2*b[n]+2*b[n-1]/10)%10

user: user-0
content: 可以的话顺便解释一下这个代码 不带清楚这个想要干嘛

user: user-0
content: 要求： 2^15 = 32768 ，其各位之和为 3 + 2 + 7 + 6 + 8 = 26。  求2^1000各位数字之和。其中^表示次方，如：2^5表示2的5次方。  下面程序计算并输出结果，请完成缺少的语句。要求参赛选手在弄清给定代码的基础上填写缺失的部分，使得程序逻辑正确、完整。所填写的代码不多于一条语句（即不能出现分号）。

user: user-2
content: 说清楚要求，不要让人猜。
user-0 提问: STM32

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 就是调用函数返回的值赋值给了start和differ
user-0 提问: c，c#，c++，等等的听说了很多，但只学了c，有没有来科普一下的

回复:
user: user-1
content: 建议先学C语言，后续一通百通。以后专业不管是走I T编程还是电子技术编程，都可发展。

user: user-2
content: 直接C#、、、

user: user-3
content: 建议学golang，被称为互联网的c语言

user: user-4
content: 先学的c++,然后看了看c，c++虽然包括c，但是他们的思想不一样，c++是面向对象的，然后运行的话c好像更快一点

user: user-5
content: 学会了c,再学其它的，就很简单了

user: user-6
content: 学到了，看来我还有很长路要走

user: user-7
content: 建议学习C++Primer Plus

user: user-8
content: 不，是： |-------- |您在这| |-------- | C -> C++ \                   > java! C# --------/

user: user-9
content: C -> C++   ->  C++++(C#)  看出来了吗

user: user-10
content: 建议直接学c++

user: user-11
content: C先学，会带给你写代码的逻辑性，严谨性，然后直接学习c#。

user: user-12
content: 小白路过，学习了。

user: user-13
content: 一般讲，早初的时候，C语言常常与Unix系统有关。也有人说，C语言是为了开发Unix系统而研发的。但是，C语言是完全独立的设计，其系统设计甚至比Unix更加庞大复杂。C语言的经典教材，我国比较公认的是早初清华大学谭浩强教授的版本。最经典的C语言例程就是传说中的HelloWorld。一般来说，C语言的特点是精巧缜密，这是大多数懂得C语言的人都会承认的。 C++是诞生于C语言论坛的：在人们热衷于讨论和赞美C语言的时代，一些非常深刻的人在C语言论坛提出了对象和流的概念，之后讨论了有十年，最后终于有人为这两个概念做出了代码实现，于是C++诞生了。至于命名，是源于类似后来命名大熊猫的方法——服从民意。关于面向对象技术和流技术，在早初就有许多争议，大多数人知道的结论是：没有函数精妙。主要问题是：效率低下，适应力较低。但是C++还是诞生了，源于一些人的坚持。最早的C++定义，就是在C语言基础上加入对象技术和流技术。通常认为，整个1980's是属于C++语言的，虽然当时Basic语言更加流行。C++语言的经典版本：Borland公司的TurboC2.0，BorlandC++3.1，BorlandC++Builder4.5，Microsoft公司的VisualC++6.0。 C#是微软.net战略的产物，诞生于Sun公司强大的Java攻势之下，基本上是与Java、Javascript同时代的理论争吵（思考）的产物。

user: user-14
content: 首先，c++之父认为应该是++c，而不是c++ 其次，c++的确包括c。更多的是面向对象，泛型编程，模板元编程等

user: user-15
content: 简单地科普一下：先从取名来说吧，++在C语言中表示增加1的意思，所以，C++在功能上比C语言有所增加。在C++功能的基础上，C#又比C++的功能有所增加，因为#是由两个++构成的。具体参见《C++程序设计精要教程》。

user: user-16
content: 没学过听别人描述很难有深刻理解的，就跟没见过大象的人描述大象一样，另外只学C找到工作，尤其好工作是比较困难的，需要学历加持

user: user-17
content: c++可以看作c的超集（c相当于c++的子集） c#不属于c/c++系列，和java类似，编译后是虚拟机指令，需要虚拟机来运行

user: user-18
content: 个人理解：c++是基于c，但是面向对象，两者可以说是同源，C#新一些，特性不同，使用的地方也不同，c#优化了内存，但是是否是真的“优化”当然仁者见仁。c++几乎完全兼容c，他对指针的特殊操作可以说是非常独特的，优点缺点都在他，也给了他对底层操作的独特优势。而感觉c#更像java

user: user-19
content: C是面向过程的编程，而c#和c++更多的是面向对象的编程；
user-0 提问: 一个简答的链表问题 关于在结构体中的指针弄得很乱

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

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

user: user-3
content: int main() {     char c,a[100];     int i=0,j,k;     LNode *head,*node;     head=(LNode *)malloc(sizeof(LNode));     //head=NULL;     head->next = NULL;     while((c=getchar())!='\n')     {         a[i]=c;         i++;     }      for(j=0;j<i;j++)     {         node=(LNode *)malloc(sizeof(LNode));         node->val=a[j];         node->next = head;         head=node;     }     //while(head->next!=NULL)     while(head!=NULL)     {         cout<<head->val;         head=head->next;     }     return 0; } 供参考～

user: user-4
content: C和C++交织在一起，看着不累么？ 如：head=(LNode *)malloc(sizeof(LNode)); 要是C，要强制类型转换干啥？而且出错不容易发现。head=malloc(sizeof(LNode));貌似更好，不必画蛇添足。 要是C++，直接new就行了，直接调用构造函数，多好。。
user-0 提问: c语言结构体   疑问

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: typedef是定义别名，比如typedef struct node NODE;那么NODE就是struct node的别名，NODE定义的变量等价struct node定义的。

user: user-3
content: typedef就是一个别名

user: user-4
content: 是的 只不过你这个例子中的成员类型不一样，一个有const，一个没有，不过这个跟typedef本身没关系
user-0 提问: C语言小白，请问下这语句中if (ch < '0' || ch>'9') 为什么ch 输入0 或9  if 判断它仍为假？

回复:
user: user-1
content: <=    >=

user: user-2
content: 引用 楼主 unclekingfish 的回复: int main() { 	int ch = 0; 	while ((ch = getchar()) != EOF) 	{ 		if (ch < '0' || ch>'9') 		continue; 		putchar(ch); 	} 	return 0; }   求大佬解惑，为什么这段代码输入0或者9  还是可以输出0或者9 因为‘0’不是小于‘0’且不是大于‘9’ ‘9’不是小于‘0’且不是大于‘9’ 因此为假

user: user-3
content: 因为'0'和0，'9'和9不是一回事

user: user-4
content: 引用 1 楼 是疗伤烧肉粽~的回复:[quote=引用 楼主 unclekingfish的回复:] int main() { 	int ch = 0; 	while ((ch = getchar()) != EOF) 	{ 		if (ch < '0' || ch>'9') 		continue; 		putchar(ch); 	} 	return 0; }   求大佬解惑，为什么这段代码输入0或者9  还是可以输出0或者9 if语句括号里面错了 应该是if(ch>='0'||ch<='9')[/quote] 刚打错了，把楼上的回答的||改为&&

user: user-4
content: 引用 楼主 unclekingfish的回复: int main() { 	int ch = 0; 	while ((ch = getchar()) != EOF) 	{ 		if (ch < '0' || ch>'9') 		continue; 		putchar(ch); 	} 	return 0; }   求大佬解惑，为什么这段代码输入0或者9  还是可以输出0或者9 if语句括号里面错了 应该是if(ch>='0'||ch<='9')
user-0 提问: 来位大佬，学校的OJ题目ac不过

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 有没有可能是要开longlong

user: user-0
content: 引用 21 楼 智者知已应修善业 的回复:这个提示答案错误是否跟最后输出带换行符有关？似乎以前有类似的提问。 试过了已经，不是换行符的问题

user: user-0
content: 所以才想知道正确答案是什么，感觉我的没什么问题，却说答案错误

user: user-3
content: 这个提示答案错误是否跟最后输出带换行符有关？似乎以前有类似的提问。

user: user-3
content: 不是说有一份通过了？             对的，就是我们学校的学生提交的200多份只通过了一份，我都差不多提交十份了，都没通过。

user: user-0
content: 引用 17 楼 forever74 的回复:[quote=引用 14 楼 智者知已应修善业 的回复:]从截图看有几个错误，逻辑错误，运算错误，超时，等，说明算法逻辑没理清。 超时可以由计数量过多引发，运算错误由算法逻辑不清楚引发，继而引发其他问题。 简单的求约数这是基本的数学知识，用从头计算到尾显然没把数学知识用上的缘故。 看一张图看看能否有所觉悟。 那张图应该是网站对所有用户提交该题的总结，而不是针对这个程序的。[/quote] 对的，就是我们学校的学生提交的200多份只通过了一份，我都差不多提交十份了，都没通过。

user: user-4
content: 引用 14 楼 智者知已应修善业 的回复:从截图看有几个错误，逻辑错误，运算错误，超时，等，说明算法逻辑没理清。 超时可以由计数量过多引发，运算错误由算法逻辑不清楚引发，继而引发其他问题。 简单的求约数这是基本的数学知识，用从头计算到尾显然没把数学知识用上的缘故。 看一张图看看能否有所觉悟。 那张图应该是网站对所有用户提交该题的总结，而不是针对这个程序的。

user: user-3
content: 假如说那张提示那么多错误一定就是贴出代码引发的，那么就只有一个解释从1开始逐一求约数的逻辑不符题意了，数学知识可推得约数与商是可互换的即求出一个约数实际上就是2个约数，因此，不需要从1求到数本身，比如36这个数求有几个约数只要循环求到6即可得9个约数就出来了，因此循环量大大减小从而时间也减少。而且数越大求的次数与数本身的比例就越大即循环量越少时间就越少。 再看一张图，可以看出求的次数与数本身的比例关系，720这个数只要循环求到30次即可，720/30=24，上面的36/6=6。

user: user-3
content: 怀疑你使用的电脑有病毒存在，看运行题目的页面存在不该出现的字符。

user: user-3
content: 图

user: user-3
content: 从截图看有几个错误，逻辑错误，运算错误，超时，等，说明算法逻辑没理清。 超时可以由计数量过多引发，运算错误由算法逻辑不清楚引发，继而引发其他问题。 简单的求约数这是基本的数学知识，用从头计算到尾显然没把数学知识用上的缘故。 看一张图看看能否有所觉悟。

user: user-4
content: 把你最后的代码展示一下吧。捎带说一下是上述哪种错法。

user: user-0
content: 我这道题都试了很多次，网上也找了这个问题的其他的答案，也过不了

user: user-5
content: 做题的网站不用main函数吧  把main函数删了

user: user-0
content: 引用 10 楼 智者知已应修善业 的回复:for(i=1,count=0;i<=x;i++)从1算到X效率自然打折 题目是从a到b，这里的a就是1

user: user-4
content: 引用 10 楼 智者知已应修善业 的回复:for(i=1,count=0;i<=x;i++)从1算到X效率自然打折 尽管努力一下可以快一些，但是现在他是WA呀，主要矛盾不是超时啊。 我承认技穷了。

user: user-3
content: for(i=1,count=0;i<=x;i++)从1算到X效率自然打折

user: user-0
content: 有些题目有，有些没有，不过不是这个问题，我试过了

user: user-4
content: 同一个OJ上的其他题目对输入输出的举例有这种显式的\n么？ 这个东西不常见。
user-0 提问: 洛谷题求解，二分查找

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 实际上还可以再稍微继续优化一点，“如果大于m，把多出来的量分摊到每棵树，加到h上继续迭代”可以改成只分摊到高度大于当前h的那些树，这样可以更快迭代出结果，但是需要增加一个变量记录当前高于h的树总量，每次迭代要计算一次，懒得写，直接用n替代了

user: user-2
content: 引用 9 楼 普渡&众生 的回复:[quote=引用 6 楼 早打大打打核战争的回复:]这题二分查找并不高明，因为题目中有足够的信息一开始就逼近正确答案：  #include <stdio.h>  int h, n, m, t[1000000]; long long s;  int main() {   scanf("%d%d", &n, &m);   for (int i = 0; i < n && ~scanf("%d", &t[i]);) s += t[i++];   h = (s - m) / n;   for (int i; s > m;)   {     for (i = s = 0; i < n; i++) s += t[i] <= h ? 0 : t[i] - h;     s <= m ? h -= s < m : h +=(s - m) / n ? (s - m) / n : 1;   }   printf("%d\n", h);    return 0; }  可以讲讲思路吗，麻烦了[/quote]  s一开始是所有树的总高度，所以h = (s - m) / n; 是估计的砍树平均高度（实际高度不会比这个低），然后每次迭代s为h高度上砍掉的总长度，如果恰好是需要量m就结束计算，如果大于m，把多出来的量分摊到每棵树，加到h上继续迭代，如果小于m，说明上次迭代h加多了，把h-1就是正确答案

user: user-3
content: 二分查找要先把每个数从大到小或小到大排列

user: user-3
content: 二分查找 就是把数组一直分成两份，直到找到目标

user: user-0
content: 引用 6 楼 早打大打打核战争的回复:这题二分查找并不高明，因为题目中有足够的信息一开始就逼近正确答案：  #include <stdio.h>  int h, n, m, t[1000000]; long long s;  int main() {   scanf("%d%d", &n, &m);   for (int i = 0; i < n && ~scanf("%d", &t[i]);) s += t[i++];   h = (s - m) / n;   for (int i; s > m;)   {     for (i = s = 0; i < n; i++) s += t[i] <= h ? 0 : t[i] - h;     s <= m ? h -= s < m : h +=(s - m) / n ? (s - m) / n : 1;   }   printf("%d\n", h);    return 0; }  可以讲讲思路吗，麻烦了

user: user-0
content: 引用 5 楼 智者知已应修善业的回复:4 8 20 15 10 17 4 9 20 15 10 17 有可能输入的值获取不到，因此，写了各小于接近的方案，小数部分就不写了。由此衍生出获取最接近算法。   可以请您发一下代码吗

user: user-2
content: 另，90009同学大过年的还在闷头鼓捣小代码啊，虽然精神可嘉，但是代码质量不敢恭维~~~

user: user-2
content: 这题二分查找并不高明，因为题目中有足够的信息一开始就逼近正确答案：  #include <stdio.h>  int h, n, m, t[1000000]; long long s;  int main() {   scanf("%d%d", &n, &m);   for (int i = 0; i < n && ~scanf("%d", &t[i]);) s += t[i++];   h = (s - m) / n;   for (int i; s > m;)   {     for (i = s = 0; i < n; i++) s += t[i] <= h ? 0 : t[i] - h;     s <= m ? h -= s < m : h +=(s - m) / n ? (s - m) / n : 1;   }   printf("%d\n", h);    return 0; }

user: user-4
content: 4 8 20 15 10 17 4 9 20 15 10 17 有可能输入的值获取不到，因此，写了各小于接近的方案，小数部分就不写了。由此衍生出获取最接近算法。

user: user-4
content: 这个题目出得真逗，似乎得到树木的树冠不是得到树木的树干，更像是修篱笆！ 假如说输入4 10 20 15 10 17，那么锯片设定为14，4 7 20 15 10 17则锯片设定15，这样的题目不存在二分法查找，只能说预设可以使用最高度的1/2开始逐步求。

user: user-0
content: 引用 1 楼 自信男孩的回复:这个二分查找不是从trees中二分，而是高度的二分。即找到最大高度，那么leftt是从0开始到最大高度这不就是已经是顺序的吗？ 还有while循环体内为什么要s=0呢

user: user-0
content: 引用 1 楼 自信男孩的回复:这个二分查找不是从trees中二分，而是高度的二分。即找到最大高度，那么leftt是从0开始到最大高度这不就是已经是顺序的吗？ 噢噢原来是这个意思，那为什么最后return要leftt-1呢？为什么while的条件是letff＜=longest呢？ 里面有很多细节不是很懂。比如它缩减区间

user: user-5
content: 这个二分查找不是从trees中二分，而是高度的二分。即找到最大高度，那么leftt是从0开始到最大高度这不就是已经是顺序的吗？
user-0 提问: 【求助】函数指针和结构体

回复:
user: user-1
content: https://www.baidu.com/s?wd=keilc51%20%E7%BB%93%E6%9E%84%E4%BD%93%E5%AF%B9%E9%BD%90

user: user-0
content: 引用 6 楼 赵4老师 的回复:应确保 结构体对齐 和 函数指针到底是32位还是64位  您好，我用的keilc51的软件，结构体内容我整个打印出来。发现数据并没有对齐，然而我没设置取消对齐。函数指针总共是3个字节，是参数的字节总和。

user: user-0
content: 多谢各位了  问题找到了 是编译的问题

user: user-1
content: 应确保 结构体对齐 和 函数指针到底是32位还是64位

user: user-2
content: 指针太多，不说请调用链，一不小心哪个就是野指针了。

user: user-2
content: 莫名其妙变化这种事，疑似返回auto局部变量地址造成的。

user: user-2
content: 说清楚，什么叫另外两个，啥叫正常。 分别说清变量名，原值，变成什么了。 另外初始化时用到的uart2Buff是个什么东西，在哪定义的。

user: user-3
content: 贴一下比较完整的代码看看

user: user-0
content: 有可能的问题点或者测试思路，也希望能提供一下
user-0 提问: 树是啥？

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 一种植物，绿色的，很高大

user: user-0
content: 当我是三岁小孩啊！我说的当然是数据结构里的树

user: user-3
content: 引用 7 楼 真相重于对错 的回复: 切换到吹水模式： 楼主这一问，颇有“恶乎定？”的神采， 我们必须用孟子的方式来回答：

user: user-4
content: 不是c语言的知识，是数据结构里面的知识

user: user-5
content: 是数据结构的一种

user: user-6
content: 树就是树呗，有树枝和树叶

user: user-7
content: 先从二叉树了解起，当然，c语言中文网有一切你想知道的，推荐你去看看哦

user: user-8
content: 树，就像你家谱一样。 最上面是你，第二层是你的儿子，第三层是你的孙子。。。

user: user-9
content: 数据结构中的一种非线性结构。

user: user-10

user: user-11
content: 引用 5 楼 xian0-666 的回复:树就是树呗，有树枝和树叶 关键还有连理枝！
user-0 提问: zedgraphcontrol坐标系里怎么获取鼠标坐标？

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 不懂，可能需要自己换算
user-0 提问: 请问大神 为啥输出的结果啥也没有

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 改成for(i = 1; i <= 101; i += 2)就好了

user: user-3
content: 引用 6 楼 qq_53918454 的回复:[quote=引用 3 楼 一颗白面馒头的回复:]你是要求所有小于101的奇数的和？可以改成for(i = 0; i <= 101; i += 2) 请问一下 i+=2 是什么意思呀[/quote] 额。。。。等价于i = i + 2。

user: user-0
content: 引用 3 楼 一颗白面馒头的回复:你是要求所有小于101的奇数的和？可以改成for(i = 0; i <= 101; i += 2) 请问一下 i+=2 是什么意思呀

user: user-4
content: 调试调试调试

user: user-5
content: 死循环了！

user: user-3
content: 你是要求所有小于101的奇数的和？可以改成for(i = 0; i <= 101; i += 2)

user: user-3
content: i = (2 * i) - 1。i一开始等于1， 执行这句话后还是等于1，死循环了

user: user-6
content: 死循环了，跳不出for循环，自然是不会执行printf了。  i = 1；满足i <= 101，然后sum  = sum + i; 紧接着第二次，i = (2 * i) -1 ; 即i = (2 * 1) - 1 = 1;这个时候是不是回到第一步了， 这样i一直是1，不会超过101，自然不会跳出循环了。
user-0 提问: 请问大神

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 供参考：1.   &x 2.   -term*x*x/((n+1)*(n+2)) 3.   count++ 4.   fabs(term)>=1e-5
user-0 提问: 请大神帮忙看一下

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 第11行错了，应该是==。 =表示赋值，==表示等于，意思不一样

user: user-3
content: 等于在逻辑判断里是2个=！请注意第11行！

user: user-4
content: #include <ctype.h>         int isalnum(int c);        int isalpha(int c);        int isascii(int c);        int isblank(int c);        int iscntrl(int c);        int isdigit(int c);        int isgraph(int c);        int islower(int c);        int isprint(int c);        int ispunct(int c);        int isspace(int c);        int isupper(int c);        int isxdigit(int c);   The values returned are nonzero if the character c falls into the tested class, and a zero value if not.  供参考～ 库函数，匹配返回非0.

user: user-5
content: 这句有误，ch == ' ' || ch == '\n'

user: user-6

user: user-7
content: ch== 用==号，而不是=号
user-0 提问: 大佬求助！

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 结构体名书写有问题，注意下大小写～

user: user-3
content: m_link的类型头文件没有包含进来

user: user-4
content: LinkList和Linklist不是一回事

user: user-4
content: (m_link->nHead).next=NULL; ......
user-0 提问: 大佬求助！

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 应该是不识别Linklist，注意list的首字母是大写；

user: user-3
content: 结构体 LinkList 申请内存时 Linklist  list大小写不一致  另外，mLinksize和m_Linksize 也不一致
user-0 提问: <简单数论-斐波那契>为什么运行是对的，提交上去系统总报错，求指点

回复:
user: user-0
content: 谢谢各位问题已经找到了，正如#1所说我没有考虑N=1和N=2时的情况 把num和i初始值置0就过了 这题用int确实就可以满足题目了， #6#9的代码比我的更细节全面， 谢谢各位的回答 for(sum=0,i=0;i<4000;i++) 		{ 			if(num[i]>n) 				break; 			if(num[i]%2==0) 				sum+=num[i]; 		}

user: user-1
content: 其实仔细研究下题目，没这么复杂，int型也足够了，修正#6楼的，如下，供参考：#include <stdio.h>  int main() {    int n[23],t,i=0,a,b,sum,k;     scanf("%d",&t);    if(t<1 || t>23) t = 1;     while(t--){        scanf("%d",&n[i]);        if(n[i]<1 || n[i]>4000000)n[i]=1;        i++;    }    t=0;    while(i--){         a=0,b=1,sum=0,k=0;         while((k=(a+b)) <= n[t]){               if(k%2==0) sum += k;               a = b;               b = k;         }         printf("%d\n",sum);         t++;    }    //system("pause");    return 0; }

user: user-2
content: 尽管没有经验，但是我一直听说某些有性格的编译器会捕捉有符号整数的溢出，进行一些有性格的处理，因为标准说那是未定义行为嘛。 你写代码自己测试的编译器可能和我的编译器一样，无视这些溢出，毕竟是未定义行为嘛，无视也行。

user: user-2
content: 4000000以下的Fibonacci数列只有32项，累加到int应该也不会溢出。 疑似你的数列生成部分，溢出太多次了，引起系统不满了？

user: user-1
content: 题目的要求是成组输入，成组输出，修改如下，供参考：#include <stdio.h>  int main() {    int n[23],t,num[4000],i=0,sum,j=0;    num[0]=1;num[1]=2;    for(i=2;i<4000;i++){       num[i] = num[i-1]+num[i-2];    }    scanf("%d",&t);    if(t<1 || t>23) t = 1;    while(t--){        scanf("%d",&n[j++]);    }    t=0;    while(j--){         for(sum=0,i=0;i<4000 && num[i]<=n[t];i++)            {              if(num[i]%2==0) sum += num[i];            }         printf("%d\n",sum);         t++;    }   return 0; }

user: user-3
content: %d 和 %lld 是一回事吗？

user: user-3
content: int 和 long long int 是一回事吗？

user: user-4
content: 你看一下你的n支持多少？它的这个n支持4000000，你的支持40000，不满足条件吧 另外，你的测试只是用要求里提示的，没有考虑边界测试用例吧

user: user-1
content: 这里的条件不对，修改如下，供参考： while(t--){        scanf("%d",&n);        for(sum=0,i=0;i<4000 && num[i]<=n;i++)        {            if(num[i]%2==0) sum += num[i];        }        printf("%d",sum);   }