Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 有没有大佬用proteus7

回复:
user: user-0
content: 引用 楼主 weixin_53802790的回复:最近在做计算机大作业。想做一个病床呼叫系统，用proteus7的atmega16。有没有大佬能帮忙支个招。 八个开关分别控制八个数码管为病床，开关闭合会控制相应的数码管显示数字，同时蜂鸣器会发出警报。第九个开关闭合会使所有数码管清零，同时警报声消失。有没有大佬有思路，能不能教教我，求求了，不想挂科
user-0 提问: 在窗口运行不显示！！

回复:
user: user-0
content: 引用 1 楼 user-1的回复:把 for(i=0; i=n/2; i++) //不能用=，就算用也应该是== 改成 for(i=0; i<=n/2; i++) //要用<= 是的哈，没注意看。。

user: user-1
content: 把 for(i=0; i=n/2; i++) //不能用=，就算用也应该是== 改成 for(i=0; i<=n/2; i++) //要用<=
user-0 提问: 求大神帮忙

回复:
user: user-1
content: 你这是找打手的节奏呀

user: user-0
content: 引用 楼主 一只鸿鹄的回复:用c语言数据结构做一个哈夫曼编译器，要求输入权值，然后对数字进行编译。 要求功能是初始化建立哈弗曼树，编码，译码，退出系统，功能越多越好，这个是最基本的，求大神们帮忙。谢谢。
user-0 提问: 关于结构体数组，交换顺序问题

回复:
user: user-1
content: 把struct row *temp; 改成 struct row temp;  把 temp=(p+k); (p+k)=(p+i); (p+i)=temp; 改成 temp=*(p+k); *(p+k)=*(p+i); *(p+i)=temp;  问题原因 (p+k)=(p+i);相当于 &r[k]=&r[i]; r是实参main函数的数组变量， &r[k]是个固定的地址（因为数组的地址是固定的），所以不能改变数组元素的地址，但是可以改变 r[k]，也就是*(p+k)，也就是可以改变数组元素的值。注意其中的区别。
user-0 提问: 在编译器中运行的结果是对的，但在noi里显示超时，怎么回事？怎么解决？

回复:
user: user-1
content: 不要使用 while (条件) 更不要使用 while (组合条件) 要使用 while (1) {  if (条件1) break;  //...  if (条件2) continue;  //...  if (条件3) return;  //... } 因为前两种写法在语言表达意思的层面上有二义性，只有第三种才忠实反映了程序流的实际情况。 典型如： 下面两段的语义都是当文件未结束时读字符 while (!feof(f)) {  a=fgetc(f);  //...  b=fgetc(f);//可能此时已经feof了！  //... } 而这样写就没有问题： while (1) {  a=fgetc(f);  if (feof(f)) break;  //...  b=fgetc(f);  if (feof(f)) break;  //... } 类似的例子还可以举很多。

user: user-0
content: 引用 3 楼 赵4老师的回复:#include <stdio.h> int main() {     int n,a,x=1;     scanf("%d",&n);     if(n==1)         printf("2\n");     else {         while (1) {             if (n-1<=0) break;             x+=2;             a=x;             while (1) {                 if (n-1<=0) break;                 a--;                 if(x%a==0)                     break;                 else {                     if(a==2) {                         n--;                         break;                     } else                         continue;                 }             }         }         printf("%d\n",x);     }     return 0; }  可以问一下，为什么要这样改吗

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

user: user-0
content: 引用 1 楼 user-2的回复:无代码没么回答 #include <stdio.h> int main() { int n,a,x=1; scanf("%d",&n); if(n==1) printf("2"); else { while(n-1>0) { x+=2; a=x; while(n-1>0) { a--; if(x%a==0) break; else { if(a==2) { n--; break; } else continue; } } }     printf("%d",x); } return 0; }

user: user-2
content: 无代码没么回答
user-0 提问: 请问，怎么将输入的整型值转换为字符串输出呢？ 老师还说，不许用if，只许用一次循环

回复:
user: user-1
content: snprintf试试

user: user-2
content: int main() {     int i, n;     char s[16];     scanf(“%d”, &n);     s[15]=‘\0’;     for (i=14; n>1; i--, n/=10) {         s[i]=‘0’+(n%10);     }     s[i]=‘0’+n;     printf(“%s”, s+i);     return 0; }

user: user-3
content: 连一次循环都不用： chat b[64]; sprintf(b,"%d",123456); 在b中存放的就是
user-0 提问: 二进制算法

回复:
user: user-1
content: 类似汇编这玩意： 加法：每次加法，考虑一下进位就行。 减法：转为加法做。 乘法：转为上述方法及移位操作。 除法：转为上述方法。即使除不尽，也可以得到商和余数。
user-0 提问: 请教下C语言使用regex库正则筛选连续数字/字母的问题

回复:
user: user-0
content: 感谢，C++的是可以了。我自己研究下C有没有办法吧。看看有没有办法解决第二个问题。

user: user-1
content: 再供参考：#include <iostream> #include <string> #include <regex> using namespace std; int main() {     string s("we12312332qwwww  d1246Xdes");     cout << s << endl;     cout << "----" << endl;     regex e("[0-9]{4}");     smatch m;     while (regex_search (s,m,e)) {         cout << m.str() << endl;         s = m.suffix().str();     }     return 0; } //we12312332qwwww  d1246Xdes //---- //1231 //2332 //1246 //  正则表达式速查 正则表达式举例 正则表达式学习 (4页A4纸)http://download.csdn.net/detail/zhao4zhong1/1808549

user: user-0
content: 引用 2 楼 赵4老师 的回复:仅供参考：#include <iostream> #include <string> #include <regex> using namespace std; int main() {     string s("deabc\ndeab\ndefabc");     cout << s << endl;     cout << "----" << endl;     regex e("abc$");     smatch m;     while (regex_search (s,m,e)) {         cout << m.str() << endl;         s = m.suffix().str();     }     return 0; } //deabc //deab //defabc //---- //abc //abc //  引用 2 楼 赵4老师 的回复:仅供参考：#include <iostream> #include <string> #include <regex> using namespace std; int main() {     string s("deabc\ndeab\ndefabc");     cout << s << endl;     cout << "----" << endl;     regex e("abc$");     smatch m;     while (regex_search (s,m,e)) {         cout << m.str() << endl;         s = m.suffix().str();     }     return 0; } //deabc //deab //defabc //---- //abc //abc //   谢谢回复，不过我需要用C语言实现，没法直接用regex库，是额外导入的。还有就是我按照您的代码替换了文本和正则表达式，结果和我之前差不多，第一串数字是一整串出来的。

user: user-1
content: 仅供参考：#include <iostream> #include <string> #include <regex> using namespace std; int main() {     string s("deabc\ndeab\ndefabc");     cout << s << endl;     cout << "----" << endl;     regex e("abc$");     smatch m;     while (regex_search (s,m,e)) {         cout << m.str() << endl;         s = m.suffix().str();     }     return 0; } //deabc //deab //defabc //---- //abc //abc //

user: user-0
content: 没人会吗。。。
user-0 提问: C指针

回复:
user: user-1
content: 棒棒哒哒哒哒

user: user-2
content: //对于字符串“abcdefghijklmn”，读入两个数字，比如begin、num，假定begin为1，num为5， //则动态申请内存，存放子串“bcdef”，最后输出该子串。 //简化起见，假定begin、num都在有效范围内。设计main函数, 同时要展示出字符串和动态内存的地址 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <malloc.h> int main() {     char *s="abcdefghijklmn";     int begin,num;     char *p;      scanf("%d%d",&begin,&num);     p=(char *)malloc(num+1);     if (NULL==p) {         printf("Can not malloc(%d bytes)!\n",num+1);         return 1;     }     strncpy(p,s+begin,num);     p[num]=0;     printf("%s\n",p);     printf("0x%p\n",p);     free(p);      return 0; } //输入 //1 5 //输出 //bcdef //0x012DDC38 //

user: user-3
content: char* func(char* str,int begin,int num) {    char* result = (char*)malloc(sizeof(char)*(num+1));    memcpy(result,str+begin,sizeof(char)*num);    result[num]='\0'; return result; }
user-0 提问: 各位大佬，C语言，帮忙看看呗

回复:
user: user-1
content: 类似，只要把输出条件修改为>1即可，再加判断输入是否合法。

user: user-2
content: 供参考：#include<stdio.h>  int main(int argc, char* argv[]) {       int n,i,flag=1;       int a[10]={0};         scanf("%d",&n);        if(n>9999999 || n<=0) {           printf("Invalid input");           return 1;        }         while(n!=0)           {             a[n%10]++;             n /= 10;           }        for(i=0;i<10;i++)            if(a[i]>1){               flag = 0;               printf(" %d",i);            }        if(flag) printf("No repeated number.\n");        return 0; }
user-0 提问: 输入若干个字符，统计各英文字母出现的次数。（字母区分大小写字母）

回复:
user: user-1
content: #include <stdio.h> int main(int argc, char* argv[]) {     char c[100];     int a[26]={0},A[26]={0},flag=0,i=0;     gets(c);     while( c[i] != '\0'){                       //while((c = getchar()) != '\n'){           if(c[i] >= 'a' && c[i] <= 'z')               {a[c[i]-'a']++;flag=1;}          //a[0]对应保存小写字母出现的次数           if(c[i] >= 'A' && c[i] <= 'Z')               {A[c[i]-'A']++;flag=1;}          //A[0]对应保存大写字母出现的次数           i++;     }     for(int i=0;i<26;i++)         if(a[i] != 0)          printf("%c->%d\n",'a'+i,a[i]);     for(int i=0;i<26;i++)        if(A[i] != 0)          printf("%c->%d\n",'A'+i,A[i]);     if(!flag) printf("No letter!");       return 0; }

user: user-1
content: 供参考：#include <stdio.h> int main(int argc, char* argv[]) {     char c;     int a[26]={0},A[26]={0};      while((c = getchar()) != '\n'){           if(c >= 'a' && c <= 'z') a[c-'a']++;//a[0]对应保存小写字母出现的次数           if(c >= 'A' && c <= 'Z') A[c-'A']++;//A[0]对应保存大写字母出现的次数     }     for(int i=0;i<26;i++)         if(a[i] != 0)          printf("%c->%d\n",'a'+i,a[i]);     for(int i=0;i<26;i++)        if(A[i] != 0)          printf("%c->%d\n",'A'+i,A[i]); }

user: user-0
content: 引用 4 楼 ctrigger的回复:#include <stdio.h>  int is_alpha(int c) { 	return ((c > 'a' && c < 'z') || (c > 'A' && c < 'Z')); }  int main(void) { 	int c, i, size; 	int result[128] = { 0 }; 	size = 100; 	 	while(size-- && ((c = getchar()) != '\n')) 	{ 		if(is_alpha(c)) result[c]++; 	} 	 	for(i = 0; i < 128; i++) 	{ 		if(is_alpha(i) && result[i]) 		{ 			printf("%c -> %d\n", i, result[i]); 		} 	} 	return 0; }  抱歉，我还是看不懂

user: user-2
content: 供参考： #include <stdio.h> #include <ctype.h>  int main(void) { 	char buf[101]; 	int result[128] = { 0 }, i = 0; 	fgets(buf, sizeof(buf), stdin); 	while(buf[i]) 	{ 		if(isalpha(buf[i])) result[buf[i]]++; 		i++; 	} 	for(i = 0; i < 128; i++) 	{ 		if(isalpha(i) && result[i]) 		{ 			printf("%c -> %d\n", i, result[i]); 		} 	} 	return 0; }

user: user-2
content: #include <stdio.h>  int is_alpha(int c) { 	return ((c > 'a' && c < 'z') || (c > 'A' && c < 'Z')); }  int main(void) { 	int c, i, size; 	int result[128] = { 0 }; 	size = 100; 	 	while(size-- && ((c = getchar()) != '\n')) 	{ 		if(is_alpha(c)) result[c]++; 	} 	 	for(i = 0; i < 128; i++) 	{ 		if(is_alpha(i) && result[i]) 		{ 			printf("%c -> %d\n", i, result[i]); 		} 	} 	return 0; }

user: user-3
content: 类似，全部输出即可，只是数组要创建2倍以区分大小写，对于大小写对应序进行处理即可实现。

user: user-0
content: 引用 2 楼 ctrigger的回复:供参考： #include <stdio.h> #include <ctype.h>  int main(void) { 	char buf[101]; 	int result[128] = { 0 }, i = 0; 	fgets(buf, sizeof(buf), stdin); 	while(buf[i]) 	{ 		if(isalpha(buf[i])) result[buf[i]]++; 		i++; 	} 	for(i = 0; i < 128; i++) 	{ 		if(isalpha(i) && result[i]) 		{ 			printf("%c -> %d\n", i, result[i]); 		} 	} 	return 0; }  我还没学到ctype
user-0 提问: 麻烦大佬帮忙看一下这个题我该怎么做

回复:
user: user-0
content: 你的是对的！

user: user-0
content: 运行出来不对，是一串数字。printf要是在for循环里边那就是不停地输出数字

user: user-1
content: 引用 楼主 恶魔妈妈买面膜1的回复:#include<stdio.h>  int main() {     int a=1,b=1,c=1,i,j,k;     for(a; a<10; a++)     {         for(b; b<10; b++)         {   for(c; c<10; c++)                 if(100*a+10*b+c+100*c+10*b+a==1333&&a>0)                     i=a;             j=b;             c=k;         }     }       printf("a=%d，b=%d，c=%d",i,j,k); } 你可以试试这个 #include <stdio.h> void main() { 	int a,b,c; 	for(a=1;a<10;a++) 	{ 		for(b=1;b<10;b++) 		{ 			for(c=1;c<10;c++) 			{ 				if(a*100+b*10+c+c*100+b*10+a==1333) 					printf("%d,%d,%d ",a,b,c); 			} 		} 	} }

user: user-2
content: 供参考  void test() {     int a, b, c;     for (a = 0; a < 10; a++)     {         for (b = 0; b < 10; b++)         {             for (c = 0; c < 10; c++)             {                 if (100 * a + 10 * b + c + 100 * c + b * 10 + a == 1333 )                     printf("a=%d, b=%d,c=%d\n", a, b, c);             }         }     } }
user-0 提问: 请教一个简单算法。

回复:
user: user-1
content: #include <stdio.h> #include <stdlib.h>  int a,b;  int main() { 	printf("请输入20-120中任意一个值："); 	scanf_s("%d", &a);         b = ((a - 20) / 100.0 + 0.002) * 255;          //b = ((a - 20) + 0.2) * (255 / 100.0); 	printf("%d\n", b); 	system("pause"); 	return 0; } b是整数型，自动就把小数点后面的去掉了，前面加的0.002*255就相当于四舍五入了 { double a=1.6; int b=a+0.5,c=a; } 输出结果是b为2，c为1；

user: user-0
content: 麻烦把b也四舍五入一下，怎么写？

user: user-2
content: b=((a-20)/100.0+0.001)*255;

user: user-3
content: 是这个意思吗？   int fun(int n) {     return (int)((n-20)*255.0/(120-20)+0.5); } int main( ) {     int i;     for(i=20; i<=120; i++) {         printf("%d:%d\n", i, fun(i));     }     return 0; }
user-0 提问: 已知两个升序数组，将它们合并成一个升序数组并输出。例如：数组array1={3,6,13,35,54}，数组array2={14,19,26,32}， 合并为新

回复:
user: user-0
content: 引用 3 楼 ctrigger的回复:标准归并排序，高效，复杂度是0（n）。 唉， 听不懂你说的是什么意思？可以帮我敲一下，让我看看吗？

user: user-1
content: 标准归并排序，高效，复杂度是0（n）。

user: user-0
content: 引用 1 楼 智者知已应修善业的回复:用归并排序或插入排序即可可参 代码怎么敲？不会我

user: user-2
content: 用归并排序或插入排序即可可参
user-0 提问: c语言求助 求10*10第n对角线的和

回复:
user: user-0
content: 引用 1 楼 俺是阿丰的回复:很像今年下半年的蓝桥杯的题 现在有答案了 你可以参考 谢谢一开始我没理解清题目的意思，现在搞明白了

user: user-1
content: 很像今年下半年的蓝桥杯的题 现在有答案了 你可以参考
user-0 提问: 输入年份和月份，计算这一年这个月有多少天。（查错）

回复:
user: user-1
content: 闰年判断条件有问题，供参考：#include <stdio.h> int main(int argc, char* argv[]) {     int year = 0,month = 0;     int days[]={31,28,31,30,31,30,31,31,30,31,30,31};     int day;     while(scanf("%d %d",&year,&month) != EOF)     {          if((year %4 ==0 && year % 100 !=0) || year % 400 ==0)         //if(year % 4 == 0 || (year % 4 == 0 && year % 100 != 0))    //某年为闰年         {             if(month != 2){                 day = days[month - 1];                 printf("%d",day);             }             else{                 day = 29;                 printf("%d",day);             }         }         else        //某年为平年         {             day = days[month - 1];             printf("%d",day);         }     }    // system("pause");     return 0; }

user: user-2
content: #include <stdio.h>  int main() {     int year = 0,month = 0;     int days[]={31,28,31,30,31,30,31,31,30,31,30,31};     int day;     while(scanf("%d %d", &year,&month) != EOF)     {         //if(year % 4 == 0 || (year % 4 == 0 && year % 100 != 0))    //某年为闰年         if(year % 400 == 0 || (year % 4 == 0 && year % 100 != 0))    //某年为闰年         {             if (month != 2) {                 day = days[month - 1];                 printf("%d",day);             }             else {                 day = 29;                 printf("%d",day);             }         }         else        //某年为平年         {             day = days[month - 1];             printf("%d",day);         }     }     return 0; } 供参考～
user-0 提问: 请大神解救下C言语题目

回复:
user: user-0
content: 对不起，是我天真了

user: user-1
content: 结构体存储学生信息，然后用链表链起来  遍历不及格学生写入文件  按行读文件，再组装下输出  最重要的：代码要自己写

user: user-2
content: 引用 1 楼 bluefishLTJ 的回复:有没有大哥帮帮忙 自己先试试，不尝试什么也不知道，什么也学不到。

user: user-3
content: 好好做作业.

user: user-0
content: 有没有大哥帮帮忙
user-0 提问: \(^o^)/@_@各位哥哥姐姐们，关于指针的类型转换及运算的问题？

回复:
user: user-1
content: 函数返回值是个地址，那么你截取了该地址的低8位。

user: user-2
content: 首先，指针的值就是地址，地址就是的无符号int类型 char c=‘a'; //c是字符，可以转成int void* p=(void*)(unsigned int)c; 把c转成无符号int（上面说了，其实就是地址），再把地址转成指针p 那么这样转出来的p怎么还原回c 那自然就是 char cc =(char)(unsigned int)p 把p指针转成地址（无符号int），再把int转成char就可以了
user-0 提问: 求助

回复:
user: user-1
content: 但语义上制造空的死循环就没啥价值了。

user: user-1
content: 语法肯定是合的，制造死循环嘛，等价于while(1);

user: user-2
content: 合法，表示一个无限空循环

user: user-0
content: 引用 1 楼 user-2的回复:合法，表示一个无限空循环 把括号外面的分号去掉可以吗
user-0 提问: 重积分求代码，怎样更简单？？？

回复:
user: user-0
content: 为啥是两个分号啊

user: user-1
content: for example int main( ) {     int i;     for(i=1; ; i++) {         if ((9*i+6)%7==1) {             printf("%d\n", 9*i+6);             break; //找到就退出循环         }         if (9*i+6<0) break; // 防止死循环，越界就证明无解     }     if(9*i+6<0) {         printf("无解\n");     }     return 0; }
user-0 提问: 输入n科成绩（浮点数表示），统计其中的最高分，最低分以及平均分。

回复:
user: user-1
content: 再精炼点，少用几个for:#include <stdio.h> int main(int argc, char* argv[]) {     int n;     int i;//循环变量     float max;         //max = -1;     float min ;        //min = 101;     float score[5] = {0};//score[5] = {};初始化为0     float avg = 0;                       //scanf("%d",&n);  这句没什么用，放这里输入n，但没用到n     for(i = 0; i < 5; i++)     {          scanf("%f",&score[i]);//scanf("%f",score);     }      min=max=score[0];//max min 初始化放在这里     for(i = 0; i < 5;i++)     {         if(max < score[i])         {             max = score[i];         }                             //}                            //for(i = 0; i < 5 ;i++)                            // {         if(min > score[i])         {             min = score[i];         }                          //}                         // for(i = 0; i < 5; i++)                         //{         avg += score[i];     }     printf("max=%.2f  min=%.2f   avg=%.2f\n",max,min,avg/5);     return 0; }

user: user-1
content: 修改如下，供参考，希望能帮到你：#include <stdio.h> int main(int argc, char* argv[]) {     int n;     int i;//循环变量     float max;         //max = -1;     float min ;        //min = 101;     float score[5] = {0};//score[5] = {};初始化为0     float avg = 0;                       //scanf("%d",&n);  这句没什么用，放这里输入n，但没用到n     for(i = 0; i < 5; i++)     {          scanf("%f",&score[i]);//scanf("%f",score);     }      min=max=score[0];//max min 初始化放在这里     for(i = 0; i < 5;i++)     {         if(max < score[i])         {             max = score[i];         }                             //}                            //for(i = 0; i < 5 ;i++)                            // {         if(min > score[i])         {             min = score[i];         }     }     for(i = 0; i < 5; i++)     {         avg += score[i];     }     printf("max=%.2f  min=%.2f   avg=%.2f\n",max,min,avg/5);     return 0; }

user: user-2
content: 把scanf(“%f”, score)改成 scanf(“%f”, &score[i])
user-0 提问: 请教一下大佬这个位置为什么报错呀？？

回复:
user: user-1
content: 修改如下，void sort1(int p[], int left, int right)这个函数只排除语法错误，逻辑没调试，供参考：#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> void reverse(int p[],int left,int right)//使数据颠倒顺序 {     int temp;     while (left < right)       {          temp     = p[left];          p[left]  = p[right];          p[right] = temp;          left++;     //right++; left++;       } }  void sort1(int p[], int left, int right)//将一组正...正负...负的数顺序换位 {     int i=0;     reverse(p, left, right);//reverse(*p, left, right);     while (p[i] < 0) { i++;}     reverse(p, left, i - 2);//reverse(*p, left, i - 2);     reverse(p, i - 1, right);//reverse(*p, i - 1, right); }  void CompletelySort(int* p, int left, int right)//将整个数组排为负数在前，正数在后且不改变原来顺序的数组 {     int j;// i=0     while (left < (right-1)/2) //while (left < right)       {         j=0;         while(p[left]<0){left++;}           //while (p[left++] > 0) { ; }                                            //left = left - 1;         j = left;                          //j += left;         while(p[j]>0 && j < right-1){j++;} //(p[j++] < 0) { ; }         reverse(p, left, j);            //reverse(*p, left, j - 2);         left++;       } }  int main(int argc, char* argv[]) {     int a[] = {1,2,-3,4,-6,-7,9,-10,7,22,-78};     int right = sizeof(a)/sizeof(int);      //sizeof(a)/sizeof(int)-1;     for (int i = 0; i < right; i++)        {          printf("%d  ", a[i]);        }     printf("\n");     CompletelySort(a, 0, right);     for (int i = 0; i < right;i++)       {         printf("%d  ",a[i]);//printf("\n%d   ",a[i]);       }     printf("\n");     //system("pause");     return 0; } 运行：

user: user-2
content: right--; left++;

user: user-3
content: 大概溜一眼代码，感觉问题不少 reverse函数while循环应该是right--，left++，否则就死循环了 reverse函数调用函数地方reverse(*p,left,right)要改成reverse(p,left,right)，注意参数*p和p的区别 剩下一就没细看了
user-0 提问: 这个幻方的程序为什么⊙∀⊙？错了，新手求教π_π

回复:
user: user-0
content: 引用 1 楼 user-1的回复:没发现什么问题啊，楼主想实现什么效果呢？#include <stdio.h> #include <stdlib.h> int main(int argc, char* argv[]) {     int a[39][39]={0},i,j,n,k,c,b;     k=0;     scanf("%d",&n);      for(i=0;i<n;i++)       for(j=0;j<n;j++)       {         k++;         if(k==1)             a[0][(n-1)/2]=k;         else           {             for(i=0;i<n;i++)                for(j=0;j<n;j++)                   if(a[i][j]==k-1)                    {                      c=i;                      b=j;                   }                  if(c==0&&b!=n-1)                     a[n-1][b+1]=k;                  else if(c!=0&&b==n-1)                            a[c-1][0]=k;                      else if(c==0&&b==n-1)                               a[c+1][b]=k;                           else                              {                               if(a[c-1][b+1]==0)                                   a[c-1][b+1]=k;                               else                                   a[c+1][b]=k;                              }           }       }     for(i=0;i<n;i++)         for(j=0;j<n;j++)         {             if(j!=n-1)                 printf("%d ",a[i][j]);             else                 printf("%d\n",a[i][n-1]);         }     return 0; } 那个输出好像是错的

user: user-0
content: 那个输出好像是错误的

user: user-1
content: 没发现什么问题啊，楼主想实现什么效果呢？#include <stdio.h> #include <stdlib.h> int main(int argc, char* argv[]) {     int a[39][39]={0},i,j,n,k,c,b;     k=0;     scanf("%d",&n);      for(i=0;i<n;i++)       for(j=0;j<n;j++)       {         k++;         if(k==1)             a[0][(n-1)/2]=k;         else           {             for(i=0;i<n;i++)                for(j=0;j<n;j++)                   if(a[i][j]==k-1)                    {                      c=i;                      b=j;                   }                  if(c==0&&b!=n-1)                     a[n-1][b+1]=k;                  else if(c!=0&&b==n-1)                            a[c-1][0]=k;                      else if(c==0&&b==n-1)                               a[c+1][b]=k;                           else                              {                               if(a[c-1][b+1]==0)                                   a[c-1][b+1]=k;                               else                                   a[c+1][b]=k;                              }           }       }     for(i=0;i<n;i++)         for(j=0;j<n;j++)         {             if(j!=n-1)                 printf("%d ",a[i][j]);             else                 printf("%d\n",a[i][n-1]);         }     return 0; }
user-0 提问: 有人接单写个简单的c语言代码吗？

回复:
user: user-1
content: 百度这种示例代码一堆

user: user-2

user: user-3
content: 就是读文件呗，到处都是教程

user: user-4
content: 直接把需求发出来不行？

user: user-3
content: 某度不就行了
user-0 提问: 大一C语言作业问题

回复:
user: user-1
content: 供参考：#include <stdio.h> int main(int argc, char* argv[]) {     char *s = new char[100],*t = new char[10],*str = new char[10],*temp = new char[100];     char *p,*q,*pos;      gets(s);     gets(t);     gets(str);      p=s;     q=temp;     while(*p != '\0')     {          pos = str;          if(*p == *t){             while(*p == *t && *t != '\0'){               p++;               t++;             }             while(*pos != '\0'){                *q++ = *pos++;             }          }          *q = *p;          q++;          p++;     }     *q = '\0';      strcpy(s,temp);     printf("%s\n",s);      system("pause");     return 0; }
user-0 提问: 求大佬帮忙

回复:
user: user-1
content: 打印的东西最好是返回值  int process (int x, int y, int (*f)(int, int)) {     return f(x, y); }  //main改成 printf("max=%d", process(a,b,max)); printf("\nmin=%d", process(a,b,min)); printf("\nadd=%d", process(a,b,add));

user: user-2
content: process函数，用一个f就可以了。m = f(x, y); p,q做啥呢？ 根据process传进来不同的函数名，f执行不同的函数体。因此p,q没必要，再说用了p,q这两个函数的返回值做啥用了？    void process (int x, int y, int (*f)(int, int)) {     int w = f(x, y);    printf("%d\n", w); } 这个函数执行几条语句就可以了，试试～
user-0 提问: 求助

回复:
user: user-1
content: for example  int isPrimeNum(int num) { //判断是否是质数，是返回1，不是返回0     int i;     if (num<2) return 0;     else if (num==2) return 1;     else if (num%2==0) return 0;          for(i=3; i<=num/2; i++) {         if (num%i==0) return 0;     }     return 1; }  int main( ) {     int n, i;     scanf("%d", &n);     if (n<2) return 1;     if (isPrimeNum(n)) { //         printf("%d本身是质数，没有质因子。", n);         return 0;     }     while (!isPrimeNum(n)) { //如果不是质数则一直循环         for(i=2;;i++) {             if (n%i==0) {                 printf("%d ", i);                 n /= i;                 break;             }         }     }     printf("%d", n);     return 0; }

user: user-2
content: 这类动手题，最好自己写。有问题再问，效果比较好。 Show一个，仅供参考： #include <stdio.h>  void func(int n) { 	int i, j, flag; 	 	for(i = 2; i <= n; i++) 	{ 		flag = 1; 		 		for(j = 2; j <= i / 2; j++) 		{ 			if(n % j == 0) 			{ 				flag = 0; 				break; 			} 		} 		 		if(flag == 1 && n % i == 0) 		{ 			printf("%d\t", i); 			func(n / i); 			break; 		} 	} }  int main(void) { 	int n; 	scanf("%d", &n); 	 	func(n); 	printf("\n"); 	 	return 0; }
user-0 提问: 关于C语言内存的一个问题

回复:
user: user-1
content: strlen计算依据是判断字符串出现第一个0的位置，  i 是整型32位，char 是8位，赋值时会把整型的高24位舍弃，取第八位，负数用补码表示，-1是0xfffffffff.-2是0xfffffffe,依次到了循环第255次时，低8位正好是00，所以strlen为255

user: user-2
content: 因为第一个值为0的a[i],i=0,1,2,...出现在a[255]的位置。

user: user-3
content: strlen是寻找第一个值为0的元素的下标。

user: user-4
content: 因为在255的位置出现了0即'\0'，strlen是遇到'\0'返回的
user-0 提问: 教务管理系统编写

回复:
user: user-0
content: 引用 1 楼 自信男孩的回复:先总结一下需要那些功能，然后设计一下整个架构，以及把功能细化成一个个的函数～ 准备从班级信息管理，教师信息管理，学生信息管理，课程信息管理，成绩信息管理这几个方向写，

user: user-1
content: 先总结一下需要那些功能，然后设计一下整个架构，以及把功能细化成一个个的函数～
user-0 提问: C语言

回复:
user: user-1
content: 两种方法，供参考：#include <stdio.h> #include <math.h>  bool isPerSqr(int num);//方法1 bool isSqr(int n);//方法2  int main(int argc, char* argv[]) {     int n;     scanf("%d",&n);     if(n < 101 || n > 999) return 1;      for(int i=101;i<=n;i++){         if(isPerSqr(i))             printf("[F1].%-4d ",i);         if(isSqr(i))             printf("[F2].%-4d \n",i);     }     system("pause");     return 0; }  //方法一:不使用sqrt bool isPerSqr(int num) {         int n=num;         for(int i=1; n>0; i+=2){             n -= i;         }         if(n == 0){            int a = num%10;            int b = num/10%10;            int c = num/100;            if(a==b || a==c || b==c) return 1;         }       return 0; }  //方法二:使用sqrt。 bool isSqr(int n) {       int d = (int)(sqrt(n) + 0.5);  //四舍五入求整       if(n == d*d){            int a = n%10;            int b = n/10%10;            int c = n/100;            if(a==b || a==c || b==c) return 1;         }       return 0; }

user: user-2
content: 仅供参考：#include <stdio.h>  int func(int n) { 	int i, r, a, b, c; 	 	r = 0; 	a = n / 100; 	b = n % 100 / 10; 	c = n % 10; 	 	if(a == b || b == c || c == a) 	{ 		for(i = 10; i <= n/2; i++) 		{ 			if(i * i == n) 			{ 				r = 1; 				break; 			} 		} 	} 	 	return r; }  int main(void) { 	int n, i; 	 	scanf("%d", &n); 	 	if(n < 101 || n > 999) 	{ 		printf("输出有误\n"); 		return 1; 	} 	 	for(i = 101; i <= n; i++) 	{ 		if(func(i) == 1) printf("%d\t", i); 	}  	return 0; }

user: user-3
content: 建议自己先试试写吧～
user-0 提问: 求解

回复:
user: user-1
content: 代码是这个： int main(int a,char ** str) { 	int x=2,y=12,z=6; 	while(x!=y) 	{ 	  x++;z++;y--; 	} 	printf("Q1:z=%d\n----------\n",z);  	x=2;y=12;z=6; 	while(x=y) 	{ 	  printf("x=%d y=%d z=%d\n",x,y,z); 	  x++;z++;y--; 	}  	printf("Q2:z=%d\n",z);  }

user: user-1
content: Q1:z=11 ---------- x=12 y=12 z=6 x=11 y=11 z=7 x=10 y=10 z=8 x=9 y=9 z=9 x=8 y=8 z=10 x=7 y=7 z=11 x=6 y=6 z=12 x=5 y=5 z=13 x=4 y=4 z=14 x=3 y=3 z=15 x=2 y=2 z=16 x=1 y=1 z=17 Q2:z=18

user: user-1
content: int main(int a,char ** str) { 	int x=2,y=12,z=6; 	while(x!=y) 	{ 	  x++;z++;y--; 	} 	printf("z=%d\n",z);  	x=2;y=12;z=6; 	while(x=y) 	{ 	  x++;z++;y--; 	} 	printf("z=%d\n",z);  }   结果：

user: user-2
content: 一个等号是赋值，执行到得0为止。

user: user-3
content: 因为判断的是x = y;表达式，这个表达式为假时退出循环，而假即为0，就是y=0时就是循环的退出条件。所以是y=12循环12次，即z += 12;即18  注意x = y这里是赋值，最终y决定while循环退出～
user-0 提问: 小白菜求问，这是哪里错了，哭

回复:
user: user-0
content: 引用 5 楼 自信男孩的回复:改一下函数名，long是C语言用于定义变量的特殊字符，不能被用于其他 嗯嗯，谢谢。

user: user-1
content: 改一下函数名，long是C语言用于定义变量的特殊字符，不能被用于其他

user: user-0
content: 懂了懂了，谢谢，

user: user-2
content: 引用 2 楼 qq_52114598 的回复:嗷, 不行吗  不行噢  而且你那个len没有申明

user: user-0
content: 嗷, 不行吗

user: user-3
content: C语言long是关键字，你用做函数名？？？
user-0 提问: 猜数游戏

回复:
user: user-0
content: 菜单选择怎么写呢

user: user-1
content: 循环每次先进一个选择函数，然后用户输入1或者2或者字符串什么的你自己写这个函数，接着根据用户输入if判断调用电脑猜的函数还是用户猜的函数

user: user-2
content: 写成两个函数，写个菜单选项，用if-else或switch语句实现
user-0 提问: 萌新求教

回复:
user: user-0
content: 求助，有大佬帮忙再看下吗？

user: user-0
content: 改了还是不对，能再看看问题在哪里吗？

user: user-0
content: 感谢各位的指点

user: user-1
content: #include <stdio.h> int main(int argc, char* argv[]) {     float sum=0,m=1;     int n,i;     printf("请输入项数:");     scanf("%d",&n);     if(n<3) return 1;     for(i=2;i<=n;i++)     {       sum += 1.0/m;       m=3*i-2;     }     printf("%f\n",sum);     system("pause");     return 0; }

user: user-2
content: 引用 6 楼 ABBALILY 的回复:大佬能明示下把循环变量i的定义放哪吗？把for去掉直接写int i=1;i<=n;i++吗？ int i; for (i = 1; i <= n; i++) 这样就好，其实有些编译器支持你这种写法的，但是dev好像就不行

user: user-0
content: 大佬能明示下把循环变量i的定义放哪吗？把for去掉直接写int i=1;i<=n;i++吗？

user: user-3
content: 把循环变量的i定义放在前面，因为你的编译版本不支持在循环体里定义for (int i=0;这种形式

user: user-1
content: 修改如下，供参考：#include <stdio.h> int main(int argc, char* argv[]) {     float sum=0,m=1;     int n;     printf("请输入项数:");     scanf("%d",&n);     if(n<3) return 1;     for(int i=2;i<=n;i++)     {       sum += 1.0/m;       m=3*i-2;     }     printf("%f\n",sum);     system("pause");     return 0; }

user: user-4
content: m+=3改成 m=3*i-2
user-0 提问: 字符数组输出问题

回复:
user: user-1
content: 因为b+1不等于b[1]，*(b+1)等价b[1] b+1是值下表1的元素的地址。

user: user-2
content: b指向字符数组首地址即&b[0],b+1指向第2个字符的地址，即r,而%s输出r为首地址的一串字符。楼上的回答是正解。

user: user-3
content: 请参考《C++中printf()函数的用法10-2》 希望能够帮到您！

user: user-4
content: 因为你用的%s输出的，改成%c输出就是r了
user-0 提问: 菜鸟遇难，寻找大佬！

回复:
user: user-0
content: 引用 2 楼 qzjhjxj的回复:供参考：#include <stdio.h> #include <windows.h>  #define map_mode "■" #define width  30 #define height 15  void creatmap (); void Pos(int x,int y);  int main(int argc, char* argv[]) {     system("mode con cols=100 lines=30");//设置控制台屏幕的大小     creatmap ();     system("pause");     return 0; }  void Pos(int x,int y) {     COORD pos = {x,y};     HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);     SetConsoleCursorPosition(hOut,pos); }  void creatmap() {     for(int i=0;i<=width;i+=2){         Pos(i,0);         printf(map_mode);         Pos(i,height);         printf(map_mode);     }     for(int i=0;i<height;i++){         Pos(0,i);         printf(map_mode);         Pos(width,i);         printf(map_mode);     } } respect

user: user-0
content: 引用 1 楼 user-2的回复:需要这么复杂吗？二维数组不就可以了吗? 谢谢，你的建议！

user: user-1
content: 供参考：#include <stdio.h> #include <windows.h>  #define map_mode "■" #define width  30 #define height 15  void creatmap (); void Pos(int x,int y);  int main(int argc, char* argv[]) {     system("mode con cols=100 lines=30");//设置控制台屏幕的大小     creatmap ();     system("pause");     return 0; }  void Pos(int x,int y) {     COORD pos = {x,y};     HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);     SetConsoleCursorPosition(hOut,pos); }  void creatmap() {     for(int i=0;i<=width;i+=2){         Pos(i,0);         printf(map_mode);         Pos(i,height);         printf(map_mode);     }     for(int i=0;i<height;i++){         Pos(0,i);         printf(map_mode);         Pos(width,i);         printf(map_mode);     } }

user: user-2
content: 需要这么复杂吗？二维数组不就可以了吗?
user-0 提问: 大佬们，我没看明白这个函数的递归是咋会事。

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

user: user-2
content: 顺便说一下，字写得很好

user: user-2
content: 没仔细看，好象是菲波那契数列？ 这种递归是必须这样的写法，不管如何写都达不到你想象的完美语法规定的

user: user-3
content: 就是递归求阶乘 另外，这是显示的手写体，不是真的手写
user-0 提问: C语言解析二进制文件，去掉标签位，读取标签后两位数值，写出文件

回复:
user: user-0
content: 引用 6 楼 ctrigger的回复:[quote=引用 5 楼 赵4老师 的回复:]给钱就有。 哈哈，这个没必要吧。 不怕麻烦，自己慢慢折腾解包就行。 实在不行，可以参考TCP/IP解包源码。[/quote] 可以帮忙写下代码吗？有偿

user: user-1
content: 引用 5 楼 赵4老师 的回复:给钱就有。 哈哈，这个没必要吧。 不怕麻烦，自己慢慢折腾解包就行。 实在不行，可以参考TCP/IP解包源码。

user: user-2
content: 给钱就有。

user: user-1
content: 引用 3 楼 我是宁野野 的回复:通讯协议应该是这样的：头+数据长度+数据正文+校验 例如：AA 44 05 01 02 03 04 05 EA 这里我假设的一条数据，协议如下： 数据头：AA 44 数据长度： 05 数据正文： 01 02 03 04 05 校验：EA 现在我有一个这样的txt文件，想把里面的数据正文解析出来，请问有代码 吗？  根据协议格式，定义一个结构体，对号入座，接下来就是memcpy了。

user: user-0
content: 通讯协议应该是这样的：头+数据长度+数据正文+校验 例如：AA 44 05 01 02 03 04 05 EA 这里我假设的一条数据，协议如下： 数据头：AA 44 数据长度： 05 数据正文： 01 02 03 04 05 校验：EA 现在我有一个这样的txt文件，想把里面的数据正文解析出来，请问有代码 吗？

user: user-2
content: #include <stdio.h> #include <string.h> int main() {     unsigned char s[24]={         0xAA,0xAA,0x04,0x80,0x02,0x12,0x34,0x99,         0xAA,0xAA,0x04,0x80,0x02,0x56,0x78,0x99,         0xAA,0xAA,0x04,0x80,0x02,0x12,0x34,0x99,     };     unsigned char m[5]={0xAA,0xAA,0x04,0x80,0x02};     unsigned char d[6];     unsigned char *ps,*pd;      ps=s;     pd=d;     while (1) {         if (0==memcmp(ps,m,5)) {             pd[0]=ps[5];             pd[1]=ps[6];             ps+=8;             pd+=2;             if (ps-s>=24 || pd-d>=6) break;         } else break;     }     for (int i=0;i<6;i++) printf("0x%02X ",d[i]);     return 0; } //0x12 0x34 0x56 0x78 0x12 0x34

user: user-1
content: 真懒。这都是固定模式，按照协议直接对号入座就行。。
user-0 提问: 求助

回复:
user: user-0
content: 引用 1 楼 chxchxkkk的回复:供参考  #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <string.h>  int main(void) {     char buff[80];       memset(buff, 0, 80);          while (1)     {         int i = 0;         gets_s(buff, 80);          if (strcmp(buff, "End of file") == 0)             break;          while (buff[i] != '\0')         {             if (buff[i] >= 'a'&&buff[i] <= 'z')             {                 buff[i] = buff[i] - 32;             }             i++;         }         printf("%s\n", buff);               }          system("pause");     return 0; }  如何实现多行输入，有点看不懂

user: user-1
content: 要答案的话哪里都可以搜到吧

user: user-2
content: 供参考  #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <string.h>  int main(void) {     char buff[80];       memset(buff, 0, 80);          while (1)     {         int i = 0;         gets_s(buff, 80);          if (strcmp(buff, "End of file") == 0)             break;          while (buff[i] != '\0')         {             if (buff[i] >= 'a'&&buff[i] <= 'z')             {                 buff[i] = buff[i] - 32;             }             i++;         }         printf("%s\n", buff);               }          system("pause");     return 0; }

user: user-3
content: 网上有很多例子呢，整个不难吧。
user-0 提问: 计算机大一期末c语言课程设计题目

回复:
user: user-1
content: 先定义一个教师的结构体，包括工号、姓名、工资等信息。 然后用结构体数组或链表完成上述各模块。

user: user-0
content: 我用devc＋＋写的

user: user-2
content: 把每个小块都写成一个函数，有意思，我也试着写一下

user: user-2
content: 先定义一个二维数组，查找，输出所有，
user-0 提问: 写两个函数，分别求两个整数的最大公约数和最小公倍数，用主函数调用这两个函数，并输出结果。

回复:
user: user-0
content: 非常感谢 我试着按这个思路来

user: user-1
content: 我也没完全理解题意，不一定符合要求。仅供参考： #include <stdio.h>  void gcd(int *a, int *b, int *r) { 	if(*b == 0) *r = *a; 	else 	{ 		int t = *a; 		*a = *b; 		*b = t % *b; 		gcd(a, b, r); 	} }  int main(void) { 	/* a，b是输入值，r是最大公约数 */ 	int a, b, m, n, r; 	 	a = 12; 	b = 16; 	 	m = a; 	n = b; 	gcd(&m, &n, &r); 	 	printf("%d\t%d\n", r, a*b/r);  	return 0; }
user-0 提问: 求解，不会做

回复:
user: user-1
content: //输入一个字符串，字符串里全是小写字母比如 char  a[20]="bcadfgih" //对其中的小写字母进行从小到大排序（a最小z最大） 以上面为例 a[20]变为"abcdfghi" //（使用排序算法） //再输入一一个字符 比如char b='e'，插入拍完序的a[20]中，插入规则是插入比b小和比b大的字符中， //比如上面的 a[20]="abcdefghi" #include <stdio.h> #include <string.h> int main() {     char a[20],b;     int i,j,N;      fgets(a,19,stdin);     N=strlen(a);     if ('\n'==a[N-1]) {a[N-1]=0;N--;}     printf("%s\n",a);      for (i=0;i<N-1;i++) {         for (j=i+1;j<N;j++) {             if (a[i]>a[j]) {                 b=a[i];a[i]=a[j];a[j]=b;             }         }     }     printf("%s\n",a);      rewind(stdin);     b=getchar();     for (i=0;i<N;i++) {         if (b<a[i]) {             for (j=N;j>=i;j--) a[j+1]=a[j];             a[i]=b;             break;         }     }     printf("%s\n",a);      return 0; }

user: user-2
content: 基本实现功能，没有优化。  #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <string.h>  #define N 20  //排序 void cSort(char a[], int n) {     int i, j;     char tmp;     for (i = 0; i < n - 1; i++)     {         for (j = 0; j < n - i - 1; j++)         {             if (a[j] > a[j + 1])             {                 tmp = a[j];                 a[j] = a[j + 1];                 a[j + 1] = tmp;             }         }     }     }  //插入 void cInsert(char a[], int n, char b) {     int i, index = 0;     for (i = 0; i < n; i++)     {         if (a[i] > b)         {             index = i;             break;         }                    }      for (i = n; i >= index; i--)     {         a[i] = a[i-1];     }     a[index] = b;    }  int main(void) {     char a[N] = { 0 }, t;     printf("输入一个字符串(小写字母):\n");     scanf("%s", a);     int n = strlen(a);     if (n <= N - 1)     {         cSort(a, n);             }     else     {         printf("字符串越界！\n");         exit(1);     }     printf("排序后字符串：\n%s\n", a);          getchar();      if (n < N - 1)     {         printf("输入要插入的字符：\n");         scanf("%c", &t);         cInsert(a, n, t);     }     else     {         printf("字符串已达上限，不能插入字符。\n");                    }         printf("%s\n", a);      system("pause");     return 0; }

user: user-3
content: 排序和插入操作。不是很难的问题，建议楼主自己先试试，遇到问题再提出来吧
user-0 提问: c语言，求指点

回复:
user: user-0
content: 引用 2 楼 forever74的回复:BTW： 要养成写代码用标准格式的习惯。 你这样想，我的代码二十块钱一行，花括号不独立占一行那就损失大了。  嘿嘿 刚开始学，还没养成习惯😂

user: user-0
content: 引用 1 楼 自信男孩的回复: #include<stdio.h> typedef struct{     int year, month,day; }Date;  void sum(Date *p) {     int md[]={31,28,31,30,31,30,31,31,30,31,30};     int i,total=0;     for(i=0;i<p->month-1;i++)         total += md[i];     total+=p->day;     //if((p->year%400==0||p->year%4==0&&p->year%100==0)&&p->month>2)     if((p->year%400==0||(p->year%4==0&&p->year%100!=0))&&p->month>2)         total++;     printf("%d",total); } int main() {     Date d ;     Date *p = &d   ;     scanf("%d-%d-%d",&d.year,&d.month,&d.day);     sum(p);      return 0; } 供参考～  楼主没有调用sum函数，因此没有输出  其他问题详见上面的代码 我还以为用Date  d 的时候就调用了，谢谢大佬了

user: user-1
content: BTW： 要养成写代码用标准格式的习惯。 你这样想，我的代码二十块钱一行，花括号不独立占一行那就损失大了。

user: user-2
content: #include<stdio.h> typedef struct{     int year, month,day; }Date;  void sum(Date *p) {     int md[]={31,28,31,30,31,30,31,31,30,31,30};     int i,total=0;     for(i=0;i<p->month-1;i++)         total += md[i];     total+=p->day;     //if((p->year%400==0||p->year%4==0&&p->year%100==0)&&p->month>2)     if((p->year%400==0||(p->year%4==0&&p->year%100!=0))&&p->month>2)         total++;     printf("%d",total); } int main() {     Date d ;     Date *p = &d   ;     scanf("%d-%d-%d",&d.year,&d.month,&d.day);     sum(p);      return 0; } 供参考～  楼主没有调用sum函数，因此没有输出  其他问题详见上面的代码
user-0 提问: C语言

回复:
user: user-1
content: PPT下半截估计就是说这个的，都特意切掉了还贴啥呀？

user: user-2
content: const unsigned char fonts[10][5] = {         { 0x3E, 0x51, 0x49, 0x45, 0x3E },   // 0         { 0x00, 0x42, 0x7F, 0x40, 0x00 },   // 1         { 0x42, 0x61, 0x51, 0x49, 0x46 },   // 2         { 0x21, 0x41, 0x45, 0x4B, 0x31 },   // 3         { 0x18, 0x14, 0x12, 0x7F, 0x10 },   // 4         { 0x27, 0x45, 0x45, 0x45, 0x39 },   // 5         { 0x3C, 0x4A, 0x49, 0x49, 0x30 },   // 6         { 0x01, 0x71, 0x09, 0x05, 0x03 },   // 7         { 0x36, 0x49, 0x49, 0x49, 0x36 },   // 8         { 0x06, 0x49, 0x49, 0x29, 0x1E } }; // 9      /* scanf printf */

user: user-3
content: 需求看不全，多贴几张图～
user-0 提问: 求助！！！c语言指针

回复:
user: user-1
content: 引用 6 楼 weixin_52705034 的回复:[quote=引用 3 楼 forever74的回复:]另外，你的转置函数转了2次，又转回去了。 没，我第二个循环是等于i，只转了一次[/quote] 抱歉，看错了，光盯着3了。

user: user-2
content: main函数里，最后的输出有问题，for循环变量用的是j，而循环体却用i，此时的i已经是3，所以输出是越界了。输出自然是随机值

user: user-0
content: 引用 3 楼 forever74的回复:另外，你的转置函数转了2次，又转回去了。 没，我第二个循环是等于i，只转了一次

user: user-0
content: 没，我第二个循环是等于i

user: user-0
content: 引用 2 楼 forever74的回复:你输出的时候循环变量j，引用的下标却是i，脱节了。 感谢感谢，确实原来是这么错的

user: user-1
content: 另外，你的转置函数转了2次，又转回去了。

user: user-1
content: 你输出的时候循环变量j，引用的下标却是i，脱节了。

user: user-3
content: 函数，内部，定义实现函数，应该不可以吧
user-0 提问: 数组中字符串长度异常

回复:
user: user-1
content: 我一般这样形容这种做法： 相当于你偷了一次东西没有被抓到。

user: user-2
content: 数组越界操作是未定义行为，未定义行为是可能没问题。不建议操作越界的数据。

user: user-3
content: 其实电脑开机后物理内存的每个字节中都有值且都是可读写的，从来不会因为所谓的new、delete或malloc、free而被创建、销毁。区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页，一页通常为4KB。

user: user-4
content: 用for语句来吧，可能越界了都给你打出来了
user-0 提问: 链表求助

回复:
user: user-0
content: 感谢你的帮助

user: user-1
content: r->Next == NLLL; //要用==？ 在循环里直接对L修改（遍历）是否合适？  可以改成如下：  s = L; while (s->Next) {     s = s->Next; }
user-0 提问: linux下建立两条长链

回复:
user: user-0
content: 引用 1 楼 user-1的回复:一个epoll就解决了么？同时监控读写即可。 其实PThread线程效率貌似挺高的，和epoll基本差不多。。 epoll只是创建长链和监听，数据会在接收后放入队列

user: user-1
content: 一个epoll就解决了么？同时监控读写即可。 其实PThread线程效率貌似挺高的，和epoll基本差不多。。
user-0 提问: 帮忙分析一下一个简单的问题.

回复:
user: user-1
content: 引用b = NULL:最后：号错了，是‘；‘号，修改下。

user: user-1
content: #include<stdio.h> #include<stdlib.h> int main(int argc, char* argv[]) {    //int a[ ] = { 0 };      int a[10] = { 0 };//固定长度的数组及初始化为 0      int m;     scanf("%d", &m);      int *b = new int[m];   //第一种动态长度数组     int *c = (int *)malloc(sizeof(int) * m);//第二种动态长度数组      memset(b,-1,m*sizeof(b));//初始化数组b为 -1      memset(c,0,m*sizeof(c));//初始化数组c为 0      //for (int i = 0; i < m; i++)//用循环初始化数组     //  {     //    b[i]=c[i]=0;     //  }      for (int i = 0; i < m; i++)//当m>10时，a[10]以后显示的就是不确定值,越界了       {         printf("a[%d]=%-15d\tb[%d]=%-15d\tc[%d]=%-15d\n",i,a[i],i,b[i],i,c[i]);       }     system("pause");     delete [] b;   //动态释放     b = NULL:     free (c);     c = NULL;     return 0; }

user: user-2
content: 注释反了。。把 int a[10] = {0} 注释去掉即可。
user-0 提问: 求助

回复:
user: user-1
content: 把define 的s展开就好了，展开就知道结果是多少和为什么是这个了。  s(a-b-c) ===== a-b-c*a-b-c 因为a-b-c是x，等价替换就可以了。

user: user-2

user: user-3
content: 宏定义只是简单的替换，所以s(a - b - c)等于10 - 6 - 3 * 10 - 6 - 3 = -35
user-0 提问: 求解

回复:
user: user-1
content: 网上对于这样的代码和需求还是挺多的，建议自己动手查查，测试试试～

user: user-2
content: 供参考：#include <iostream.h> #include <stdio.h> int gys(int x,int y) //辗转相除法 公约数 {     int a;     if(x<y)  //将大的数排在前面     {         a=x;         x=y;         y=a;     }     while(x%y!=0)      {         a=x%y;         x=y;            y=a;       }     return y;  }  int gbs(int x,int y)  //公倍数 {     int result=(x*y)/(gys(x,y));     return result; }  int main(int argc, char* argv[]) {     int x,y;     cout<<"请输入两个正整数：";     cin>>x>>y;        cout<<"最大公约数为:" <<gys(x,y)<<endl;     cout<<"最小公倍数为:" <<gbs(x,y)<<endl;        system("pause");     return 0; }
user-0 提问:  一个学习小组有n（n≤50）学生，每个学生有学号和考试成绩2个信息。编写程序实现以下功能：

回复:
user: user-1
content: 你可以看看c++的map

user: user-2
content: 供参考，你抄一遍，加深印象：#include <stdio.h> #define M 50 #define N 2 int main(int argc, char* argv[]) {     int stu[M][N];      for(int i=0 ;i<M;i++){        printf("请输入第%d个学生学号和成绩：",i+1);        for(int j=0;j<N;j++){            scanf("%d",&stu[i][j]);        }     }      for(int i=0 ;i<M;i++){        printf("第%d个学生学号和成绩：",i+1);        for(int j=0;j<N;j++){            printf("%5d%c",stu[i][j],((j==1)? '\n':' '));        }     }      int i,temp;     printf("请输入要查询的学号：");     scanf("%d",&temp);     for(i=0;i<M;i++){        if(*stu[i] == temp) break;        continue;     }     if(i==M) printf("无此学生！\n");     else       printf("学号:%d  成绩:%d\n",stu[i][0],stu[i][1]);      system("pause");     return 0; }
user-0 提问: 求助

回复:
user: user-1
content: 倒序循环字符串a

user: user-0
content: 引用 1 楼 user-5的回复:从字符串a的最后一个字符的下标到第个字符的下标。 超级感谢你昂

user: user-2
content: 这是用于遍历字符串的吧，没看到循环体，不好具体确定。从for循环上看是从字符串的末尾向前循环的。  strlen(a)是字符串的长度，也是'\0'的下标，然后减1，正好是有效字符串的最后一个字符的下标

user: user-3
content: char a[] = "123456789"; 	int i; 	for (i = strlen(a) - 1; i >= 0; i--) 	{ 		printf("%c", a[i]); 	} 输出的结果为

user: user-4
content: 引用 楼主 qq_52593311的回复:for(i=strlen(a)-1;i>=0;i--) 求大佬解释一下这个循环是什么意思 strlen是一个字符串函数——它用来计算字符串的长度 那么这个循环就是从数组最后一个下标开始到第一个下标，相当于abcd  一>  dcba

user: user-5
content: 从字符串a的最后一个字符的下标到第个字符的下标。
user-0 提问: 求助

回复:
user: user-1
content: 请将图片用markdown整理成具体代码片段。 你的帖子看着真累。

user: user-2
content: 个人认为是一样的。a[0]和p类型是一样的。  #include <stdio.h>   int main(void) {     int a[3][4], cnt = 0;     int i, j;     int *p;        for (i = 0; i < 3; i++)         for (j = 0; j < 4; j++)             a[i][j] = ++cnt;      p = a[0];     printf("%p, %p\n", p + 5, a[0] + 5);     printf("%d, %d\n", p[5] , *(a[0] + 5));      return 0; } 供参考～  可以看到两个地址和对应的值都是一样的。 内存是线性的，即使是二维数组也是线性存放的。

user: user-3
content: 把二维数组按一维排成一行后第i+1个元素地址 和 你的 第0行第i+1个元素地址是一个意思 但是你有没有想过，i 可以大于一行的个数，当 i 大于一行的个数时，如果还说成是第0行是不是就不合适了（因为已经超出第0行了）。所以说 按一维转成一行后 就更合适一些。

user: user-4
content: 参见《C++程序设计精要教程》的类型解析，p+i中的i不一定代表一个元素。如果a是二维数组int a[10][20],而定义int (*p)[20]; p=a[0];则p+i为第i*20个元素。关键看你的数组a的定义。你的问题不全不清楚，无法回答。
user-0 提问: C语言—顺序元素的逆置，循环部分出了点问题，求帮助！！详细在下面说明。

回复:
user: user-0
content: 引用 2 楼 qzjhjxj的回复:元素的逆置函数void inversion(char a[],int length)算法有问题，把最后的‘/'符号逆序了，这个楼主自己修改下，其余修改如下,供参考：#include <stdio.h>  void inversion(char a[],int length); //void inversion();函数声明错误  int main(int argc, char* argv[]) {     char a[100]={'0'};     char c;     int i=0,length=0; 	do 	{  	   printf("\nplease enter a letter(if want to exit,enter'/'):");            scanf("%c",&c);            getchar();   //吃掉缓冲区多余字符 	   if(c>='a' && c<='z' || c>='A' && c<='Z' || c=='/') 	   { 		  a[i]=c; 		  i++; 	   } 	   else 	   { 	      printf("\nError! please enter a 'letter'!"); 	   }          }while(c!='/'&&i<100);      if(a[0]=='/')           printf("\n未输入元素，无法逆置");     else if(a[1]=='/')           printf("\n只有一个元素%c，无法逆置",a[0]);          else           { 	   length=i;            inversion(a,length);            printf("元素逆置为：\n");            for(i=0;i<length;i++)                    printf("%c ",a[i]);          }     system("pause");     return 0; }   void inversion(char a[],int length) { 	int p,q; 	char t; 	p=0; q=length-1; 	while(p<q) 	{ 	   t=a[p]; 	   a[p]=a[q]; 	   a[q]=t; 	   p++; 	   q--;     } } 非常感谢您指出了关键的错误！！程序改好啦！

user: user-0
content: 非常感谢您指出了关键的错误！！程序改好啦！

user: user-0
content: 引用 1 楼 自信男孩的回复:注意一下每次输入之后的'\n'换行符，下次的匹配就优先匹配'\n'了，所以提示Error!了。  解决办法是，如果输入是一次一个的输入，可以在scanf后面加一个getchar();用于 接收'\n'  对于%d不会有这种问题，%c比较特殊 知道了！！非常感谢！！

user: user-1
content: 元素的逆置函数void inversion(char a[],int length)算法有问题，把最后的‘/'符号逆序了，这个楼主自己修改下，其余修改如下,供参考：#include <stdio.h>  void inversion(char a[],int length); //void inversion();函数声明错误  int main(int argc, char* argv[]) {     char a[100]={'0'};     char c;     int i=0,length=0; 	do 	{  	   printf("\nplease enter a letter(if want to exit,enter'/'):");            scanf("%c",&c);            getchar();   //吃掉缓冲区多余字符 	   if(c>='a' && c<='z' || c>='A' && c<='Z' || c=='/') 	   { 		  a[i]=c; 		  i++; 	   } 	   else 	   { 	      printf("\nError! please enter a 'letter'!"); 	   }          }while(c!='/'&&i<100);      if(a[0]=='/')           printf("\n未输入元素，无法逆置");     else if(a[1]=='/')           printf("\n只有一个元素%c，无法逆置",a[0]);          else           { 	   length=i;            inversion(a,length);            printf("元素逆置为：\n");            for(i=0;i<length;i++)                    printf("%c ",a[i]);          }     system("pause");     return 0; }   void inversion(char a[],int length) { 	int p,q; 	char t; 	p=0; q=length-1; 	while(p<q) 	{ 	   t=a[p]; 	   a[p]=a[q]; 	   a[q]=t; 	   p++; 	   q--;     } }

user: user-2
content: 注意一下每次输入之后的'\n'换行符，下次的匹配就优先匹配'\n'了，所以提示Error!了。  解决办法是，如果输入是一次一个的输入，可以在scanf后面加一个getchar();用于 接收'\n'  对于%d不会有这种问题，%c比较特殊
user-0 提问: 求助，为什么数组大小在主函数和子函数里不一样？

回复:
user: user-1
content: 形参a不是main函数的a了，这里是一个指针，是一个数组指针。因此对于指针的长度都是固定的。  建议楼主增加一个参数，用于接收列数。

user: user-2
content: 数组作为参数的时候，会退化为指针，所以在子函数中用sizeof得到的是指针的大小

user: user-3
content: 指针变量大小看是多少位系统

user: user-3
content: 测试字符串所占空间大小，值为字符个数加一 测试变量，那就是变量所占空间大小 测试指针变量就是四个字节 测试类型，那就是类型对应空间大小 测试数组名，就是测试数组所占空间大小

user: user-4
content: 在函数access里，sizeof得到的是指针尺寸，数组大小需要另外参数传进来，设数组为全局数组也可以传进来，或把数组封装在结构变量里传进来。
user-0 提问: C语言已知两个数组：int x[4] = { 1,1,1,1}; int h[6] = {6,5,4,3,2,1}。对这两个数组做以下运算

回复:
user: user-1
content: 供参考：#include <stdio.h> void conv(int *p,int *q,int n);  int main(int argc, char* argv[]) {     int x[4]={1,1,1,1},h[6]={6,5,4,3,2,1};     int n;     printf("Input N:");     scanf("%d",&n);      conv(x,h,n);      system("pause");     return 0; }  void conv(int *p,int *q,int n) {     int y=0,m=3;     for(int i=0;i<=m;i++){        if( n-i<0 || n-i>5){             y += p[i] * 0;             continue;        }        y += p[i]*q[n-i];     }     printf("%d\n",y); }

user: user-0
content: 新手初学C语言，希望大神能够写详细一点
user-0 提问: 请问这个怎么办

回复:
user: user-1
content: 引用 2 楼 qq_52046937 的回复:[quote=引用 1 楼 赵4老师的回复:]换国内镜像。 MINGW已经下载安装好了，就是过程中一直有报错，不知道有没有影响[/quote] 一直报错的话，用着用着肯定会有问题的。不如安装的时候就解决

user: user-0
content: 引用 1 楼 赵4老师的回复:换国内镜像。 MINGW已经下载安装好了，就是过程中一直有报错，不知道有没有影响

user: user-2
content: 换国内镜像。

user: user-1
content: 引用 7 楼 qq_52046937 的回复:[quote=引用 6 楼 一颗白面馒头的回复:][quote=引用 5 楼 qq_52046937 的回复:][quote=引用 4 楼 赵4老师的回复:]https://www.jianshu.com/p/96031565dafb 谢谢啦，其实我就是想在vs code上写C，想配置下环境，不知道咋整[/quote] 额。。。我前不久才配置了一个[/quote] 请问有没有教程啊，，简单点的，，大一菜鸟[/quote] https://www.zhihu.com/question/30315894。这个可参考，我就是按照这个配置的，有点麻烦，但是步骤挺详细的

user: user-0
content: 引用 6 楼 一颗白面馒头的回复:[quote=引用 5 楼 qq_52046937 的回复:][quote=引用 4 楼 赵4老师的回复:]https://www.jianshu.com/p/96031565dafb 谢谢啦，其实我就是想在vs code上写C，想配置下环境，不知道咋整[/quote] 额。。。我前不久才配置了一个[/quote] 请问有没有教程啊，，简单点的，，大一菜鸟🐤

user: user-1
content: 引用 5 楼 qq_52046937 的回复:[quote=引用 4 楼 赵4老师的回复:]https://www.jianshu.com/p/96031565dafb 谢谢啦，其实我就是想在vs code上写C，想配置下环境，不知道咋整[/quote] 额。。。我前不久才配置了一个

user: user-0
content: 引用 4 楼 赵4老师的回复:https://www.jianshu.com/p/96031565dafb 谢谢啦，其实我就是想在vs code上写C，想配置下环境，不知道咋整

user: user-2
content: https://www.jianshu.com/p/96031565dafb