Question: 大一c语言作业老出错求大佬指点

引用 3 楼 自信男孩 的回复:#include<stdio.h> #include<stdlib.h> #include<time.h>  //void main(); void add1(); void add2(); void sub1(); void sub2(); void mul1(); void mul2(); void div1(); void div2();  int  main(); {     int g;     printf("来学算术吧，小学生！");     printf("请选择");     printf("1:加法");     printf("2:减法");     printf("3:乘法");     printf("4:除法");     scanf("%d",&g);     //if g=1     if (g==1)         add1();     //if g=2     if (g==2)         sub1();     //if g=3     if (g==3)         mul1();     //if g=4     if (g==4)         div1(); } void add1() {     int f=0;     printf("目前等级为1");     while(f<9)//成功率90%上才可晋级//     {         f=10;         int a,b,c,d,e;         while (e<10)//出10道题//         {             //printf("d%",a=rand()%10);             printf("%d",a=rand()%10);             printf("+");             //printf("d%",b=rand()%10);             printf("%d",b=rand()%10);             printf("=");             while (1) {                 scanf("%d",&c);                 d=a+b;                 if (d==c) {                     printf("恭喜你答对了");                     e++;                     break;                 } else {                     printf("错误，请重新回答");                     f--;                 }             }             /* loop: scanf("%d",&c);       d=a+b;       //if (d=c)       if (d==c) {           printf("恭喜你答对了");           e++;       } else {           printf("错误，请重新回答");           f--;           goto loop;       }       */         }     }     printf ("恭喜通过加法第一关");     add2(); }  void add2() {     int f=0;     printf("目前等级为2");     while(f<9)     {         f=10;         int a,b,c,d,e;         while (e<10)         {             printf("%d",a=rand()%100);             printf("+");             printf("%d",b=rand()%100);             printf("="); loop:scanf("%d",&c);      d=a+b;      //if (d=c)      if (d==c)          printf("恭喜你答对了"),e++;      else          printf("错误，请重新回答"),f--,goto loop;         }     }     printf ("恭喜通过加法第二关,请选择其他学习");     int h;     scanf("%d",&h);     //if h=2     if (h==2)         sub1();     //if h=3     if (h==3)         mul1();     //if h=4     if (h==4)         div1(); } void sub1() {     int f=0;     printf("目前等级为1");     while(f<9)     {         f=10;         int a=rand()%10,b=rand()%10,c,d,e=0;         while (e<10)         {             if (a<b)//防止答案出现负数//             {                 printf("%d",b);                 printf("-");                 printf("%d",a);                 printf("=");                 d=b-a;             }             else             {                 printf("%d",a);                 printf("-");                 printf("%d",b);                 printf("=");                 d=a-b;             } loop:scanf("%d",&c);      //if (d=c)      if (d==c)          printf("恭喜你答对了"),e++;      else          printf("错误，请重新回答"),f--,goto loop;         }     }     printf ("恭喜通过减法第一关");     sub2(); } void sub2() {     int f=0;     printf("目前等级为2");     while(f<9)     {         f=10;         int a,b,c,d,e;         while (e<10)         {             a=rand()%100;             b=rand()%100;             if a<b             {                 printf("%d",b);                 printf("-");                 printf("%d",a);                 printf("=");                 d=a-b;             }             else             {                 printf("%d",a);                 printf("-");                 printf("%d",b);                 printf("=");                 d=a-b;             } loop:scanf("%d",&c);      if d=c          printf("恭喜你答对了"),e++;      else          printf("错误，请重新回答"),f--,goto loop;         }     }     printf ("恭喜通过减法第二关，请选择其他学习");     int h;     scanf("%d",&h);     if h=1         add1();     if h=3         mul1();     if h=4         div1(); } void mul1() {     int f=0;     printf("目前等级为1");     while(f<9)     {         f=10;         int a,b,c,d,e;         while (e<10)         {             printf("d%",a=rand()%10);             printf("*");             printf("d%",b=rand()%10);             printf("="); loop:scanf("%d",&c);      d=a*b;      if d=c          printf("恭喜你答对了"),e++;      else          printf("错误，请重新回答"),f--,goto loop;         }     }     printf ("恭喜通过乘法第一关");     mul2(); } void mul2() {     int f=0;     printf("目前等级为2");     while(f<9)     {         f=10;         int a,b,c,d,e;         while (e<10)         {             printf("d%",a=rand()%100);             printf("*");             printf("d%",b=rand()%100);             printf("="); loop:scanf("%d",&c);      d=a*b;      if d=c          printf("恭喜你答对了"),e++;      else          printf("错误，请重新回答"),f--,goto loop;         }     }     printf ("恭喜通过乘法第二关");     int h;     scanf("%d",&h);     if h=2         sub1();     if h=1         add1();     if h=4         div1(); } void div1() {     int f=0;     printf("目前等级为1");     while(f<9)     {         f=10;         int a,b,c,d,e,g;         while (e<10)         {             do             {                 a=rand()%10;                 b=rand()%10;             }while(a%b!=0||b==0);             printf("%d",a);             printf("/");             printf("%d",b);             printf("=");             d=a/b; loop:scanf("%d",&c);      if d=c          printf("恭喜你答对了"),e++;      else          printf("错误，请重新回答"),f--,goto loop;         }     }     printf ("恭喜通过除法第一关");     div2(); } void div2() {     int f=0;     printf("目前等级为2");     while(f<9)     {         f=10;         int a,b,c,d,e,g;         while (e<10)         {             do             {                 a=rand()%100;                 b=rand()%100;             }while(a%b!=0||b==0);             printf("%d",a);             printf("/");             printf("%d",b);             printf("=");             d=a/b; loop:scanf("%d"&c);      if d=c          printf("恭喜你答对了"),e++;      else          printf("错误，请重新回答");f--;goto loop;         }     }     printf ("恭喜通过除法第二关，请选择其他学习");     int h;     scanf("%d",&h);     if h=1         add1();     if h=3         mul1();     if h=2         sub1(); } 前150行供参考～  楼主先问一下自己是不是学习的C语言，基本的语法都能写成这样，我是改不下去了。  即使是抄别人的代码，也比写这样的C语言代码强吧   if d=c感谢大佬，第一次写这么长程序，没想到犯了这么多低级错误，参考了你改正的程序后我现在已经完成了这个程序，可以完美运行实现所有功能，实在是谢谢了。

引用 1 楼 QMec的回复:你的main函数呢，你确定你用的C语言写的，printf()函数看着不像呀。 printf("错误，请重新回答"),f--,goto loop;

你的main函数呢，你确定你用的C语言写的，printf()函数看着不像呀。


Question: 我是小白

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

可以将每三位看成是八进制的一位，例如你上边所说的 可以看做010     100      010这三位  010是2，100是4，010是2，这样8进制就是242，类比十六进制，将每四位看成16进制的一位。

先想想，如果给你这样一个二进制数据，你怎么算出它对应的八进制和16进制数。这样你就可以知道怎么编写代码了，算法就是你的计算方法。


Question: 请教一下 这个刷屏的程序错误

发源码吧。  无限循环的原因是输入的非数字无法和%d匹配，但是非数字还在输入缓存里，当继续用%d匹配，还是不配。因此一直这样，所以是无限循环了。解决办法是如果scanf_s的返回值不是1，那么把输入缓存清空即可。

引用 1 楼 未来为我而来的回复:横着看着难受 我拍的竖的传上去就横着了

横着看着难受


Question: C语言小白虚心请教

引用 8 楼 user-3的回复:修改一下项目设置就好了啊，去百度吧 好的，老师，谢谢您，给您添麻烦了，大一，下半年学c，现在没事自学一下

修改一下项目设置就好了啊，去百度吧

引用 4 楼 user-3的回复:改成scanf吧，初学者先不要考虑安全不安全了，只是个练习而已。项目设置里面把安全检查也关了 老师您好，谢谢，我最初用的就是scanf，因为教材也是，但在vs2019中，编译都通不过，显示有错误

函数怎么用，去百度就好了

引用 1 楼 user-3的回复:警告信息不是说的很清楚吗？函数参数错了 如果我不用scanf_s函数，改用putchar函数就能正常运行，不太明白

引用 1 楼 user-3的回复:警告信息不是说的很清楚吗？函数参数错了 谢谢，我知道阿，怎么改正？

引用 11 楼 不忘初心20191013 的回复:[quote=引用 10 楼 自信男孩的回复:]scanf_s("%c,%c",&c1, 1, &c2, 1); 如上修改，试一下～ 谢谢您，按您说的方法修改了，程序运行正常！！！我把这种方法用在整型和实型上，不行。是不是只针对字符和字符串啊[/quote] 整型数据不需要，对于字符串，字符类型的需要

引用 10 楼 自信男孩的回复:scanf_s("%c,%c",&c1, 1, &c2, 1); 如上修改，试一下～ 谢谢您，按您说的方法修改了，程序运行正常！！！我把这种方法用在整型和实型上，不行。是不是只针对字符和字符串啊

警告信息不是说的很清楚吗？函数参数错了


Question: 我又来求学了，C语言函数


Question: 求大佬解释一下这个有什么用

get_only_one_world() 看起来是把当前输入键盘缓冲的 数据 全部清空，直到下一行   可能是用户输入。“abc jdjdjd”这样的字符串，而代码只想要第一个abc单词， 后面的清理掉 ，就调用这个函数 这样不管每行输入多少东西， 只保留第一个单词  猜测


Question: C语言新手上路，大佬帮帮忙呗

引用 10 楼 自信男孩的回复:#include<stdio.h> #include <ctype.h>  enum type {     DIGIT,     ALPHA,     OTHER };  char *get_substr(char *str, char *substr, int op);  int main() {     char str[128], substr[128];      scanf("%s", str);      printf("%s\n", get_substr(str, substr, DIGIT));     printf("%s\n", get_substr(str, substr, ALPHA));     printf("%s\n", get_substr(str, substr, OTHER));      return 0; }  char *get_substr(char *str, char *substr, int op) {     char *tmp = substr;     switch (op) {         case DIGIT:             while (*str) {                 if (isdigit(*str))                     *tmp++ = *str++;                 else                     str++;             }             break;          case ALPHA:             while (*str) {                 if (isalpha(*str))                     *tmp++ = *str++;                 else                     str++;             }             break;          case OTHER:             while (*str) {                 if (isalpha(*str) || isdigit(*str))                     str++;                 else                     *tmp++ = *str++;             }             break;     }     *tmp = 0;      return substr; } 供参考～ 这不是vc2010吧 我加了头文件windows.h后 输了字符串  后点回车键就反回原页面了

引用 13 楼 @矛盾综合体的回复:[quote=引用 8 楼 qq_46084141 的回复:] [quote=引用 3 楼 @矛盾综合体的回复:]代码仅供参考，如有疑问请私信  #include<stdio.h> int main() { 	char s[256],a[100],b[100],c[100]; 	int i,j,k,l,n; 	scanf("%s",s); 	i=j=k=l=0; 	while(s[i]!='\0') 	{ 		if((s[i]>='a'&&s[i]<='z')||(s[i]>='A'&&s[i]<='Z')) 		{ 			a[j++]=s[i]; 		} 		else if(s[i]>='0'&&s[i]<='9') 		{ 			b[k++]=s[i]; 		} 		else 		{ 			c[l++]=s[i]; 		} 		i++; 	} 	a[j]=b[k]=c[l]='\0'; 	printf("%s\n%s\n%s\n",a,b,c); 	return 0; }   我的运行不了呢 数入字符串后 点回车键    就反回原页面了[/quote] 可能是你的输入或者其他地方有问题 结果： 运行环境：gcc 编辑环境：sources insight [/quote] 是VC2010吗 我用的是VC2010呢 好像你的不是诶

引用 12 楼 @矛盾综合体的回复:[quote=引用 11 楼 自信男孩 的回复:] [quote=引用 7 楼 @矛盾综合体 的回复:] [quote=引用 6 楼 自信男孩 的回复:] [quote=引用 4 楼 @矛盾综合体 的回复:] 希望可以自己编写，如果解决了你的问题，请采纳，如果还有疑问请私信，谢谢 你的解答似乎不符合楼主的要求，要求是自定义函数，你的自定义函数在哪？[/quote] 请看清楚我的回复，谢谢！ [/quote] 参考的是不符合要求的吗？[/quote] 为什么帖子强调要自定义函数，用指针，说明他们应该刚刚学，所以刚开始我只是告诉思路，不会，我再说的实现代码，只需要提取就可以了 如果直接将实现代码告诉他，论坛就不是论坛，应该叫作业帮了。（而且论坛越来越多直接发题目，发课程设计之类的，越来越多cv工程师，个人牢骚） 也许每个人有每个人的角度，如果有说的不合理的地方请谅解，谢谢！[/quote] 好的，今后一定好好学习

引用 14 楼 自信男孩 的回复:[quote=引用 12 楼 @矛盾综合体 的回复:] [quote=引用 11 楼 自信男孩 的回复:] [quote=引用 7 楼 @矛盾综合体 的回复:] [quote=引用 6 楼 自信男孩 的回复:] [quote=引用 4 楼 @矛盾综合体 的回复:] 希望可以自己编写，如果解决了你的问题，请采纳，如果还有疑问请私信，谢谢 你的解答似乎不符合楼主的要求，要求是自定义函数，你的自定义函数在哪？[/quote] 请看清楚我的回复，谢谢！ [/quote] 参考的是不符合要求的吗？[/quote]  为什么帖子强调要自定义函数，用指针，说明他们应该刚刚学，所以刚开始我只是告诉思路，不会，我再说的实现代码，只需要提取就可以了 如果直接将实现代码告诉他，论坛就不是论坛，应该叫作业帮了。（而且论坛越来越多直接发题目，发课程设计之类的，越来越多cv工程师，个人牢骚） 也许每个人有每个人的角度，如果有说的不合理的地方请谅解，谢谢！[/quote]  学习有多种方式，抄作业也能超出水平来，也是可以的。  我刚开始学编程时，也没少抄写程序。因为不会写，无从下手，就抄课本上的例子，边抄边想，抄完编译运行，运行没问题再改，在编译运行。反复的学习别人的思路和写法，最后成为自己的思路的，自己的写法～[/quote] Mabey ，无所谓了，到此终止，我要跑路了。

引用 12 楼 @矛盾综合体 的回复:[quote=引用 11 楼 自信男孩 的回复:] [quote=引用 7 楼 @矛盾综合体 的回复:] [quote=引用 6 楼 自信男孩 的回复:] [quote=引用 4 楼 @矛盾综合体 的回复:] 希望可以自己编写，如果解决了你的问题，请采纳，如果还有疑问请私信，谢谢 你的解答似乎不符合楼主的要求，要求是自定义函数，你的自定义函数在哪？[/quote] 请看清楚我的回复，谢谢！ [/quote] 参考的是不符合要求的吗？[/quote]  为什么帖子强调要自定义函数，用指针，说明他们应该刚刚学，所以刚开始我只是告诉思路，不会，我再说的实现代码，只需要提取就可以了 如果直接将实现代码告诉他，论坛就不是论坛，应该叫作业帮了。（而且论坛越来越多直接发题目，发课程设计之类的，越来越多cv工程师，个人牢骚） 也许每个人有每个人的角度，如果有说的不合理的地方请谅解，谢谢！[/quote]  学习有多种方式，抄作业也能超出水平来，也是可以的。  我刚开始学编程时，也没少抄写程序。因为不会写，无从下手，就抄课本上的例子，边抄边想，抄完编译运行，运行没问题再改，在编译运行。反复的学习别人的思路和写法，最后成为自己的思路的，自己的写法～

引用 8 楼 qq_46084141 的回复:[quote=引用 3 楼 @矛盾综合体的回复:]代码仅供参考，如有疑问请私信  #include<stdio.h> int main() { 	char s[256],a[100],b[100],c[100]; 	int i,j,k,l,n; 	scanf("%s",s); 	i=j=k=l=0; 	while(s[i]!='\0') 	{ 		if((s[i]>='a'&&s[i]<='z')||(s[i]>='A'&&s[i]<='Z')) 		{ 			a[j++]=s[i]; 		} 		else if(s[i]>='0'&&s[i]<='9') 		{ 			b[k++]=s[i]; 		} 		else 		{ 			c[l++]=s[i]; 		} 		i++; 	} 	a[j]=b[k]=c[l]='\0'; 	printf("%s\n%s\n%s\n",a,b,c); 	return 0; }   我的运行不了呢 数入字符串后 点回车键    就反回原页面了[/quote] 可能是你的输入或者其他地方有问题 结果： 运行环境：gcc 编辑环境：sources insight

引用 11 楼 自信男孩 的回复:[quote=引用 7 楼 @矛盾综合体 的回复:] [quote=引用 6 楼 自信男孩 的回复:] [quote=引用 4 楼 @矛盾综合体 的回复:] 希望可以自己编写，如果解决了你的问题，请采纳，如果还有疑问请私信，谢谢 你的解答似乎不符合楼主的要求，要求是自定义函数，你的自定义函数在哪？[/quote] 请看清楚我的回复，谢谢！ [/quote] 参考的是不符合要求的吗？[/quote] 为什么帖子强调要自定义函数，用指针，说明他们应该刚刚学，所以刚开始我只是告诉思路，不会，我再说的实现代码，只需要提取就可以了 如果直接将实现代码告诉他，论坛就不是论坛，应该叫作业帮了。（而且论坛越来越多直接发题目，发课程设计之类的，越来越多cv工程师，个人牢骚） 也许每个人有每个人的角度，如果有说的不合理的地方请谅解，谢谢！

引用 7 楼 @矛盾综合体 的回复:[quote=引用 6 楼 自信男孩 的回复:] [quote=引用 4 楼 @矛盾综合体 的回复:] 希望可以自己编写，如果解决了你的问题，请采纳，如果还有疑问请私信，谢谢 你的解答似乎不符合楼主的要求，要求是自定义函数，你的自定义函数在哪？[/quote] 请看清楚我的回复，谢谢！ [/quote] 参考的是不符合要求的吗？

引用 6 楼 自信男孩的回复:[quote=引用 4 楼 @矛盾综合体 的回复:] 希望可以自己编写，如果解决了你的问题，请采纳，如果还有疑问请私信，谢谢 你的解答似乎不符合楼主的要求，要求是自定义函数，你的自定义函数在哪？[/quote] 请问，您能帮我写一下吗，主函数和自定义

引用 3 楼 @矛盾综合体的回复:代码仅供参考，如有疑问请私信  #include<stdio.h> int main() { 	char s[256],a[100],b[100],c[100]; 	int i,j,k,l,n; 	scanf("%s",s); 	i=j=k=l=0; 	while(s[i]!='\0') 	{ 		if((s[i]>='a'&&s[i]<='z')||(s[i]>='A'&&s[i]<='Z')) 		{ 			a[j++]=s[i]; 		} 		else if(s[i]>='0'&&s[i]<='9') 		{ 			b[k++]=s[i]; 		} 		else 		{ 			c[l++]=s[i]; 		} 		i++; 	} 	a[j]=b[k]=c[l]='\0'; 	printf("%s\n%s\n%s\n",a,b,c); 	return 0; }   我的运行不了呢 数入字符串后 点回车键    就反回原页面了

引用 6 楼 自信男孩 的回复:[quote=引用 4 楼 @矛盾综合体 的回复:] 希望可以自己编写，如果解决了你的问题，请采纳，如果还有疑问请私信，谢谢 你的解答似乎不符合楼主的要求，要求是自定义函数，你的自定义函数在哪？[/quote] 请看清楚我的回复，谢谢！

引用 4 楼 @矛盾综合体 的回复:希望可以自己编写，如果解决了你的问题，请采纳，如果还有疑问请私信，谢谢 你的解答似乎不符合楼主的要求，要求是自定义函数，你的自定义函数在哪？

引用 4 楼 @矛盾综合体的回复:希望可以自己编写，如果解决了你的问题，请采纳，如果还有疑问请私信，谢谢 好，我一会回去调试试一下

希望可以自己编写，如果解决了你的问题，请采纳，如果还有疑问请私信，谢谢

引用 1 楼 @矛盾综合体的回复:思路：判断输入的字符的ascii，如果是a-z或者A-Z弄到一个数组，0-9弄到另一个数组，其他弄到第三个数组，然后打印 我现在学C语言，学到数组就卡了壳，，写不了了    明天要交程序，大佬能否帮忙写一下呢


Question: 救急，（分没有了）c语言如何将信息写入文件？跪求了

引用 4 楼 等风、来 的回复：c)读文件 函数 ：fread d)写文件 函数 ：fwrite 1、fopen函数:建立1个FILE*指针，连接到文件上 函数原型：FILE * fopen(const char * path,const char * mode); 参数： filename：指定绝对路径或者相对路径的文件名。 mode：分别指定 "r":当文件存在返回有效文件指针，当文件不存在返回空指针。包括路径必须是正确的。 "w":如果文件不存在,创建文件。如果文件存在，清空该文件重新写内容。(fwrite) "a":如果文件不存在,创建文件。如果文件存在，不清空原有内容，在原有内容后面追加内容。(fwrite) 当文件不可以写入时，包括文件只读，或者被另一个进程占用。 "w"和"a"都会返回空指针。 返回值：FILE* 文件指针类型，可以认为是驾驶员的手柄，把文件操作比作对汽车驾驶啥时候像你这么优秀

引用 7 楼 Donald_Shallwing 的回复：fprintf() 将信息格式化写入文件是最好的不会不会啊啊啊啊啊啊

fprintf() 将信息格式化写入文件是最好的

引用 2 楼 weixin_45268523 的回复:引用 1 楼 @矛盾综合体 的回复：建议看一下文件i/o相关资料哇，哪里懂啊，课程设计要结束了 想论坛找人直接帮你写代码不现实的，简短点还有可能，而且论坛不是帮人写代码的，是帮忙看看改改的，建议找找有没有类似的原码吧

建议看一下文件i/o相关资料


Question: #此源码多个编译器都奈何不了#

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

引用 1 楼 自信男孩的回复:#include <stdio.h> #include <stdlib.h>  int main() {     double aver(double a[],int n);     double zu1[5],zu2[10];     int i;     printf("这是一个求小组平均分的system：\n第一组5人第二组10人\n");     printf("请输入第一组5名同学的成绩：\n");     for(i=0;i<5;i++)     {         //scanf("%-2.1lf",&zu1[i]);         scanf("%lf",&zu1[i]);     }     printf("请输入第二组10名同学的成绩：\n");     for(i=0;i<10;i++)     {         //scanf("%-2.1lf",&zu2[i]);         scanf("%lf",&zu2[i]);     }     //printf("第一组的平均分为：%-2.1l\n",aver(zu1,5));     printf("第一组的平均分为：%-2.1lf\n", aver(zu1,5));     //printf("第一组的平均分为：%-2.1l\n",aver(zu2,10));     printf("第一组的平均分为：%-2.1lf\n", aver(zu2,10));      return 0; }  double aver(double a[],int n) {     double sum=a[0],PJS;     int c;     for(c=1;c<n;c++)         sum=sum+a[c];     PJS=sum/n;     return(PJS); } 供参考～  跟编译器没关系吧，还是程序写的有问题 非常感谢啊！我回去再试试


Question: C语言小白，请大神指点！

int sum=0; for(int i=1; i<6; i=i+2) {       if(i%2)      {           sum += st[i];      } }

int sum=0; for(int i=0; i<6; i++) {       if(i%2)      {           sum += st[i];      } }


Question: C#小游戏新手推荐

弹球、射击、消消乐、贪吃蛇、迷宫，C#做图形界面相对容易吧，这些应该都没啥难度 想不出来了，多年不玩游戏了


Question: 写的计算二进制文件的checksum程序有问题，求助

搞定了  int main(int argc,char *argv[]) { unsigned int cksum=0; FILE *fp; char ch;   if (!(fp=fopen("f:\\test1.rom","rb"))) { printf("Error in open file!\n"); return 1; }      ch = fgetc(fp);     while(!feof(fp))     {         cksum += ch&0xff;         ch = fgetc(fp); //	printf("%x ", cksum);     }     printf("checkSum: %x\n", cksum); fclose(fp);  return 0; }

这个二进制文件碰到中间有0xFF怎么处理？ 而且文件长度不定 读到0xFF就认为是文件EOF了

取出每行，然后再取出:和;之间的字符串，遍历，每两个字符合为一个字符串，将此字符串转换为十六进制，以此类推，将每个十六进制相加，


Question: 求各位大佬帮我修改一下，谢谢


Question: 在DEV-C++中使用链表，出现了“Program received signal SIGSEGV,Segmentation fault.”的问题

#include <stdio.h> #include <stdlib.h>//开辟动态内存的头文件 #include <string.h> //定义一个学生信息的结构体  typedef struct Student //typedef：便于使用别名 {     char Name[10]; //姓名     int  Age; //年龄     int  StuNum; //学号     int  Score; //总成绩 }Student;//一个结点  typedef struct Node {     Student stu; //学生信息（信息域）     struct Node* pNext; //指向下一个结点的指针（指针域） }Node;  Node *g_pHead = NULL; //定义头节点为空 //创建链表 struct Node* createList() {     //struct Node* head = (struct Node*)malloc(sizeof(struct Node));//动态内存分配     struct Node* head = (struct Node*)malloc(sizeof(struct Node));//动态内存分配     head->pNext = NULL;     return head; }  //删除节点 Node* dele() {     int num;     struct Node* head;     struct Node* posNode = head->pNext;      struct Node* posNodeFront = head;     if(posNode == NULL)     {         printf("数据为空，无法删除\n");         //return;         return NULL;     }     //while(strcmp(posNode->stu.StuNum,num))     while(posNode->stu.StuNum != num)     {         posNodeFront = posNode;         posNode = posNodeFront->pNext;         if(posNode == NULL)         {             printf("没有找到相关信息，正常退出！\n");             return NULL;         }     }     posNodeFront->pNext =posNode->pNext;     free(posNode); }  楼主的源码不能用吧，至少要把编译错误去掉。这样的程序不能用，建议自己先实现功能了，发一个完整的代码出来～

引用 2 楼 寻开心的回复:看你最后的那张图， 定义了listHeadNode， 但是没有赋予初值就开始使用，错误就是这么产生的 哦哦，好的，谢谢。我改改试试。

段错误，操作空指针、野指针或者不可操作的内存


Question: 数组中查找数字并返回比其大的数的个数

引用 5 楼 自信男孩的回复:#include<stdio.h> #include <stdlib.h>   int main() {     int n, x, sum, flag = 0;     int *a;     int i;      scanf("%d", &n);      a = (int *)malloc(sizeof(int) * n);     if (!a)         exit(0);      for (i = 0; i < n; i++)         scanf("%d", a+i);     scanf("%d", &x);      sum = 0;     for (i = 0; i < n; i++) {         if (x == a[i])             flag = 1;         if (x < a[i])             sum++;     }     if (flag > 0)         printf("Find %d\n",sum);     else         printf("No find");  #if 0     sum = pro = 0;     a[0]=scanf("%d", &n);     for(i=1;i<=n+1;i++)     {         if(i<=n)             scanf("%d ",&a[i]);         else             scanf("%d", &a[n+1]);     }     for(i=1;i<=n;i++)     {         if(a[i]>a[n+1])             sum++;         if(a[i]!=a[n+1])             pro++;     }     if(pro<n)         printf("Find %d",sum);     else         printf("No find"); #endif     free(a);     return 0; } 供参考～  楼主的逻辑不够清晰，建议查一下scanf返回值，pro与n比较有何意义～ pro和n比较是为了找这个数组中是否有跟最后输入的一个数相同的数，不对吗？？

引用 3 楼 suifengsanjin 的回复:1 这里有问题 a[0]=scanf("%d",&n); 你注意看下scanf的说明 2 scanf 里面的格式你带有空格，导致输入数字后必须带上一个空格才能满足格式 我把你的代码改了，你看看 #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { 	int length,index,search,total = 0; 	int *array = NULL; 	printf("Set array length:"); 	scanf("%d",&length); 	// 	printf("Array length is:%d\n",length); 	array = (int*)malloc(sizeof(int) * length); 	memset(array,0x00,sizeof(int) * length); 	for(index = 0; index<length; index++) { 		printf("Set %d Element:",index); 		scanf("%d",&array[index]); 	} 	printf("Set Search element:"); 	scanf("%d",&search);  	for(index = 0; index<length; index++) { 		total += (array[index] > search?1:0); 	} 	if(total) 		printf("Find %d",total); 	else 		printf("No find"); 	return 0; }最后没有释放malloc出来的内存，虽然程序退出会自动释放，还是要注意下

引用 1 楼 早打大打打核战争的回复:Find，No find 应该是found、not found  哈哈哈哈哈哈哈哈，给我老实交代，这个程序哪里有问题！不说没晚饭吃了哦

Find，No find 应该是found、not found


Question: 代码运行后有一个错误！急！

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

好的，我试试，谢谢！

引用 4 楼 不会跳舞的跳舞先生 的回复:[quote=引用 2 楼 不会跳舞的跳舞先生的回复:][quote=引用 1 楼 冷风1023的回复:]size_t 后面不应该有个变量名吗？ ？？要加一个变量名吗？[/quote] 在第一个循环里面跳不出来[/quote] 这个就要具体情况具体分析了，用以使用GDB或者加打印日志慢慢查看了。循环跳不出来应该是条件变量值有问题。

引用 2 楼 不会跳舞的跳舞先生的回复:[quote=引用 1 楼 冷风1023的回复:]size_t 后面不应该有个变量名吗？ ？？要加一个变量名吗？[/quote] 在第一个循环里面跳不出来

引用 2 楼 不会跳舞的跳舞先生的回复:[quote=引用 1 楼 冷风1023的回复:]size_t 后面不应该有个变量名吗？ ？？要加一个变量名吗？[/quote] 加了变量后可以运行，但是进行不下去了😂

引用 1 楼 冷风1023的回复:size_t 后面不应该有个变量名吗？ ？？要加一个变量名吗？

size_t 后面不应该有个变量名吗？


Question: 第一学期期末作业，ATM系统研究好几天了不会做谢谢各位大神了

分层设计，不会网上搜一下，马上就搞定，这作业不复杂，也不太会有后续扩展了，不完整分层也可 信息存储如果不会数据库的话可以选择存文件 具体的就不说了


Question: 求一定范围内素数之和

引用 10 楼 自信男孩的回复:#include<stdio.h> int main() {     int n,i,j,sum,sum1;     while(scanf("%d", &n)!=EOF)     {         sum1 = 0;         for(i=10;i<=n;i++)         {             sum = 0;    //init 0             for(j=2;j<i;j++)             {                 if(i%j==0)                     sum++;             }             if(sum==0)                 //sum1=sum1+i;                 sum1 = sum1 + 1;          }         printf("%d\n",sum1);     }     return 0; }  供参考～ 谢谢谢谢，主要的就是记得sum清零

好的，我回去调试一下试试，谢谢

如果解决了你的问题，请采纳，如果还有疑问，请私信，谢谢！

引用 6 楼 qq_45818304 的回复:[quote=引用 2 楼 @矛盾综合体的回复:]而且sum1没有初始化 不是默认为零吗？？[/quote] no，全局变量是，临时变量不是

引用 2 楼 @矛盾综合体的回复:而且sum1没有初始化 不是默认为零吗？？

引用 1 楼 @矛盾综合体的回复:sum没有清零（每次循环后） 难道应该放在我写的位置的上一层循环中去？？

引用 1 楼 @矛盾综合体的回复:sum没有清零（每次循环后） 我在printf后面不是加了清零吗

还有sum也没有初始化

而且sum1没有初始化

sum没有清零（每次循环后）


Question: 求求了，各位大神


Question: c#窗口程序如何跨程序控制Visible属性？

就是知道一个窗口句柄然后用API来设置这个窗口可视为假   这个问题我已经解决了 [DllImport("user32.dll", EntryPoint = "ShowWindowAsync")]         public static extern bool ShowWindowAsync(int hWnd, bool nCmdShow);

具体想怎么实现？能再说具体一些吗


Question: 在子函数中调用主函数中输入的二维数组

scanf("%f",&a[i][j]);把f改成d


Question: 求大神讲解

参考答案： #include <stdio.h> #include <stdlib.h> #define N 3 typedef struct employee{     char *no;//职工编号     int salary; //工资     struct employee * next; }Employee;  /**  * 链表展示  */ void list(Employee * head){     Employee * temp = head;     while(temp) {         printf("no:%s, salary:%d, next:%p\n", temp->no, temp->salary, temp->next);         temp = temp->next;     } } /**  * 创建链表  */ Employee * create(){     Employee * head = NULL;     Employee * pre = NULL;     int n = N;     while (n)     {         Employee * temp = (Employee *)calloc(1, sizeof(Employee));         if(head == NULL){             head = temp;             pre = head;         }else{             pre->next = temp;             pre = temp;         }         n--;     }     return head; } /**  * 插入  * @param head 链表头节点指针  * @param index 插入的位置 0开始  * @param no 职工号  * @param salary 工资  */ void insert(Employee * head, int index,  char* no, int salary){     Employee * target = head;     while (index){         target = target->next;         index--;     }     target->no = no;     target->salary = salary;    } /**  *保存到文件中  *@param  head 链表头节点  */ void output_to_file(Employee * head){     FILE * file = fopen("D:/paper", "w");     if(!file){         printf("fopen error");         return;     }     Employee * temp = head;     fprintf(file, "no\tsalary\n");     while(temp) {         fprintf(file, "%s\t%d\n", temp->no, temp->salary);         temp = temp->next;     }     fclose(file); } /**  * 释放链表内存  * @param head 链表头节点  */ void free_list(Employee *head){     Employee * target = head;     Employee * next;     while (target){         next = target->next;         //printf("free:%d\n", target->salary);         free(target->no);         free(target);         target = next;     }      } int main(){     Employee * head = create();     char * no;     int salary;     for(int i = 0; i < N; i++){        no = (char *)calloc(16, sizeof(char)); // 分配内存保存工号 16个字节        printf("\n输入职工号(少于15位):");        scanf("%s", no);        printf("\n输入工资:");        scanf("%d", &salary);        insert(head, i, no, salary);      }     list(head);     output_to_file(head);     free_list(head);     return 0; }


Question: 期末课设

到期末了，救救孩子吧

不要被刷下去啊，不要啊


Question: 数据结构程序设计的一个c语言代码

大佬不敢担，695072620@qq.com 我也学习一下你的代码

引用 1 楼 棉猴的回复:VC++6.0，虽然是我的最爱，但是没有代码只有图片也没办法帮你 大佬，能给我你的邮箱吗？等会我把代码发给你

VC++6.0，虽然是我的最爱，但是没有代码只有图片也没办法帮你


Question: 啊啊啊啊啊啊啊啊啊啊啊啊啊求求大佬们看看！！！！

指针！我问的是，它等于多少，不是问你是什么类型，类型我能不知道吗？

引用 11 楼 user-1的回复:到底fopen返回什么都不知道，发的图啥意思？ 返回的是布尔型 不是吗

到底fopen返回什么都不知道，发的图啥意思？

一些编码有影响。。。

引用 8 楼 user-1的回复:那个能看吗？打开文件失败基本都是路径问题，好好看一下 吼滴 对了文档里有中文字符影不影响啊

那个能看吗？打开文件失败基本都是路径问题，好好看一下

引用 1 楼 user-1的回复:知道在哪个路径吗？不知道的话写上全路径 这个源码...调试就是那一步fopen 函数的问题

引用 4 楼 user-1的回复:你怎么知道没错，有的话要验证之后再来回答 #define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<iostream>using namespace std;#include<stdlib.h>#include <string.h>#define MaxSize 8char Ftop[50]; //成绩文件顶部的标题用top保存typedef struct student //单个学生成绩的记录{	char name[MaxSize]; //姓名	int number; //学号	int chinese; //语文	int math; //数学	int english; //英语	struct student* next;//指向下一个结点}student, *StuGradelist;char* address1 = (char *)"1.txt";char* address2 = (char *)"2.txt";char* address3 = (char *)"3.txt";char* address4 = (char *)"4.txt";typedef struct //链表不容易操作，故而新建一个结构数组{	int TotalGrade;	char name[10];	int number;	int chinese;	int math;	int english;}gradeNote; //成绩记录typedef struct{	gradeNote stu[100]; //顺序存储100个记录；}gradeList; //待排序成绩表gradeList L;StuGradelist fRead(char *address) //读取成绩文件{	FILE* f1;	if ((f1=fopen("1.txt","r")) == NULL) //打开文件并且只读	{		printf("文件为空，打不开");		exit(0);	}	StuGradelist file = (student*)malloc(sizeof(student)); //声明指向结构体类型的指针并且申请内存空间	file->next = NULL;//初始化	student* p = file; //使得p指向file；	int i = 0; //循环标记，具体作用是在第一次循环时方便处理标题	while (feof(f1))//判断读取文件是否结束	{		if (i == 0)		{			fgets(Ftop, 50, f1); //处理标题，并且文件指针移到第二行			i = 1;		}		if (i == 1) //申请空间，初始化链表		{			p->next = (student*)malloc(sizeof(student));			p = p->next;			p->next = NULL;		}		fscanf(f1, "%s%d%d%d%d", p->name, &p->number, &p->chinese, &p->math, &p->english); //格式化输入数据，保存到f1指向的内存空间。	}	if (fclose(f1)) //关闭文件	{		printf("文件关闭失败");		exit(0);	}	return file;}void fPrint(StuGradelist file) //将成绩文件打印到屏幕上{	student* p = file;	printf("%s\n",Ftop); //打印标题	while (p->next!=NULL)//循环打印	{		printf("%6s %2d %d %d %d\n", p->name, p->number, p->chinese, p->math, p->english); 		p = p->next;//指针下移	}}void add() //合并文件{	StuGradelist file1 = fRead(address1);	StuGradelist file2 = fRead(address2);	FILE* file;	if ((file = fopen(address3,"w+")) == NULL) //先新建一个3.txt文本，然后将1.txt和2.txt的内容输入到里面	{		printf("合并成绩文档失败，原因：建立文档出错");		exit(0);	}	student* p1 = file1, *p2 = file2;	fprintf(file,"%s", Ftop); //先输出标题	while (p1->next!=NULL)	{		fprintf(file,"%6s %2d %d %d %d\n", p1->name, p1->number, p1->chinese, p1->math, p1->english); //输出1.txt 		p1 = p1->next;	}	while (p2->next != NULL)	{		fprintf(file, "%6s %2d %d %d %d\n", p2->name, p2->number, p2->chinese, p2->math, p2->english); //输出2.txt		p2 = p2->next;	}	if (fclose(file))	{		printf("文件关闭失败");		exit(0);	}}void Bk() //抽取补考的成绩记录{	FILE* f1;	if ((f1 = fopen("4.txt", "w+")) == NULL) //新建文件4.txt	{		printf("抽取补考学生成绩记录建立新文件失败");		exit(0);	}	StuGradelist file3 = fRead(address3);	student* p = file3;	fprintf(f1,"%s",Ftop); //先输出标题	while (p->next!=NULL)	{		if (p->chinese< 60 || p->math< 60 || p->english<60) //补考条件		{			fprintf(f1, "%6s %2d %d %d %d\n", p->name, p->number, p->chinese, p->math, p->english);		}		p=p->next;	}	if (fclose(f1))	{		printf("文件关闭失败");		exit(0);	}}void sort(){	StuGradelist file3 = fRead(address3); //先将3.txt读入链表	student* p = file3;//指向链表	if (remove("3.txt")) //排序后的内容要保存到3.txt，先删除3.txt	{		printf("删除文件出错");		exit(0);	}	int num = 0; //学生个数	FILE* file;	if ((file = fopen(address3,"w+")) == NULL) //新建一个空的3.txt	{		printf("新建文件出错");		exit(0);	}	fprintf(file, "%s", Ftop); //标题先输入	p = file3;	for (int i = 1; i <= num; i++, p = p->next) //将链表的内容复制到结构数组stu中里	{		strcpy(L.stu[i].name, p->name);		L.stu[i].number = p->number;		L.stu[i].chinese = p->chinese;		L.stu[i].math = p->math;		L.stu[i].english = p->english;		L.stu[i].TotalGrade = p->chinese + p->math + p->english;	}	printf("请选择排序方式：\n冒泡排序请按1选择排序请按2\n");	int choice;	cin >> choice;	if (choice == 1)	{		for (int i = 0; i < num - 1; ++i)  //比较n-1轮		{			gradeNote temp;			for (int j = 0; j < num - 1 - i; ++j)  //每轮比较n-1-i次,			{				if (L.stu[j].TotalGrade < L.stu[j + 1].TotalGrade)				{					temp = L.stu[j];					L.stu[j] = L.stu[j + 1];					L.stu[j + 1] = temp;//交换位置；				}			}		}	}	else	{		gradeNote temp1;		for (i = 1; i <= num - 1; i++) {			for (int j = i + 1; j <= num; j++)				if (L.stu[i].TotalGrade < L.stu[j].TotalGrade)    //如果前一个数比后一个数小，则利用中间变量t实现两值互换				{					temp1 = L.stu[i];					L.stu[i] = L.stu[j];					L.stu[j] = temp1;				}		}	}	for (int n = num; n>= 1; num--) //将排序好的内容输入到3.txt	{		fprintf(file, "%6s %2d %d %d %d\n", L.stu[n].name, L.stu[n].number, L.stu[n].chinese, L.stu[n].math, L.stu[n].english);	}	if (fclose(file))	{		printf("文件关闭失败");		exit(0);	}}void search(char* name) //按姓名查找{	StuGradelist file = fRead(address3);	student* p = file;	while (p->next != NULL)	{		if (!strcmp(name, p->name))//比较字符串		{			printf("%6s %2d %d %d %d\n", p->name, p->number, p->chinese, p->math, p->english);			return;		}		p = p->next;	}	printf("查无此人,请确定名字输入正确\n");	exit(0);} void main(){	int choice;	int flag = 1;	printf("学生成绩管理系统                      \n");	printf("1.显示文件1                           \n");	printf("2.显示文件2                           \n");	printf("3.合并文件1和2                        \n");	printf("4.查找                                \n");	printf("5.退出本系统                                \n");	while (flag)	{		printf("请输入想要选择的操作：            \n");		cin >> choice;		switch (choice)		{		case 1:		{				StuGradelist file1 = fRead(address1);			fPrint(file1);			break;		}			case 2:		{			StuGradelist file2 = fRead(address2);			fPrint(file2);			break;		}		case 3:		{			add();			StuGradelist file3 = fRead(address3);			sort();			fPrint(file3);			break;		}		case 4:		{			StuGradelist file4 = fRead(address4);			fPrint(file4);			break;		}		case 5:			flag = 0;			break;		default:			printf("输入错误，请重新输入：    \n");		}	}}

！不是 我刚刚试了 还是不行

你怎么知道没错，有的话要验证之后再来回答

引用 1 楼 user-1的回复:知道在哪个路径吗？不知道的话写上全路径 fopen 函数的行参没错啊

引用 1 楼 user-1的回复:知道在哪个路径吗？不知道的话写上全路径 知道！！就是写该目录下的路径吧

知道在哪个路径吗？不知道的话写上全路径


Question: c语言中能不能手动输入数组长度、如果可以请指点一下、嘻嘻

可以用动态堆栈，malloc或者calloc

int n; scanf("%d", &n);  int * p. = (int *) malloc( sizeof(int) * n ); 这是正规的。int p[n] n是人工输入的方法 。所有编译器都支持  有的编译器上，你可以这样来定义 ， 比如dev c++ int n; scanf("%d", &n); int p[n]; 但是并不是所有的编译器都支持这个， 比如 vs 不支持


Question: 求助大神C语言 指针与字符数组的问题

一个“”双引号括起来的字符串，是首先储存在计算机的代码段，这个地方不能写，只能读，甚至有的计算机都不能读。 你如果把这个字符串赋值给一个字符数组，那就是从代码段copy出来到堆栈里面的一个备份，栈里面可以读可以写，随便你怎么搞。 但是你如果把这个字符串赋值给一个指针，用“”双引号括起来的字符串本事就代表这个字符串的首字节地址，你把这个首字节地址赋给了指针，这个指针指向的是代码段的最原始的字符串，不可写，你只要写就会出错

很简单，第二种b指向的字符串在代码段，不可写，只能读

顶顶顶顶顶顶


Question: c语言同时定义多个变量

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

引用 1 楼 user-3 的回复：[]先跟变量名结合，是个数组 *也是先跟变量名结合，是个指针谢谢

[]先跟变量名结合，是个数组 *也是先跟变量名结合，是个指针


Question: 急求解一道c语言结构体类题目，如图

兄弟，你这个白嫖啊，对你没好处，应该多思考多专研，多敲代码，在敲代码时遇到问题了在问，这对你有好处


Question: txt文件读入邻接表

没人吗，快来人啊，挺着急的


Question: C语言怎么读取access数据库中的数据进行求和后显示出来

需要数据库驱动。


Question: 如何理解C语言函数指针转递的问题？这三个调用函数的区别

理解一下值传递和地址传递，你这个swap方法是值传递，方法调用额外开辟内存空间，方法结束后就释放了。

引用 2 楼 weixin_45798902 的回复:[quote=引用 1 楼 @矛盾综合体的回复:]简短点，调用函数的过程中会产生临时变量（但是c++中对此进行优化，产生了引用），所以子函数中的参数和主函数的参数并不是一个参数。但是可以通过地址找到相应的变量，从而改变其值。第一种没什么用，实参改变的仅仅只是临时变量，与main中的无关，第二个，可以，通过传递形参，改变地址中的内容实现，第三种尽管传递地址，但是只是交换临时变量的指针指向，并没有改变内容，所有也没什么变化。 如有疑问请私信。 哦哦，非常感谢！ 如果还不懂得会不会私聊你的，嘻嘻[/quote] 可以

引用 1 楼 @矛盾综合体的回复:简短点，调用函数的过程中会产生临时变量（但是c++中对此进行优化，产生了引用），所以子函数中的参数和主函数的参数并不是一个参数。但是可以通过地址找到相应的变量，从而改变其值。第一种没什么用，实参改变的仅仅只是临时变量，与main中的无关，第二个，可以，通过传递形参，改变地址中的内容实现，第三种尽管传递地址，但是只是交换临时变量的指针指向，并没有改变内容，所有也没什么变化。 如有疑问请私信。 哦哦，非常感谢！ 如果还不懂得会不会私聊你的，嘻嘻😁😁


Question: 求大佬帮忙看看这题

选择D，	[Error] invalid conversion from 'int*' to 'int' [-fpermissive]，改为int *P=a[1]+1; 就OK；

应该是4 首先a数组应该是a[3][3]，*p=a[1]+1等价于：p=&a[1][0]+1,也就是p=&a[1][1] *a等价*（&a[0]）,也就是a[0],即&a[0][0] p-*a,也就是&a[1][1]-&a[0][0]，步长为4，相差应该是16的地址，16/4，也就是4，实际上也可以直接算相差元素个数4=3+1


Question: 对于选择排序的疑惑

引用 18 楼 余良龙-3 的回复：这样不是更简单？  #include <iostream>  using namespace std;  void Selectsort(int a[],int n) { 	int i,j,temp; 	for( i=0;i<n;i++) 	{ 	  for(j=i+1;j<n;j++) 	  { 	  	if(a[i]>a[j]) 	  	{ 	  		temp = a[i]; 	  		a[i] = a[j]; 	  		a[j] = temp;  	     } 	  }	 	} }   int main()  {  	int a[]={5,2,2,6,4};  	int i;  	Selectsort(a,5);   	for(i=0;i<5;i++) 	 { 	 	cout<<a[i]<<" "; 	 }  	return 0;  }这叫冒泡排序。

引用 16 楼 自信男孩的回复:[quote=引用 14 楼 白云牛奶糖 的回复:] [quote=引用 12 楼 自信男孩 的回复:] #include <stdio.h> #include <stdlib.h>  void selectsort(int a[],int n) {     int min,i,j,temp;     for(i=0;i<n-1;i++)     {         min=i;         for(j=i+1;j<n;j++) {             if(a[min]>a[j])                 min=j;         }         if(min!=i)         {             temp=a[i];             a[i]=a[min];             a[min]=temp;         }     } }  int main() {     int a[ ]={6,3,2,5,4},i;     selectsort(a,5);     for(i=0;i<5;i++)     {         printf("%5d",a[i]);     }       return 0; } 供参考～  选择排序有点问题，交换的代码块要放在二层循环外，而不是里面。谢谢大佬，您能略微解释一下吗，放在里面和放在外面的差距在哪呢。[/quote]  应该放在外面，因为内存循环用于找到剩下的最大值/最小值（根据是升序还是降序来决定），所以找到之后在考虑是否交换，如果放在第二层循环内，那么交换的时候就不确定是不是已经找到最大值/最小值，因为此时还没有循环结束。[/quote] 哦谢谢大佬懂了懂了，谢谢您。

引用 14 楼 白云牛奶糖 的回复:[quote=引用 12 楼 自信男孩 的回复:] #include <stdio.h> #include <stdlib.h>  void selectsort(int a[],int n) {     int min,i,j,temp;     for(i=0;i<n-1;i++)     {         min=i;         for(j=i+1;j<n;j++) {             if(a[min]>a[j])                 min=j;         }         if(min!=i)         {             temp=a[i];             a[i]=a[min];             a[min]=temp;         }     } }  int main() {     int a[ ]={6,3,2,5,4},i;     selectsort(a,5);     for(i=0;i<5;i++)     {         printf("%5d",a[i]);     }       return 0; } 供参考～  选择排序有点问题，交换的代码块要放在二层循环外，而不是里面。谢谢大佬，您能略微解释一下吗，放在里面和放在外面的差距在哪呢。[/quote]  应该放在外面，因为内存循环用于找到剩下的最大值/最小值（根据是升序还是降序来决定），所以找到之后在考虑是否交换，如果放在第二层循环内，那么交换的时候就不确定是不是已经找到最大值/最小值，因为此时还没有循环结束。

引用 13 楼 kuangbao9 的回复:内层循环也需要。不然只要一次进来的，后面的都会进来。你可以调试跟踪一下就知道了嗯嗯好的谢谢大佬

引用 12 楼 自信男孩 的回复:#include <stdio.h> #include <stdlib.h>  void selectsort(int a[],int n) {     int min,i,j,temp;     for(i=0;i<n-1;i++)     {         min=i;         for(j=i+1;j<n;j++) {             if(a[min]>a[j])                 min=j;         }         if(min!=i)         {             temp=a[i];             a[i]=a[min];             a[min]=temp;         }     } }  int main() {     int a[ ]={6,3,2,5,4},i;     selectsort(a,5);     for(i=0;i<5;i++)     {         printf("%5d",a[i]);     }       return 0; } 供参考～  选择排序有点问题，交换的代码块要放在二层循环外，而不是里面。谢谢大佬，您能略微解释一下吗，放在里面和放在外面的差距在哪呢。

内层循环也需要。不然只要一次进来的，后面的都会进来。你可以调试跟踪一下就知道了

引用 8 楼 kuangbao9 的回复:是min = i;诶大佬这样好像可以了。您能解释一下吗，我感觉您加上去的语句是多余的但又是有用的，因为外面循环已经重新定义了。

引用 9 楼 @矛盾综合体的回复:[quote=引用 6 楼 白云牛奶糖 的回复:] [quote=引用 5 楼 @矛盾综合体的回复:] #include <stdio.h> #include <stdlib.h>  void selectsort(int a[],int n) {     int min,i,j,temp;     for(i=0;i<n-1;i++)    {         min=i;         for(j=i+1;j<n;j++)         {             if(a[min]>a[j])             min=j;              if(min!=i)             {             	temp=a[i];             	a[i]=a[min];             	a[min]=temp; 			}          }     } }  int main() {     int a[ ]={4,3,2,5,6},i;     selectsort(a,5);     for(i=0;i<5;i++)     {         printf("%5d",a[i]);     } 	printf("\n");      return 0; }   没有吧 不能连续回3次。。然后另一张图片只能私信。。[/quote] 如有其它，请私信 [/quote] 大佬您设置了不能私信

引用 6 楼 白云牛奶糖 的回复:[quote=引用 5 楼 @矛盾综合体的回复:] #include <stdio.h> #include <stdlib.h>  void selectsort(int a[],int n) {     int min,i,j,temp;     for(i=0;i<n-1;i++)    {         min=i;         for(j=i+1;j<n;j++)         {             if(a[min]>a[j])             min=j;              if(min!=i)             {             	temp=a[i];             	a[i]=a[min];             	a[min]=temp; 			}          }     } }  int main() {     int a[ ]={4,3,2,5,6},i;     selectsort(a,5);     for(i=0;i<5;i++)     {         printf("%5d",a[i]);     } 	printf("\n");      return 0; }   没有吧 不能连续回3次。。然后另一张图片只能私信。。[/quote] 如有其它，请私信

是min = i;

if(min!=i)             {                 temp=a[i];                 a[i]=a[min];                 a[min]=temp;                m=i;             }  加个这个试试

引用 5 楼 @矛盾综合体的回复: #include <stdio.h> #include <stdlib.h>  void selectsort(int a[],int n) {     int min,i,j,temp;     for(i=0;i<n-1;i++)    {         min=i;         for(j=i+1;j<n;j++)         {             if(a[min]>a[j])             min=j;              if(min!=i)             {             	temp=a[i];             	a[i]=a[min];             	a[min]=temp; 			}          }     } }  int main() {     int a[ ]={4,3,2,5,6},i;     selectsort(a,5);     for(i=0;i<5;i++)     {         printf("%5d",a[i]);     } 	printf("\n");      return 0; }   没有吧 不能连续回3次。。然后另一张图片只能私信。。

引用 1 楼 kuangbao9的回复:可是为啥我的每次都可以呢？ 为啥我电脑不行，等等啊，我发图片上去

可是为啥我的每次都可以呢？


Question: 单链表重复元素的剔除

双重循环，里面判断如果相等的话，调用你链表的删除方法

不考虑时间复杂度的话，重复遍历，从元素A开始，遍历余下元素，有重复则删除，直至最后一个元素。


Question: 如何实现组合多个条件进行查询【c语言】

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

void SearchCar(int cn) { 	int select; 	while(1) 	{ 		printf("\n       欢迎使用车辆信息查询服务\n"); 		printf("\n----------------------------------------------\n"); 		printf("\n          1.按车辆编号查询\n"); 		printf("\n          2.按车牌号查询\n"); 		printf("\n          3.按车型查询\n"); 		printf("\n          4.按座位数查询\n"); 		printf("\n          0.退出查询\n"); 		printf("\n----------------------------------------------\n"); 		printf("\n 请选择查询方式(0~5):");  		scanf("%d",&select); 		getchar(); 		switch(select) 		{ 			case 1:SearchCarnum1(cn);break; 			case 2:SearchCarnum2(cn);break; 			case 3:SearchCarname(cn);break; 			case 4:SearchCarseatnum(cn);break; 			case 0:return; 			default:printf("\n按键错误，请重新选择！\n"); 		} 	} }  void SearchCarnum1(int cn) { 	int i,j,k; 	char carnum1[20],c='y'; 	while(c=='y'||c=='Y') 	{ 		k=-1; 		printf("\n请输入车辆编号:"); 		gets(carnum1); 		for(i=0,j=1;i<cn;i++) 		if(strcmp(car[i].carnum1,carnum1)==0) 		{   k=i; 			printf("\n所查询车辆的信息:\n"); 			j++;  			OutputCar(k); 			printf("\n按任意键继续!\n");getch();  		} 		if(j==1) 		{ 			printf("\n抱歉!没有相应的车辆信息!\n"); 		} 		printf("\n继续查询其他车辆的信息吗?(y/n):"); 		c=getchar();getchar(); 	} 	printf("\n按任意键继续!\n"); 	getch(); }  我只会这样单个查询

看你代码应该car是个结构体 不清楚你存储car的是vector还是别的什么，C++里面有个算法你可以看看，简单的多条件的话，就是 if(!strcmp(car[i].carnum1,carnum1) && !strcmp(car[i].carnum2,carnum2) && !strcmp(car[i].carname,carname)) 这样。麻烦点的通用点的用算法里面的仿函数，大致代码给你参考下 struct ST_Car { //车辆编号，车牌号，车型，座位数 char            fno[64]; char            number[10]; int             type; int             seats; ST_Car() {   void init(); } init() {   memset(fno,0x00,64);   memset(number,0x00,10);   type = -1;   seats = -1; } }  struct FCT_CAR { bool operator() FCT_CAR(const ST_Car * iter, const ST_Car * desc) {   if (strlen(desc->fno) && strcmp(iter->fno, desc->fno))     return false;    if (desc->type > 0 && iter->type == desc->type)     return false;    if (desc->seats > 0 && iter->seats == desc->seats)     return false;    if (strlen(desc->number))     if (strcmp(iter->fno, desc->number))       return false;    else      return true;    return false; };  }  find(const ST_Car& key) { vector<ST_Car>::iterator iter = ; iter = find_if(vec.begin(),vec.end(),key); return *iter; }

这个用数据库操作最简单

1、首先是输入，输入信息应该是包含你上面的所有信息，并把信息保存到一个结构体数组中 2、然后是查找，查找的话你也可以让输入者输入所有的信息，不过如果某些条件输入为空，表示不需要该条件 3、根据输入的1个或者几个条件，从第1步中的结构体数组中查找所有符合的信息


Question: 关于宏定义


Question: 急！！萌新不会，求大佬解题

#include <stdio.h>  int main() { 	int num; 	int mul=1; 	printf("请输入一个大于零的整数: "); 	scanf_s("%d", &num); 	for (int i = 1; i < num; i++) 	{ 		if (i % 7 == 0) 			mul *= i; 	} 	printf("乘积为: %d\n", mul); 	return 0; }

int i,N,sum = 1; 	scanf("%d",&N); 	for(i= 7;i<=N;i+=7) 	{ 		sum *=i; 	} 	printf("%d\n",sum);


Question: 求教，为什么无论输入什么内容会把所有if里东西都打印出来

楼主程序的问题不止提出来的问题。 首先d是指向NULL的，如果直接用scanf接收输入的数据会导致段错误。这是第一个问题； 第二个问题，字符串比较需要用到strcmp/strncmp，而是不是d = "john"这是赋值。 第三个问题，scanf中去掉d前面的&。如果要用d，首先让其指向可读可写的内存区域，比如malloc/free申请空间。

::strcmp

赋值还是等于你得弄明白。

=  改成==


Question: C语言程序 求过程 求大佬们帮忙 在线等 很急急急！！！！！！

#include<stdio.h>   int main (void) { int n; scanf("%d",&n); int *a = (int*)malloc(sizeof(int)*n); for(i = 0;i < n;i++) {scanf("%d",&a[i]); }     int num_count[n]  = {0};     for(int i = 0; i < n; i++){         num_count[arr[i]]++;     }     for(int i = 0; i < n; i++){         if(num_count[arr[i]] > 1){             printf("%d ", arr[i]);         }     }     return 0; } 大概就是这样，你要明白楼上的良苦用心

#include<stdio.h>  int main (void) {     int arr[8]  = {1, 1, 2, 3, 4, 6, 6, 6};// 数组     int num_count[10]  = {0}; // 计数 0-9 共10个数字       for(int i = 0; i < 8; i++){         num_count[arr[i]]++;     }     for(int i = 0; i < 8; i++){         if(num_count[arr[i]] > 1){             printf("%d ", arr[i]);         }     }     return 0; }

//长度为N字节的数组 char A[] = new A[N]; int a; whlie(1)//遍历整合 { a = 0; scanf("%d",a); if(a!=0) A[a]+=1; else break; } //打印 while(N--) { if(A[N]>1) while(A[N]--) printf("%d",N); }


Question: 用指针去掉有n个元素有序数列a中重复数字并返回去重后数列长度，无法运行？？

#include <stdio.h> #include <stdlib.h> #include <string.h>  int RemoveSame(char *a,int n); int remove_same_ch(char *str, int n);  int main() {     char *a,**b;     a=(char *)malloc(10*sizeof(char));     if(a==NULL) {         printf("error");         //exit;         exit(0);     }     int len=0,n=0;     fgets(a, 10, stdin);     n=strlen(a);     //len=RemoveSame(*a,n);     //len = RemoveSame(a, n);     len = remove_same_ch(a, n);     printf("%d\n",len);     free(a);     return 0; }  int RemoveSame(char *a, int n) {     if (0 == n)     {         return 0;     }      int index = 0,i;     //for (i = 1; i < n; ++i)     for (i = 0; i < n; ++i)     {         if (a[index] != a[i])         {             a[++index] = a[i];         }     }      return index + 1; }  int remove_same_ch(char *str, int n) {     int i, j, k;     int flag = 0;       for (i = 0; i < n;) {         flag = 0;         for (j = i + 1; str[j];) {             if (str[i] == str[j]) {                 for (k = j; k < n; k++)                     str[k] = str[k+1];                 n--;                 flag = 1;             } else {                 j++;             }         }         if (!flag)             i++;     }      return strlen(str); } 供参考～  算法可能不够最优，可以找一下最优解


Question: 学生成绩管理系统 需要怎么弄

可能还需要你自己动手修改一下，不过基本需求还是有的 链接：https://blog.csdn.net/qq_44885018/article/details/103605086

我写过一篇差不多的博文，你可以找一下


Question: 后面两张是一题

14题 。它是赋值而不是等于，所以if为真，输出TRUE。 指针操作，*P2才是指针指向的值。 !y为假，DO WHILE循环只执行一次。 最后一个DO在I等于6的时候，I--之后跳出循环了，所以只能加到6.


Question: 用两个单链表存放两个超大正整数，我这么写有什么问题吗，，跑不起来

引用 楼主 Adamabo 的回复:#include <stdio.h> #include <malloc.h> #include <string.h>  #define MAX_SIZE 50  typedef struct node {     int data; // 数据域     struct node *next; // 指针域 }NodeType;  /*------------------------创建整数单链表--------------------------*/ static void create_list(NodeType *h, char a[], int n)// 指针的引用 {     NodeType *p, *r;     int i = 0;      // 创建头结点     h = (NodeType *)malloc(sizeof(NodeType));     r = h; // r指向新创建的头结点      while(i < n)     {         // 创建新结点p         p = (NodeType *)malloc(sizeof(NodeType));         p->data = a[n - i - 1] - '0';         // 将新结点p插入到r结点之后         r->next = p;         // r指向新结点p         r = p;         i++;     }      r->next = NULL; }  /*------------------------输出整数单链表--------------------------*/ static void display_list(NodeType *h) {     NodeType *p = h->next; // p指向整数单链表的第一个数据结点      while(p != NULL)     {         printf("%d ", p->data);         p = p->next;     }     printf("\n"); }  /*------------------------释放整数单链表--------------------------*/ static void destroy_list(NodeType *h) {     NodeType *pre = h; // pre指向整数单链表的头结点     NodeType *p = pre->next; // p指向整数单链表的第一个数据结点      while(p != NULL)     {         free(pre);         // pre,p同步后移一个结点         pre = p;         p = p->next;     }     free(pre); }  /*------------------------两整数单链表h1和h2相加得到h--------------------------*/ static void add_list(NodeType *h1, NodeType *h2, NodeType *h) // 指针的引用 {     NodeType *p1 = h1->next; // p1指向单链表h1中的第一个数据结点     NodeType *p2 = h2->next; // p2指向单链表h2中的第一个数据结点     NodeType *p, *r;     int carry = 0;      // 创建头结点     h = (NodeType *)malloc(sizeof(NodeType));     // r指向新创建头结点     r = h;      while(p1 != NULL && p2 != NULL)     {         // 创建新结点p         p = (NodeType *)malloc(sizeof(NodeType));         p->data = (p1->data + p2->data + carry) % 10; // 求余         // 将新结点p插入到r指向的头结点之后         r->next = p;         // r后移一个结点         r = p;         carry = (p1->data + p2->data + carry) / 10; // 求商         // p1和p2指向下一个结点         p1 = p1->next;         p2 = p2->next;     }      if(p1 == NULL)         p1 = p2;      while(p1 != NULL)     {         p = (NodeType *)malloc(sizeof(NodeType));         p->data = (p1->data + carry) % 10; // 数据域         // 将新结点p插入到r指向的头结点之后         r->next = p;         // r后移一个结点         r = p;         carry = (p1->data + carry) / 10;         p1 = p1->next;     }      // 最后carry不为0时,创建一个结点存放它     if(carry > 0)     {         p = (NodeType *)malloc(sizeof(NodeType));         p->data = carry;         // 将新结点p插入到r指向的头结点之后         r->next = p;         // r后移一个结点         r = p;     }     r->next = NULL; }  /*------------------------逆置整数单链表h--------------------------*/ static void reverse_list(NodeType *h) {     NodeType *p = h->next, *q;     h->next = NULL;      while(p != NULL)     {         q = p->next;         p->next = h->next;         h->next = p;         p = q;     } }  int main(int argc, char *argv[]) {     NodeType *h1, *h2, *h;     char s[MAX_SIZE], t[MAX_SIZE];      printf("   (1)输入整数1: ");     scanf("%s", s);     printf("   (2)输入整数2: ");     scanf("%s", t);      create_list(h1, s, strlen(s));     create_list(h2, t, strlen(t));      printf("   (3)整数单链表1: ");     display_list(h1);     printf("   (4)整数单链表2: ");     display_list(h2);      add_list(h1, h2, h);     printf("   (5)结果单链表: ");     display_list(h);      reverse_list(h);     printf("   (6)对应的整数: ");      destroy_list(h);     destroy_list(h1);     destroy_list(h2);      return 0; }  还是跑不了。。


Question: c语言

#include <stdio.h> #include <stdlib.h> float multiplication(float n1,float n2) { 	float n3=n1*n2; 	return n3; } int main() {     float n1=2; 	float n2=3.5; 	printf("%.3f\n",multiplication(n1,n2));      return 0; }


Question: 计算机网络五层体系结构数据封装过程的模拟怎么用c实现？

能不能写个示例

不断的加报头，也就是识别码


Question: found error，help

引用 1 楼 user-3的回复:这个del函数在哪里定义了？确定有吗？ 卧槽，忘记定义了，函数太多弄混了😭😭谢谢兄弟啦

你把 del 的调用代码贴出来阿， 可能是调用函数时如果所用的参数类型同函数声明时的类型不符将会产生LNK2001

这个del函数在哪里定义了？确定有吗？


Question: C语言菜鸟求救

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


Question: 如图

引用 1 楼 與蘤舊縐的回复:强制类型转换，malloc可不知道你想要什么类型的指针 好的谢谢！！！！！！！！

强制类型转换，malloc可不知道你想要什么类型的指针

malloc返回的是一个空类型的指针，如果直接赋值就会产生错误，所以要强制转换一下


Question: C语言实现两个超大正整数相加，单链表


Question: C语言


Question: 有什么简单点的加密代码么？

历史上最简单的加密就是把26个字母的顺序变化一下。比如用a表示b，用b表示c…… 供你参考


Question: 冒泡排序交换数字域运行不了，，会直接退出程序，，不知道原因

引用 1 楼 棉猴 的回复:main()函数里面： 	for (i = 0; i<n-1; i++)//--n改为n-1，因为head已经创建了一个学生了----------- 	{ 		p->next = (struct grade_list *)malloc(sizeof(struct grade_list)); 		p->next->next = nullptr;//----添加该行代码，否则最后一个学生的next不是NULL----- 		if (!p->next) 			exit(0); 		p = p->next; 	} VS2015调试结果  这样改的话修改指定项那段就会自动退出程序，而且r=5的时候也没有排序，我觉得可能主要是sort函数的问题，但是看不出来


Question: error C2143报错，毫无头绪啊，萌新求大神指点

初始化数组里面逗号是中文的


Question: 交换变量值

那就把函数的参数改成指针

要补充什么？C程序扩展名是C，C++有好几种扩展名

那C++的话，再补充点什么能让它对呢

这是C语言，不是C++，C++才有引用&，C没有的


Question: 帮忙看一下

应该是重复计算太多，把子运算先算还好存到数组里，根据下标直接调用结果

这公式没准能简化下，然而我的数学水平是帮不了你了 要么就以空间换时间，开个多线程吧

引用 1 楼 與蘤舊縐的回复:这公式latex语法渲染不出来吗 求和太多次了，可能超时 请亮出你的代码 我代码就是正常的思路，五个for循环

这公式latex语法渲染不出来吗 求和太多次了，可能超时 请亮出你的代码


Question: 希望各位前辈可以帮忙解答，非常感谢！

具体指什么 是把一个小数存入数组，然后用指针去除后面的零还是存进一个变量，额如果存进一个变量的话，压根没有0 那就拿指针遍历数组，主要倒序遍历，碰到小数点、非零数之前的所有零都去掉


Question: 大神求帮忙

#include<stdio.h>  /** *判断一个数是否有重复数字 *@param n 要判断的数字 */ int is_repeat(int n){ 	int num = n; 	int arr[10] = {0}; //0-9每个数字出现的次数 	while(num){ 		arr[num%10]++; 		num /=10; 	} 	for(int i=0; i < 10; i++){ 		if(arr[i] > 1){ 			 			return 1; 		} 	} 	return 0; } int main(){ 	int count = 0; 	for(int i = 17 * 6; i < 1000; i += 17){ 		if(!is_repeat(i)){ 			count++; 			printf("%d ", i); 		} 	} 	printf("\n结果:%d个\n", count); 	return 0; }


Question: c语言救救孩子

#include<stdio.h> #include<stdlib.h> #include<math.h> int main(){ 	double sum=0; 	int t; 	printf("请输入上限：\n"); 	scanf("%d",&t); 	for(int n=0;n<t;n++){ 		if(n%3==0&&n%7==0){ 			sum+=n; 		} 	} 	printf("%lf\n",sqrt(sum)); 	return 0; }


Question: 大佬们 这道题是什么意思

打印 aa bb【tab符】cc【tab符】abc（换行） 打印【tab符】【退格符（也就是会删除前一个字符）】AN(换行) '\101'是字符A对应的ascii码的8进制，'\116'是字符N对应的ascii码的8进制


Question: c语言-动态分配内存-安卓系统

那才多大点内存，我不会当我没说


Question: 这个交换数字域的sort函数有啥问题，跑不起来

我自己写了个链表排序，作为参考：  #include <stdio.h>  struct data {    int i;    struct data * next;   };  void swap_node(struct data * pre, struct data * middle, struct data * next){     middle->next = next->next;     next->next=middle;     if(pre != NULL){         pre->next = next;     } } void show_list(struct data * head){     struct data * temp = head;     while(temp){         printf("%d ", temp->i);         temp = temp->next;     } } /**  * 链表冒泡排序(升序)  */  struct data * sort(struct data * head){      struct data * result_head = head; // 头节点     struct data * target_node = result_head; // 遍历的目标节点     struct data * target_pre = NULL; //目标节点的前一个节点     struct data * temp = NULL; // 中间变量     int i = 0, j = 0;     while(target_node){         i++;         while (target_node->next){             j++;            if(target_node->i > target_node->next->i){ //目标节点比下一个节点大                 if(target_pre == NULL){ //当前目标节点是第一个节点                    result_head =  target_node->next; // 更新新的头节点                 }                 temp = target_node->next; //记录一下                 swap_node(target_pre, target_node, target_node->next); // 交换目标节点和下一个节点                 target_pre = temp; // 更新目标节点的前一个节点                 show_list(result_head); //打印                 printf("\n");                           }else{ //目标节点比下一个节点小                target_pre = target_node;                target_node = target_node->next;            }         }         if(i >=j){             break; // todo 跳出循环         }         j = 0;         // 又一轮循环 目标节点设为头节点         target_node =result_head;         target_pre = NULL;                      }     return result_head; }    int main(){     struct data a = {9, NULL};     struct data b = {8, NULL};     struct data c = {7, NULL};     struct data d = {6, NULL};     struct data e = {5, NULL};     struct data f = {4, NULL};     struct data g = {3, NULL};     a.next = &b;     b.next = &c;     c.next = &d;     d.next = &e;     e.next = &f;     f.next = &g;     show_list(&a);     printf("\n");     struct data *head = sort(&a);     return 0; }


Question: 大一计算机写程序总要花很久，怎么办？

正常，编程就是不断找出问题，解决问题的过程。前期出现这样的情况很正常，建议楼主多花时间调试，多编写，多尝试～

我也是，好难受，但是回头一看也学到了很多，，是个过程吧。。

多敲多思考，没捷径

唯熟能生巧耳  写个程序只分两部分，逻辑和实现，逻辑吗就学好数理化政史地语数英...etc，一通瞎扯淡，多看看别人的代码，多写写自己的代码，提高一下代码实现能力，要练的话也别找什么竞赛题，那种拿来练逻辑，找个小项目做做提高很快的


Question: 写出以下程序运行结果

rm -rf /脑子

这个结果不唯一的，一般用于检测pc机的大小端模式


Question: 编写程序

简易版，缺点：多个总分一样则只打印学号靠前的 解决：方法很多，例如先排序，再判断下一个成绩是否一样，再判断是否需要打印下一个  #include <stdio.h> typedef struct { 	char name[10]; 	unsigned int num; 	unsigned int course1; 	unsigned int course2; 	unsigned int course; }students; int main(void) { 	students stu[3]; 	int i=0; 	int max=0; 	printf("请输入三名学生的信息\n按照学号 姓名 课程1成绩 课程2成绩输入\n"); 	for(;i<3;i++) 	{ 		scanf("%u%s%u%u",&stu[i].num,stu[i].name,&stu[i].course1,&stu[i].course2); 		stu[i].course=stu[i].course1+stu[i].course2; 		printf("%u %s %u %u %u\n",stu[i].num,stu[i].name,stu[i].course1,stu[i].course2,stu[i].course); 	} 	for(i=1;i<3;i++) 	{ 		if(stu[max].course<stu[i].course) 		{ 			max=i; 		} 	} 	printf("%u %s %u %u %u\n",stu[max].num,stu[max].name,stu[max].course1,stu[max].course2,stu[max].course); }


Question: 给定数组长度，在赋值时大于数组长度，为什么输出没问题？

引用 21 楼 lin5161678 的回复:引用 19 楼 Dr_W 的回复:逗号呢啥?算了，老哥你下过vs2017吗？ https://bbs.csdn.net/topics/395403080 我这个没人回我...

引用 19 楼 Dr_W 的回复:逗号呢啥?

引用 17 楼 lin5161678 的回复:引用 16 楼 Dr_W 的回复:引用 14 楼 lin5161678 的回复:引用 13 楼 Dr_W 的回复:%s输入的是字符串，相当于输入的是string类型的，遇到回车结束，string底层其是可以理解成可变长度数组不可以 没这么神奇什么不可以%s输入不能理解为底层可变长度数组逗号呢

引用 4 楼 林涅槃 的回复:[quote=引用 1 楼 @矛盾综合体的回复:]内存现实存在，不管你用不用，你的代码只是将其分配，让程序员加以控制，所有没什么语法错误，只是可能有时越界会进入一些特殊的段域会报段错误等，其次%s只是表示你将输入的是一段字符串，首地址是a，长度什么的，没有限制的，打印则是遇到\0结束，与长度无关，但是还是建议不要越界。 谢谢，写程序时不会越界，至是想搞清楚而已[/quote]当然会越界 这是毫无疑问的

引用 10 楼 林涅槃 的回复:[quote=引用 9 楼 @矛盾综合体的回复:][quote=引用 8 楼 林涅槃 的回复:] [quote=引用 6 楼 @矛盾综合体的回复:][quote=引用 5 楼 林涅槃 的回复:] [quote=引用 1 楼 @矛盾综合体的回复:]内存现实存在，不管你用不用，你的代码只是将其分配，让程序员加以控制，所有没什么语法错误，只是可能有时越界会进入一些特殊的段域会报段错误等，其次%s只是表示你将输入的是一段字符串，首地址是a，长度什么的，没有限制的，打印则是遇到\0结束，与长度无关，但是还是建议不要越界。 你好，我还有一个问题，空格也算字符，为什么在输入字符串a[11]中，如： how are you 时遇到空格后不是把空格赋值到数组里？而是只输入how呢[/quote] scanf无法接受到空格或者回车之类的字符，因为他是将其判断为一个格式输入的结束标志，如果我想接受这些特殊，可以用fgets或者gets[/quote] 为何在个字符变量赋值时，使用scanf（“%c%c%c”，&s,&d,&u）;输入a（空格）by，会把a赋给s，空格赋给d，b赋给u呢？[/quote] %c是接收一个字符，当然可以，上面是说%s，scanf是严格按照要求进行匹配的[/quote] 好的，清楚了，谢谢![/quote] 如果你的问题已经解决，请择优采纳，如果没有，可以留言或者私信，谢谢！

引用 9 楼 @矛盾综合体的回复:[quote=引用 8 楼 林涅槃 的回复:] [quote=引用 6 楼 @矛盾综合体的回复:][quote=引用 5 楼 林涅槃 的回复:] [quote=引用 1 楼 @矛盾综合体的回复:]内存现实存在，不管你用不用，你的代码只是将其分配，让程序员加以控制，所有没什么语法错误，只是可能有时越界会进入一些特殊的段域会报段错误等，其次%s只是表示你将输入的是一段字符串，首地址是a，长度什么的，没有限制的，打印则是遇到\0结束，与长度无关，但是还是建议不要越界。 你好，我还有一个问题，空格也算字符，为什么在输入字符串a[11]中，如： how are you 时遇到空格后不是把空格赋值到数组里？而是只输入how呢[/quote] scanf无法接受到空格或者回车之类的字符，因为他是将其判断为一个格式输入的结束标志，如果我想接受这些特殊，可以用fgets或者gets[/quote] 为何在个字符变量赋值时，使用scanf（“%c%c%c”，&s,&d,&u）;输入a（空格）by，会把a赋给s，空格赋给d，b赋给u呢？[/quote] %c是接收一个字符，当然可以，上面是说%s，scanf是严格按照要求进行匹配的[/quote] 好的，清楚了，谢谢!

引用 8 楼 林涅槃 的回复:[quote=引用 6 楼 @矛盾综合体的回复:][quote=引用 5 楼 林涅槃 的回复:] [quote=引用 1 楼 @矛盾综合体的回复:]内存现实存在，不管你用不用，你的代码只是将其分配，让程序员加以控制，所有没什么语法错误，只是可能有时越界会进入一些特殊的段域会报段错误等，其次%s只是表示你将输入的是一段字符串，首地址是a，长度什么的，没有限制的，打印则是遇到\0结束，与长度无关，但是还是建议不要越界。 你好，我还有一个问题，空格也算字符，为什么在输入字符串a[11]中，如： how are you 时遇到空格后不是把空格赋值到数组里？而是只输入how呢[/quote] scanf无法接受到空格或者回车之类的字符，因为他是将其判断为一个格式输入的结束标志，如果我想接受这些特殊，可以用fgets或者gets[/quote] 为何在个字符变量赋值时，使用scanf（“%c%c%c”，&s,&d,&u）;输入a（空格）by，会把a赋给s，空格赋给d，b赋给u呢？[/quote] %c是接收一个字符，当然可以，上面是说%s，scanf是严格按照要求进行匹配的

引用 6 楼 @矛盾综合体的回复:[quote=引用 5 楼 林涅槃 的回复:] [quote=引用 1 楼 @矛盾综合体的回复:]内存现实存在，不管你用不用，你的代码只是将其分配，让程序员加以控制，所有没什么语法错误，只是可能有时越界会进入一些特殊的段域会报段错误等，其次%s只是表示你将输入的是一段字符串，首地址是a，长度什么的，没有限制的，打印则是遇到\0结束，与长度无关，但是还是建议不要越界。 你好，我还有一个问题，空格也算字符，为什么在输入字符串a[11]中，如： how are you 时遇到空格后不是把空格赋值到数组里？而是只输入how呢[/quote] scanf无法接受到空格或者回车之类的字符，因为他是将其判断为一个格式输入的结束标志，如果我想接受这些特殊，可以用fgets或者gets[/quote] 为何在个字符变量赋值时，使用scanf（“%c%c%c”，&s,&d,&u）;输入a（空格）by，会把a赋给s，空格赋给d，b赋给u呢？

引用 5 楼 林涅槃 的回复:[quote=引用 1 楼 @矛盾综合体的回复:]内存现实存在，不管你用不用，你的代码只是将其分配，让程序员加以控制，所有没什么语法错误，只是可能有时越界会进入一些特殊的段域会报段错误等，其次%s只是表示你将输入的是一段字符串，首地址是a，长度什么的，没有限制的，打印则是遇到\0结束，与长度无关，但是还是建议不要越界。 你好，我还有一个问题，空格也算字符，为什么在输入字符串a[11]中，如： how are you 时遇到空格后不是把空格赋值到数组里？而是只输入how呢[/quote] scanf无法接受到空格或者回车之类的字符，因为他是将其判断为一个格式输入的结束标志，如果我想接受这些特殊，可以用fgets或者gets

引用 1 楼 @矛盾综合体的回复:内存现实存在，不管你用不用，你的代码只是将其分配，让程序员加以控制，所有没什么语法错误，只是可能有时越界会进入一些特殊的段域会报段错误等，其次%s只是表示你将输入的是一段字符串，首地址是a，长度什么的，没有限制的，打印则是遇到\0结束，与长度无关，但是还是建议不要越界。 你好，我还有一个问题，空格也算字符，为什么在输入字符串a[11]中，如： how are you 时遇到空格后不是把空格赋值到数组里？而是只输入how呢

引用 1 楼 @矛盾综合体的回复:内存现实存在，不管你用不用，你的代码只是将其分配，让程序员加以控制，所有没什么语法错误，只是可能有时越界会进入一些特殊的段域会报段错误等，其次%s只是表示你将输入的是一段字符串，首地址是a，长度什么的，没有限制的，打印则是遇到\0结束，与长度无关，但是还是建议不要越界。 谢谢，写程序时不会越界，至是想搞清楚而已

引用 2 楼 與蘤舊縐的回复:你这个怎么是scanf("%s",&a)？？数组名前不需要取地址符 说得也是，谢谢提醒

你这个怎么是scanf("%s",&a)？？数组名前不需要取地址符


Question: 大佬看看后面那堆乱码是什么鬼

我刚刚找到错误了原来有个野指针。谢谢

哪有乱码啊？你的代码呢？


Question: C语言使用链表、文件做系统 第一次运行，录入数据 1 2 3 4（比如)，然后用分函数查招，此时无任何问题，但第二次打开系统查招时，找不到1，但能找到2，3，4

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


Question: 急~大家帮忙看一下

OK,非常感谢

这些字母同时也是整数，它是把字母作为下标来访问数组的

原题目是将罗马数字转换成十进制数，这是其中的一段代码

map是一个数组

map是什么？没有上下文环境吗？


Question: 求c语言大神指导一下

下次求助先定位自己想问什么，都不理解你的意思


Question: 图书管理系统还书无法正确运行


Question: 这是怎么回事？

scanf参数需要字符串大小，Myatoi参数需要字符串，类型错了


Question: 编程题思路

判断字符串中字符是否是字符之间的ascii码就可以了，是就+1,


Question: 语句判定

读入一个字符赋值给 c    如果是换行符就退出while 循环

读入一个字符赋值给 c    如果不是换行符就执行while 循环


Question: char s[100]; int c,i;

又是出题人不懂瞎扯淡 习惯就好了

c是int %c c 是错的

你还没入门，兄弟 ASCII对应的字符也有0-9，称之为数字字符，对应的ASCII码值为48–57

1就是字符'1'，不知道你什么意思，你要是用%d输出，就是49（16进制的31）


Question: 在线求解


Question: c语言

对，这个确实有问题我刚才才发现，但是其实是因为前面呢个高数少了一个}影响到这里了，谢谢你们了

前面23行就开始错了，影响到这里了吧，先去前面看看

是吗？

没问题啊

仔细看一下代码 是if , else if的括号问题


Question: 求代码简单点谢谢

#include<stdio.h> int nn(int *a,int b); #define N 30   //改变这里的值，就可以更改 要计算的人数 。  int main(void)  { 	int i,n,a[N],sum = 0; 	for(i = 0;i < N;i++) 	{ 		scanf("%d",&a[i]); 		sum = sum + a[i]; 	} 	nn(a,sum); 	return 0; } int nn(int *a1,int b) { 	int i,d1,d,f = 1,g = 1,k,n; 	for(i = 0;i <N;i++) 	{ 		for(d = 0;d < N - 1 - i;d++) 		{ 			if(a1[d] >a1[d + 1]) 			{ 				d1 = a1[d]; 				a1[d] = a1[d + 1]; 				a1[d + 1] = d1; 			} 		} 	} 	for(i = 0;i < N;i++) 	{ 		if(a1[i] == a1[i + 1]) 		{ 			f = f + 1; 		} 		else 		{ 			break; 		} 	} 	for(i = N - 1;i >= 0;i--) 	{ 		if(a1[i] == a1[i - 1]) 		{ 			g = g + 1; 		} 		else 		{ 			break; 		} 	} 	printf("%.2f\n%d\n%d\n%d\n%d\n",b * 1.00 / N,a1[N - 1],g,a1[0],f); }

记 得 点 赞


Question: C语言简单题

引用 1 楼 與蘤舊縐的回复:||前面的错误，依旧判断后面的，a++=0，为false，继续判断后面的b++=7，为true，继续判断后面的c++=3 a=1，b=8，c=4  void main这书多少年没改版了  注意输出的是%c，也就是ASCII码表的第9/8/7...0个字符 第七题懂了，第八题答案是-1，我敲了这个代码运行了一下，结果是空白，把%c改成%d结果就是-1了，求解

引用 3 楼 與蘤舊縐的回复:什么鬼，代码不全，前面输出的刚才说了，后面是不是循环结束又输出了一次，那个时候y＝-1，％c输出的是字符，ASCII码表没有第-1个字符，当然是空白，%d输出的是整型，就是-1，换书换书 哦哦，谢谢


Question: 大神帮帮弟弟吧

int main() {     int i,j=0,n,a,b,c;     for(i = 100;i < 1000;i++)     {         if(0 == i%17)         {             n=i;             a=n%10;             n=n/10;             b=n%10;             c=n/10;             if(a!=b&&b!=c&&a!=c)                 j++;         }     }     printf("%d",j);     return 0; }


Question: 有错误的程序，，不知道怎么改

你这两个函数名字和string.h里面的一样，换个名字吧


Question: 单片机作业 救救孩子吧


Question: 大佬们帮我康康哪里错了吧，谢谢啦

输入那个j吗？那个取地址符&被你漏了

引用 1 楼 user-2的回复:自己都不知道哪里错了，还要别人帮你看。比方编译错了，什么错误提示；运行结果不对，那么输入什么输出什么。这样提问是不是更好一点？给出更多的信息减少来回沟通的次数，可以提高效率 感谢!大佬佬佬佬佬佬佬佬，

编译运行无问题，就是那个逐行输入数字不会


Question: 有关于c语言简单问题。

...好滴吧，csdn大佬就是多

还有，这个并不难，好好想想怎么做吧，别想着要代码。给红包的话，10米对我没有吸引力

对对对，所以怎么敲这个代码

嗯，有范围的啊，比如int，最大也不会超过20亿多，所以不能说是任意偶数，这个说法太随意了，让你分解10的一万次方没有量子计算机能算得出来吗？

这评论怎么还被删除了有语言不能用吗

引用 2 楼 user-2的回复:楼主不错啊，很有诚意！ 还有就是任意偶数这个提法有的问题，应该是指定范围内的偶数，否则给你一个巨大的数值，没法计算的 我们这是期末的题，太难了，就是输入一个偶数，可以分为两个素数的和，题目就是这样


Question: 想知道C语言怎么遍历文件内容找到指定字符串并将其替换为另一个指定字符串

全部读入，找到指定的字符串，替换之后再全部输出到文件里面


Question: 求助@结构体数组能否解决该问题


Question: c语言

谢谢你的回答，就是有一些地方看不大懂

#include<stdio.h> #include<math.h> int max2(int x,int y); int max3(int x,int y); int main(void)  { 	int a,b,c,n,f; 	scanf("%d%d%d",&a,&b,&c); 	n = max2(a,b); 	f = max2(b,c); 	f = max3(n,f); 	printf("%d",f); 	return 0; } int max2(int x,int y) { 	int a = x>y?x:y; 	return a; } int max3(int x,int y) { 	int h = max2(x,y); 	return h; }


Question: 图邻接表的最小生成树prim算法，求解答过程？？

引用 1 楼 薛定谔之猫的回复:ElgV，这不是背诵就可以了么？ 我知道结果，但是它是怎么个过程，不明白，所有的网上还有视频都是以邻接矩阵为存储结构的

ElgV，这不是背诵就可以了么？


Question: 关于C语言联合体的问题

没有联合名，后面用的时候还要定义吧，

没问题，你觉得有什么问题吗？


Question: 程序运行不了大神求解 （     error C2059: syntax error : ')'        ）

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

#include <stdio.h> #include <windows.h> #include <math.h> double trianglearea(float a,float b,float c); double squarearea(float a,float b); double roundarea(float r); int main(void)//改成这样  {  int index=0; float a,b,c,r; double S;  while(1){  printf("请输入函数类型，三角形输出1，矩形输入2，圆形输出3。按0退出\n"); scanf("%d,&index");  if(index==0) break; else if(index==1){ printf("请输入三角形三边长"); scanf("%f %f %f",&a,&b,&c);//把多余的逗号去掉了  S=trianglearea(a,b,c);  } else if(index==2){ printf("请输入矩形的长和宽"); scanf("%f %f",&a,&b); S=squarearea(a,b); } else if(index==3){ printf("请输入圆形的半径"); scanf("%f",&r); S=roundarea(r); }  printf("所求图像的面积为%d\n",S);   }      } double trianglearea(float a,float b,float c){  double p=0; if(!((a+b)>c && (a+c)>b && (c+b)>a)){ printf("这三条边无法组成三角形"); return 0; } p=(a+b+c)/2;  return sqrt(p*(p-a)*(p-b)*(p-c));  }   double squarearea(float a,float b){ return a*b;  }   double roundarea(float r){ return 3.14*r*r; }


Question: C语言进阶

引用 1 楼 @矛盾综合体 的回复：文件i/o后的话，可以学数据结构，网络编程，基础的数据库等吧

文件i/o后的话，可以学数据结构，网络编程，基础的数据库等吧


Question: 折半查找

引用 1 楼 weixin_45949073的回复: #include <stdio.h> int bisearch(int *a,int number,int n){     int mid = 0;     int low=0;     int high=n-1;     while(low<high){          mid = (low+high)/2;         if(a[mid]==number){         	printf(" /%d/ ",mid);         	return mid;         }else if(a[mid]>number){             low=mid-1;             //原来 high=mid-1;         }else{             high=mid+1; 			//原来 low=mid+1;         }     } } int main() {     int a[15]={15,14,13,12,11,10,9,8,7,6,5,4,3,2,1};     int n;     scanf("%d",&n);     int res=bisearch(a,n,15);     printf("%d\n",res);     return 0; }  注意细节 好的，我已经看到了，谢谢！

别忘了给我点赞


Question: 萌新求助，有关Easyx的图像处理

嗯嗯，大概明白了，我试试，谢谢大佬

最好判断有无修改，没有修改就不要刷新

每次修改画面只需要修改变动的就好，比如只有人在动，就指动人，否则很容易出现闪烁的现象，把所有图改好之后统一刷新

自定义函数，自己写，给你个名字

引用 3 楼 與蘤舊縐的回复:前面updateWithInput和updateWithoutInput写反了 updateWithInput和updateWithoutIput是啥？

woc，，这么复杂？我的vs是2010的。膜拜大佬，我再改改

前面updateWithInput和updateWithoutInput写反了

不应该全写进一个函数的，初始化单独写一个函数init，还需要updateWithInput和updateWithoutInput（在这个函数中判断有无输入，若有则进行处理），这两个函数用于改动后台数据，另外还应当有一个flush函数用于刷新画面，这三个函数应当放入循环中，你这个就算能动起来也很难看，还有你判断之前怎么就结束了批量绘制呢，这个背景有点复杂，小人最好扣出来，有个函数可以使jsp图片达到png格式图片的透明效果


Question: 求改正！！！

你这里如果两个数相等的话，直接输出mn其中一个才对吧

#include<stdio.h> int gg(int a, int b) { 	int min  = 0,i; 	min = a<b?a:b; 	for(i = min; i >= 1; i--) { 		if(a % i == 0&&b % i == 0 ) { 			break ; 		} 	} 	return i; } int ff(int a,int b) { 	int max = 0,p; 	max = a > b?a:b; 	for(p = a; p<a * b; p++) { 		if(p % a == 0&&p % b == 0) { 			break; 		} 	} 	return p; } int main(void) { 	int t,r,a,b; 	scanf("%d%d",&a,&b); 	r = gg(a,b); 	t = ff(a,b); 	printf("%d %d",r,t); 	return 0; } 看看我的麻烦解答

知道了，掉括号了，运行应该没问题了


Question: #定义那些事#

把代码发过来，我给你改

引用 4 楼 Kmxs 的回复:[quote=引用 3 楼 @矛盾综合体的回复:]函数可以嵌套使用，但是不可以嵌套定义 一语惊醒梦中人，但是我要怎么改，这话老师也说过[/quote] 1.把定义弄到main函数前面，就不需要声明 2.将定义放到main函数后面，在调用前声明（可以main函数前）

引用 3 楼 @矛盾综合体的回复:函数可以嵌套使用，但是不可以嵌套定义 一语惊醒梦中人，但是我要怎么改，这话老师也说过

函数可以嵌套使用，但是不可以嵌套定义

这什么骚操作，要么把函数的定义移到main函数外面，要么就不要定义函数了，移到main函数前面的话就不需要main里面的第一句，否则就加上，还有函数定义的形参列表后面怎么加了个分号

把10到22移动到1下面，


Question: #C语言语法错误#

记得加&.........

#include <stdio.h> void paixu(int a[], int n);//------把paixu()函数的声明放到main()函数之外----- int main() { 	 	int a[10], i; 	printf("请输入10个整数:\n"); 	for (i = 0; i <= 9; i++) 		scanf("%d", &a[i]);//-----去掉\t----------- 	paixu(a, 10); 	printf("排序的整数依次是:\n"); 	for (i = 0; i < 10; i++)//--------去掉分号----------- 	{ 		printf("%d\t", a[i]); 	} 	printf("\n"); 	return 0; }  void paixu(int a[], int n) { 	int i, j, t; 	for (i = 0; i <= n - 1; i++) 		for (j = i + 1; j<n; j++) 			if (a[i]>a[j]) 			{ 				t = a[i];//----------j改为i------------ 				a[i] = a[j]; 				a[j] = t; 			} } VS2015调试结果

地址！！！！！

请问有什么问题吗？有啥不一样。

scanf("%d\t",&a[i]);


Question: C程序

引用 1 楼 與蘤舊縐 的回复:a表示当a==0 !a表示a!=0  反了反了，脑子绕晕了

解：由楼上可知 答案为 A

首先了解一下while(!a),这表示当a等于0的时候才执行while中的语句（因为0取反则为真），当a不等于0就不执行while中的语句。 然后让我们考虑一下四个选项，a==0，这是一个逻辑语句，判断a是否等于0，当a等于0的时候为真，不等于0为假，等价于！a； a！=1，这表示a等于1的时候才为假，其他为真 a！=0，表示a等于0的时候为假，不等于0为真 a==1，只有a等于1的时候才为真，其余为假

楼上说反了吧。。。。。

a表示当a==0 !a表示a!=0


Question: C语言

各位大佬稍微说一思路就可


Question: 读取函数失效

其他功能都可以正常使用，就是读取功能用不了


Question: 需要做一个加密解密程序

引用 1 楼 这是一个正经昵称 的回复：加密算法不是说了可以自由考虑吗？代码填充在最后的if encode if decode那里，你就把字符的值通通加或者减一个固定值，解密就反过来就行了。或者看看base64，很简单的。具体要写什么内容呢？帮帮我吧！😭😭


Question: 初学C语言求助大神

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

把地址  。。。。传过去

形参，不能改变实    参

应该传递引用，或指针。参考如下  swap(int&a,int&b) {int tmp; tmp=a; a=b; b=tmp; }

函数参数传递主要方式主要有两种，值传递和引用传递。值传递，在函数调用时，将实际参数的值复制一份传递到调用函数中，这样如果再调用函数中修改了参数的值，其改变不会影响到实际参数的值。


Question: c语言中，数组被定义后即使没有被赋值，数组名里面也有值吗？

double *target； target = （double*）malloc（sizeof（double）*5）； 就行了

数组没有被赋初值的话，它里面的值是不确定的 你说的错误提示信息是什么？

定义成指针要给它分配空间的

我不记得了，我想问的是为什么输入double target2[5]可以，而输入double *target2却不行？


Question: C语言

你这代码不回车也输进去了吗？

引用 4 楼 棉猴的回复:[quote=引用 3 楼 weixin_45949073 的回复:] [quote=引用 2 楼 棉猴的回复:]#include<stdio.h> #include<string.h> int main() { 	int t, n, j; 	char a, b, c; 	int count = 0; 	scanf("%d", &t); 	rewind(stdin); 	int *awin = new int[t]; 	int temp = t; 	while (t) { 		count = 0; 		scanf("%d", &n); 		rewind(stdin); 		for (j = 1; j <= n; j++)  		{ 			//if (j != n) 			scanf("%c%c%c", &a, &b, &c); 			rewind(stdin); 			//else 				//scanf("%c%c%c", &a, &b, &c); 			if (a == 'R')  			{ 				if (c == 'R') 					count += 0; 				else if (c == 'S') 					count++; 				else 					count--; 			} 			else if (a == 'S')  			{ 				if (c == 'S') 					count += 0; 				else if (c == 'P') 					count++; 				else 					count--; 			} 			else  			{ 				if (c == 'P') 					count += 0; 				else if (c == 'R') 					count++; 				else 					count--; 			} 		} 		 		if (count == 0) 			awin[t-1] = 1; 		else if (count>0) 			awin[t-1] = 3; 		else if (count<0) 			awin[t-1] = 0; 		t--; 	} 	for (int i = temp-1; i >= 0; i--) 	{ 		if (awin[i] == 1) 			printf("TIE\n"); 		else if (awin[i] == 3) 			printf("Player 1\n"); 		else if(awin[i] == 0) 			printf("Player 2\n"); 	} 	delete[] awin; 	return 0; } vs2015调试  原来.c也可以用new啊[/quote] 那就改成malloc()和free()嘛。我使用VS2015的C++编译器实现的[/quote] 嗯。。。。。知道了

引用 3 楼 weixin_45949073 的回复:[quote=引用 2 楼 棉猴的回复:]#include<stdio.h> #include<string.h> int main() { 	int t, n, j; 	char a, b, c; 	int count = 0; 	scanf("%d", &t); 	rewind(stdin); 	int *awin = new int[t]; 	int temp = t; 	while (t) { 		count = 0; 		scanf("%d", &n); 		rewind(stdin); 		for (j = 1; j <= n; j++)  		{ 			//if (j != n) 			scanf("%c%c%c", &a, &b, &c); 			rewind(stdin); 			//else 				//scanf("%c%c%c", &a, &b, &c); 			if (a == 'R')  			{ 				if (c == 'R') 					count += 0; 				else if (c == 'S') 					count++; 				else 					count--; 			} 			else if (a == 'S')  			{ 				if (c == 'S') 					count += 0; 				else if (c == 'P') 					count++; 				else 					count--; 			} 			else  			{ 				if (c == 'P') 					count += 0; 				else if (c == 'R') 					count++; 				else 					count--; 			} 		} 		 		if (count == 0) 			awin[t-1] = 1; 		else if (count>0) 			awin[t-1] = 3; 		else if (count<0) 			awin[t-1] = 0; 		t--; 	} 	for (int i = temp-1; i >= 0; i--) 	{ 		if (awin[i] == 1) 			printf("TIE\n"); 		else if (awin[i] == 3) 			printf("Player 1\n"); 		else if(awin[i] == 0) 			printf("Player 2\n"); 	} 	delete[] awin; 	return 0; } vs2015调试  原来.c也可以用new啊[/quote] 那就改成malloc()和free()嘛。我使用VS2015的C++编译器实现的

引用 2 楼 棉猴的回复:#include<stdio.h> #include<string.h> int main() { 	int t, n, j; 	char a, b, c; 	int count = 0; 	scanf("%d", &t); 	rewind(stdin); 	int *awin = new int[t]; 	int temp = t; 	while (t) { 		count = 0; 		scanf("%d", &n); 		rewind(stdin); 		for (j = 1; j <= n; j++)  		{ 			//if (j != n) 			scanf("%c%c%c", &a, &b, &c); 			rewind(stdin); 			//else 				//scanf("%c%c%c", &a, &b, &c); 			if (a == 'R')  			{ 				if (c == 'R') 					count += 0; 				else if (c == 'S') 					count++; 				else 					count--; 			} 			else if (a == 'S')  			{ 				if (c == 'S') 					count += 0; 				else if (c == 'P') 					count++; 				else 					count--; 			} 			else  			{ 				if (c == 'P') 					count += 0; 				else if (c == 'R') 					count++; 				else 					count--; 			} 		} 		 		if (count == 0) 			awin[t-1] = 1; 		else if (count>0) 			awin[t-1] = 3; 		else if (count<0) 			awin[t-1] = 0; 		t--; 	} 	for (int i = temp-1; i >= 0; i--) 	{ 		if (awin[i] == 1) 			printf("TIE\n"); 		else if (awin[i] == 3) 			printf("Player 1\n"); 		else if(awin[i] == 0) 			printf("Player 2\n"); 	} 	delete[] awin; 	return 0; } vs2015调试  原来.c也可以用new啊

#include<stdio.h> #include<string.h> int main() { int t,n,j; char a,b,c; scanf("%d",&t); while(t){     int count=0;     scanf("%d\n",&n);     for(j=1;j<=n;j++){         if(j!=n)         scanf("%c%c%c\n",&a,&b,&c);         else         scanf("%c%c%c",&a,&b,&c);         if(a=='R'){             if(c=='R')                 count+=0;             else if(c=='S')                 count++;             else                 count--;                  }         else if(a=='S'){             if(c=='S')                 count+=0;             else if(c=='P')                 count++;             else                 count--;                  }         else{             if(c=='P')                 count+=0;             else if(c=='R')                 count++;             else                 count--;                 }        }        if(count==0)            printf("TIE\n");        else if(count>0)            printf("player 1\n");        else if(count<0)            printf("player 2\n");        t--;        } return 0; }


Question: 哈夫曼编码算法的实现

感觉很复杂，而且这不是一个问题，这是一个小项目，从0-100

引用 3 楼 千梦一生 的回复：引用 2 楼 m0_46059288 的回复:[quote=引用 1 楼 千梦一生 的回复：]加油，填充字数？是问题描述的不太清楚吗？ 就我个人而言： 1.对我来说较为复杂，且有一定难度。帮不到你，所以给你加油。 2.我在想，求助的东西是否有点多，当然我也认为，你这个问题如果能·开价到400分想来有几较大率有大神愿意稍微帮你写一些吧。 3.感觉像是一个作业，应该自己多写写代码，有问题了、或者错了再问。对自己有提升，也省了"大神们"的时间 [/quote]奥 是这个意思 谢谢你 我第一次来对积分啥的还不太清楚呃

引用 2 楼 m0_46059288 的回复:引用 1 楼 千梦一生 的回复：加油，填充字数？是问题描述的不太清楚吗？ 就我个人而言： 1.对我来说较为复杂，且有一定难度。帮不到你，所以给你加油。 2.我在想，求助的东西是否有点多，当然我也认为，你这个问题如果能·开价到400分想来有几较大率有大神愿意稍微帮你写一些吧。 3.感觉像是一个作业，应该自己多写写代码，有问题了、或者错了再问。对自己有提升，也省了"大神们"的时间

引用 1 楼 千梦一生 的回复：加油，填充字数？是问题描述的不太清楚吗？

加油，填充字数


Question: 用c语言写下面这个伪代码

求大家帮帮忙


Question: 求教！求教！

#include<stdio.h>  int main() { 	int a1 = 0, a2 = 0, a3 = 0; 	char ch; 	while ((ch = getchar()) != '\n') 		switch (ch) 		{ 		case'A':a1++; 			break;//-------添加break--------- 		case'B':a2++; 			break;//-------添加break--------- 		default:a3++; 			break;//-------添加break--------- 		} 	printf("%d,%d,%d", a1, a2, a3); 	return 0; } VS2015调试结果

是不是忘了break，没有break，前面对的话后面语句全部执行一遍的哦


Question: 求解


Question: c语音题目

指针指向字符串的开头，判断指针的指向的字符是不是字母，即a-z,A-Z,如果是，打印出来，不是略过，指针++

在线，急 急 急

#include <stdio.h> #include <stdlib.h> #include <string.h>     char *de_space(char* src) {     char *ret = src;     char *dst = src;     while (*src) {         if (*src != ' ')             *dst++ = *src;         src++;     }     *dst = '\0';       return ret; }     int main(void) {     char str[128];     fgets(str, 128, stdin);     printf("%s", de_space(str));     return 0; } 在这个基础上改吧。  排序，建议楼主自己写一下～


Question: 求大佬快来看看，救救萌新吧！！！

想了好久了，写写断断，写不下去了，才来发帖的

自己先写写啊，一个循环，一个判断，一个乘积就解决了

别沉啊！！！！！！！！

急需啊！！！！！！！！

引用 4 楼 qq_46058551 的回复:想了好久了，写写断断，写不下去了，才来发帖的 int main() {     int n;     int sum = 1;     printf("输入大于0的整数：\n");     scanf("%d", &n);       while (n)     {         if (n%7 == 0)         {             sum *= n;         }         n--;     }     if (sum == 1)         printf("无");     else         printf("乘积:%d", sum);     return 0; }


Question: C语言：首先输入正整数N,然后循环输入N个随机整数,请将前面输入的整数序列里偶数从小到大排在前面,奇数从小到大排在后面然后输出在屏幕上。

求过程大佬帮个忙吧

先进行整体排序，然后依据bit0进行基数排序（这个要求稳定），分出奇偶序列，再将奇数序列逆序，然后输出奇偶序列。

#include <stdio.h> #include <stdlib.h> //排序函数 int cmpfunc (const void * a, const void * b){    return ( *(int*)a - *(int*)b ); }  int main(){ 	int n = 0; 	int i; 	printf("请输入一个大于零的整数N：\n"); 	scanf("%d", &n); 	int * arr = (int *)malloc(sizeof(int) * n); 	printf("请输入%d个数字\n",n); 	for(i = 0; i < n; i++){ 		scanf("%d", arr + i); 	} 	qsort(arr, n, sizeof(int), cmpfunc);//排序函数 	for(i = 0; i < n; i++){ 		if(arr[i] % 2 == 0){ 			printf("%d ", arr[i]); 		} 	} 	for(i = n-1; i >= 0; i--){ 		if(arr[i] % 2 != 0){ 			printf("%d ", arr[i]); 		} 	} 	free(arr); 	return 0; }


Question: 大佬们求帮忙 在线等有些急

顶顶顶 别沉了

大佬们求帮忙别沉了

求过程 大佬们帮帮忙

用rand函数或者srand函数，循环n次获取随机数，存放到数组里面，判断数组里面的元素是否有重复，重复的只取一个，放到另外一个数组中，最后输出那个数组就行


Question: 求大佬帮助！萌新不会 求个正确答案参考

在线等 挺急的

求解答！！！！

uint32_t 就是 unsigned int

我也给你一个 int main(int argc, const char* argv[]) {     uint32_t total_count = 0;     uint32_t input_count = 0;     uint32_t even_count = 0;     uint32_t tmp = 0;      uint32_t i = 0, j = 0, k = 0;     printf("Please input the total Num:\n");      scanf("%d", &total_count);     uint32_t *p = (uint32_t *)malloc(total_count*sizeof(uint32_t));     uint32_t *result = (uint32_t *)malloc(total_count*sizeof(uint32_t));     if (NULL == p)     {         goto out;     }     if (result == p)     {         goto out;     }      while(total_count > input_count){         printf("Please enter the %d value:\n", input_count+1);         scanf("%d", p+input_count);         ++input_count;     }      printf("This Num List : ");     for (; i < total_count; i++)     {         printf("%d ", *(p + i));     }     printf("\n");      //sort     for (i = 0; i < total_count; i++)     {         for (j = i; j < total_count; j++)         {             if (*(p+i) > *(p+j))             {                 tmp = *(p+j);                 *(p+j) = *(p+i);                 *(p+i) = tmp;                 break;             }         }     }      printf("This Sort Num List : ");     for (i = 0; i < total_count; i++)     {         printf("%d ", *(p + i));     }     printf("\n");      j = total_count - 1;     k = 0;     for (i = 0; i < total_count; i++)     {         if ((0 != *(p+i)%2) || (*(p+i) == 1))         {             *(result+j--) = *(p+i);         }else{             *(result+k++) = *(p+i);         }     }      printf("This Result Num List : ");     for (i = 0; i < total_count; i++)     {         printf("%d ", *(result + i));     }     printf("\n");   out:     if (NULL != p)     {         free(p);     }     if (NULL != result)     {         free(result);     }     return true;  }

你要的答案： #include <stdio.h> #include <stdlib.h> //排序函数 int cmpfunc (const void * a, const void * b){    return ( *(int*)a - *(int*)b ); }  int main(){ 	int n = 0; 	int i; 	printf("请输入一个大于零的整数N：\n"); 	scanf("%d", &n); 	int * arr = (int *)malloc(sizeof(int) * n); 	printf("请输入%d个数字\n",n); 	for(i = 0; i < n; i++){ 		scanf("%d", arr + i); 	} 	qsort(arr, n, sizeof(int), cmpfunc);//排序函数 	for(i = 0; i < n; i++){ 		if(arr[i] % 2 == 0){ 			printf("%d ", arr[i]); 		} 	} 	for(i = n-1; i >= 0; i--){ 		if(arr[i] % 2 != 0){ 			printf("%d ", arr[i]); 		} 	} 	free(arr); 	return 0; }


Question: 大佬快来看看

别沉啊！！！

大佬们快来看一下咋做

别沉啊！！！！


Question: C语言主函数

这个track(80)；语句就是我写的看进了哪个分支，结果，都没进

添加打印语句啊，看看变量值，进了哪个分支

是都没有进

这么多的if，你可以调试看看哪个分支会进，哪个分支不进

中间的if判断的语句直接被跳过了

track(80); 							delay_ms(500); 							if(Zigbee_Rx_flag ==1&&Zigbee_RxZt_flag==0)	 //zigbee返回信息 								{ 									delay_us(5); 									if( (Zigb_Rx_Buf[1]==0x03) || (Zigb_Rx_Buf[1]==0x0c)) // 道闸 或 ETC 									{ 										 											if(Zigb_Rx_Buf[2]==0x01) 											{ 													if(Zigb_Rx_Buf[3]==0x01) 													{													 															Stop_Flag=Zigb_Rx_Buf[4] ;	  // 05 车道道闸完成  06 ETC 															Zigbee_Rx_flag =0; 															cs=1;//                   ETC 															track(80); 															delay_ms(500); 															track(80); 														 													} 													else Zigbee_Rx_flag =0; 											} 											else Zigbee_Rx_flag =0; 									} 									else if(Zigb_Rx_Buf[1]==0x21)	 //第一组数据 									{ 											C_Tab[2]=Zigb_Rx_Buf[2]; 											C_Tab[3]=Zigb_Rx_Buf[3]; 											C_Tab[4]=Zigb_Rx_Buf[4]; 											C_Tab[5]=Zigb_Rx_Buf[5]; 											//flag3 = 1; 									} 									else if(Zigb_Rx_Buf[1]==0x22)	 //第二组数据 									{ 											C_Tab[6]=Zigb_Rx_Buf[2]; 											C_Tab[7]=Zigb_Rx_Buf[3]; 											C_Tab[8]=Zigb_Rx_Buf[4]; 											C_Tab[9]=Zigb_Rx_Buf[5]; 											flag3 = 1; 									} 									else if(Zigb_Rx_Buf[1]==0x06) 									{ 											if(Zigb_Rx_Buf[2]==0x01) 											{ 													Stop_Flag=Zigb_Rx_Buf[3] ;	  // 语音芯片状态返回 													Zigbee_Rx_flag =0; 											} 											else Zigbee_Rx_flag =0; 									} 									else Zigbee_Rx_flag =0; 									Zigbee_Rx_flag =0;									  								}		 								track(80);

老规矩，上代码呗！


Question: c语音题目

指针 判断是否是特殊字符 保存到新的数组 排序

引用 2 楼 自信男孩 的回复:#include <stdio.h> #include <stdlib.h> #include <string.h>   char *de_space(char* src) {     char *ret = src;     char *dst = src;     while (*src) {         if (*src != ' ')             *dst++ = *src;         src++;     }     *dst = '\0';      return ret; }   int main(void) {     char str[128];     fgets(str, 128, stdin);     printf("%s", de_space(str));     return 0; } 根据这个改一下吧。这个自定义函数是去掉空格，那么楼主可以把 if (*src != ' ')判断改成其他。比如if (!isalpha(*src)) 另外，排序，楼主可以用冒泡，选择做一下排序即可～


Question: 三重回文数

超范围了。  int 32最大也是9位数，1000的立方就是9位数了。 改成long int 去做吧


Question: 各位大佬们！这题怎么做，在线等，挺急的

引用 4 楼 自信男孩 的回复:[quote=引用 3 楼 宾灬 的回复:] 仅作参考:  #include <stdio.h> #include <stdlib.h>   int main(){     int num = 0;     int i = 0;     int j = 0;     while (num < 2)     {           printf("请入输入一个大于2的整数n:\n");           scanf("%d", &num);           if(num < 2){               printf("非法数字，请重新输入\n");           }     }     int * arr = (int *)calloc(num, sizeof(int));      printf("请输入%d个数字\n", num);     for( i = 0; i < num; i++){         scanf("%d", arr + i);     }     printf("输入结果:\n");     for( i = 0; i < num; i++){         printf("%d ", arr[i]);     }     printf("\n请输入一个整数sum:\n");     int sum = 0;     scanf("%d", &sum);     printf("和为%d的组合有:\n", sum);     for( i = 0; i< num - 1; i++){         for(j = i + 1; j < num; j++){             if(sum == arr[i] + arr[j]){                 printf("%d - %d\n", arr[i], arr[j]);             }         }     }     free(arr);     return 0; } #include <stdio.h> #include <stdlib.h>  int main(){     int num, sum, tmp;     int i, j;      while (num < 2)     {         printf("请入输入一个大于2的整数n:\n");         scanf("%d", &num);         if(num < 2){             printf("非法数字，请重新输入\n");         }     }     int *arr = (int *)calloc(num, sizeof(int));      printf("请输入%d个数字\n", num);     for( i = 0; i < num; i++){         scanf("%d", arr + i);     }     printf("输入结果:\n");     for( i = 0; i < num; i++){         printf("%d ", arr[i]);     }     printf("\n请输入一个整数sum:\n");     scanf("%d", &sum);      printf("和为%d的组合有:\n", sum);     for( i = 0; i< num - 1; i++) {         tmp = sum - arr[i];         for(j = i + 1; j < num; j++)             if (tmp == arr[j])                 break;         if (j < num)             printf("%d - %d\n", arr[i], arr[j]);     }     free(arr);     return 0; } 供参考～  求差值也是可以的～[/quote]  #include <stdio.h> #include <stdlib.h>  int main(){     int num = 0, sum, tmp;   //初始化num     int i, j;      while (num < 2)     {         printf("请入输入一个大于2的整数n:\n");         scanf("%d", &num);         if(num < 2){             printf("非法数字，请重新输入\n");         }     }     int *arr = (int *)calloc(num, sizeof(int));      printf("请输入%d个数字\n", num);     for( i = 0; i < num; i++){         scanf("%d", arr + i);     }     printf("输入结果:\n");     for( i = 0; i < num; i++){         printf("%d ", arr[i]);     }     printf("\n请输入一个整数sum:\n");     scanf("%d", &sum);      printf("和为%d的组合有:\n", sum);     for( i = 0; i< num - 1; i++) {         tmp = sum - arr[i];         for(j = i + 1; j < num; j++)             if (tmp == arr[j])                 break;         if (j < num)             printf("%d - %d\n", arr[i], arr[j]);     }     free(arr);     return 0; }

引用 3 楼 宾灬 的回复:仅作参考:  #include <stdio.h> #include <stdlib.h>   int main(){     int num = 0;     int i = 0;     int j = 0;     while (num < 2)     {           printf("请入输入一个大于2的整数n:\n");           scanf("%d", &num);           if(num < 2){               printf("非法数字，请重新输入\n");           }     }     int * arr = (int *)calloc(num, sizeof(int));      printf("请输入%d个数字\n", num);     for( i = 0; i < num; i++){         scanf("%d", arr + i);     }     printf("输入结果:\n");     for( i = 0; i < num; i++){         printf("%d ", arr[i]);     }     printf("\n请输入一个整数sum:\n");     int sum = 0;     scanf("%d", &sum);     printf("和为%d的组合有:\n", sum);     for( i = 0; i< num - 1; i++){         for(j = i + 1; j < num; j++){             if(sum == arr[i] + arr[j]){                 printf("%d - %d\n", arr[i], arr[j]);             }         }     }     free(arr);     return 0; } #include <stdio.h> #include <stdlib.h>  int main(){     int num, sum, tmp;     int i, j;      while (num < 2)     {         printf("请入输入一个大于2的整数n:\n");         scanf("%d", &num);         if(num < 2){             printf("非法数字，请重新输入\n");         }     }     int *arr = (int *)calloc(num, sizeof(int));      printf("请输入%d个数字\n", num);     for( i = 0; i < num; i++){         scanf("%d", arr + i);     }     printf("输入结果:\n");     for( i = 0; i < num; i++){         printf("%d ", arr[i]);     }     printf("\n请输入一个整数sum:\n");     scanf("%d", &sum);      printf("和为%d的组合有:\n", sum);     for( i = 0; i< num - 1; i++) {         tmp = sum - arr[i];         for(j = i + 1; j < num; j++)             if (tmp == arr[j])                 break;         if (j < num)             printf("%d - %d\n", arr[i], arr[j]);     }     free(arr);     return 0; } 供参考～  求差值也是可以的～

急求！！！！！！！

不要沉了呀！！！


Question: 大佬们这题怎么做

全手写，作为参考： #include <stdio.h> #include <stdlib.h> #include <string.h> #define BUF_SIZE 20 // 缓冲区大小 // 字符串结构体 typedef struct my_string{ 	char * arr; 	int length; }MyString;  /**  *从控制台输入字符串  *@param str 结构体指针  */ void input_str(MyString * str){ 	int buf_len = BUF_SIZE; 	char * buf = (char *)malloc(buf_len * sizeof(char)); //分配内存 	int len = 0; // 字符串长度 	char c; 	while((c = getchar()) != '\n'){ 		buf[len++] = c; 		if(len >= buf_len - 1){ 			buf_len = buf_len + buf_len / 2; 			buf = (char *)realloc(buf, buf_len); // 重新分配内存 		} 	} 	buf[len] = '\0'; // 字符串结束位 	str->arr = buf; 	str->length = len; 	 } /**  *输出字符串到屏幕  *@param str 结构体指针  */ void print_str(MyString * str){ 	printf("长度:%d\n内容:%s\n", str->length, str->arr); } /**  *输出字符串到文件  *@param str 结构体指针  *@param file_path 文件路径  */ void out_put_to_file(MyString * str, const char* file_path){ 	 	FILE * f = fopen(file_path, "w"); 	fwrite(str->arr, sizeof(char), str->length, f);//将缓冲区的内容写入到文件 	fclose(f); } /**  *从文件读取字符串到结构体  *@param str 结构体指针  *@param file_path 文件路径  */ void input_from_file(MyString * str, const char* file_path){ 	int buf_len = BUF_SIZE; // 从文件读取的缓冲区大小 	int arr_len = buf_len; // 保存字符串的内存大小 	 	char * buf = (char *)malloc(buf_len * sizeof(char)); //分配缓冲区 	char * arr = (char *)malloc(arr_len * sizeof(char)); //分配内存 	FILE * f = fopen(file_path, "r"); // 打开文件 	int read_len; // 本次读取的字符串长度 	int total_len = 0; // 总长度 	while(!feof(f)){ 		read_len = fread(buf, sizeof(char), buf_len, f); // 从文件读到缓冲区 		memcpy(arr + total_len, buf , read_len); // 从缓冲区拷贝到字符串内存中 		total_len += read_len; // 总长度++ 		if(!feof(f)){//没读完 			arr_len += buf_len; //扩充字符串内存大小 			arr = (char *)realloc(arr, arr_len); // 重新分配内存 		} 	} 	arr[total_len] ='\0';// 字符串结束位 	fclose(f); 	free(buf); //释放缓冲区 	str->arr = arr; 	str->length = total_len; } /**  *释放内存  *@param str 结构体指针  */ void free_my_string(MyString* str){ 	free(str->arr); } int main(){ 	 MyString str; 	 input_str(&str); // 输入字符串 ：中文 空格 English 都可以。...回车结束输入 	 printf("输出到屏幕:\n"); 	 print_str(&str); //输出到屏幕 	  	 printf("输出到文件:\n"); 	 out_put_to_file(&str, "D:\\mystring.txt"); // 输出到文件 	  	 free_my_string(&str); 	  	 printf("从文件输入:\n"); 	 input_from_file(&str, "D:\\mystring.txt"); 	 print_str(&str); //输出到屏幕 	 free_my_string(&str); 	 return 0;  }

直接贴代码吧～


Question: 关于线性表抽象数据结构指针问题

非常感谢！我去复习一下c语言。

引用 5 楼 PLAYSWIM 的回复:[quote=引用 1 楼 suifengsanjin的回复:]要不百度下引用和指针？ 我c基础有点差，谢谢解答。[/quote]就我来说指针和引用看自己喜好，差异部分的话主要指针可以是空指针，但是引用肯定会有一个实例 具体看看这个https://blog.csdn.net/superwangxinrui/article/details/80565594

引用 1 楼 suifengsanjin的回复:要不百度下引用和指针？ 我c基础有点差，谢谢解答。

引用 3 楼 自信男孩的回复:楼主是说的函数调用还是函数定义。调用是需要加& 这是大话数据结构里面的代码，我主要是搞不懂为什么他有些要加指针有些不加指针，作者也没有细说。

楼主是说的函数调用还是函数定义。调用是需要加&

我也希望它能百度出来呀

要不百度下引用和指针？


Question: 求指导

没有语法错误，主要是你的代码要实现什么功能呢？ VS2015调试结果


Question: 大家帮忙看下有什么错误

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

double 类型对应 lf格式才对

引用 3 楼 寻开心的回复:double 类型对应 lf格式才对 对，谢谢前辈，对了，还有一个问题就是假如我最开始定义变量为double类型的话，每一步的数据还用加float吗？

有%F吗？应该是%f

有%F吗？应该是%f


Question: 关于字符型数组

《C++Primer中文版第五版》中提到，"IH\0"叫做字符串字面值，C++编译器在每个字符串字面值的结尾处添加一个空字符“\0”，因此字符串字面值的实际长度比它的内容多1。所以"IH\0"的长度不是3而是4，在VS2015中，char a[3] = "IH\0";会报错，要把代码修改为 char a[4] = "IH\0"; 此时，数组a的内容是  可以看到有两个“00”,其中第一个是内容中的“\0”，第二个是编译器自动添加的“\0”

引用 1 楼 user-3 的回复:4个字节，有的编译器编译不过3个字节 标准C编译器都能通过编译

char a[3] = "IH\0"; char不能省略 别随便写 char a[3] 和 a[3] 意思完全不一样   char a[3] 那么必然是 3个字节 不用有疑问 至于这个初始化  C语言里面不会再额外加 0  C++里面 这是错误

4个字节，有的编译器编译不过


Question: Devc++运行显示与win10的64位操作系统不兼容

别问了，就是360的锅，编译运行的时候退掉360就行，sb360还把我编的c++程序当病毒处理

我遇到了和你一样的问题不管是Dcv还是codeblack都报这个错，然后我就把昨天在codeblack之后用过的软件清了一遍缓存，然后重启就好了，我估计还是有哪个软件需要卸载

综合网上各种意见，不是DEV的问题，建议删除360和TX的各种软件试下（QQ可以不删除，主要是安全类的）


Question: Keil如何找开GitHub下载的项目?


Question: 蓝桥杯dev5.4.0版本运行代码提示16位不兼容

引用 3 楼 與蘤舊縐的回复:[quote=引用 2 楼 My dream. 的回复:] [quote=引用 1 楼 liups的回复:]有人说：删除数字和字母家的软件，特别是安全相关的就OK了 没懂啥意思能解释一下吗？[/quote]  你直接到360软件库里找一个dev 数字和字母可不背这个黑锅 这是你的dev将你的程序编译成了16位的程序，win10运行的至少得32位，应该是软件初始设置有点问题，怎么设置不太清楚，重装即可，现在网上找的到的dev也用不着管什么新旧了，都是老古董[/quote] 我这个是蓝桥杯官网软件打开直接用的，去网上找个新的用着用着还是这样。。。

我以前整理的   https://blog.csdn.net/qq_42363032/article/details/103551990  希望会帮到你

6楼的方法可以解决了吗我试了可以用！

引用 3 楼 與蘤舊縐 的回复:[quote=引用 2 楼 My dream. 的回复:] [quote=引用 1 楼 liups的回复:]有人说：删除数字和字母家的软件，特别是安全相关的就OK了 没懂啥意思能解释一下吗？[/quote]  你直接到360软件库里找一个dev 数字和字母可不背这个黑锅 这是你的dev将你的程序编译成了16位的程序，win10运行的至少得32位，应该是软件初始设置有点问题，怎么设置不太清楚，重装即可，现在网上找的到的dev也用不着管什么新旧了，都是老古董[/quote] dev c++没有16位的编译器，所以是不可能编译成16位的，只有32和64位！ 另外，windows在这里是SB，比如曾经碰到过一个非exe文件只是改名为exe它就报这样的错！

谢谢，好了！但是现在运行代码程序自动更改分辨率为680了怎么办那？而且dev页面布局也乱了

重装是让你换个安装包装，另外文件路径和名称中不要有中文

引用 2 楼 My dream. 的回复:[quote=引用 1 楼 liups的回复:]有人说：删除数字和字母家的软件，特别是安全相关的就OK了 没懂啥意思能解释一下吗？[/quote]  你直接到360软件库里找一个dev 数字和字母可不背这个黑锅 这是你的dev将你的程序编译成了16位的程序，win10运行的至少得32位，应该是软件初始设置有点问题，怎么设置不太清楚，重装即可，现在网上找的到的dev也用不着管什么新旧了，都是老古董

引用 1 楼 liups的回复:有人说：删除数字和字母家的软件，特别是安全相关的就OK了 没懂啥意思能解释一下吗？

有人说：删除数字和字母家的软件，特别是安全相关的就OK了


Question: 求解最好是c语言


Question: 为什么老是显示系统找不到指定的文件

你的工程中有个目录是e.c是不是有问题，你是不是把目录和程序名搞错了

error就是错误，warning是警告你可能有逻辑方面的问题

引用 1 楼 user-3的回复:楼主都不看底下的error和warning吗？ 不太懂，就是程序有错误也是这样吗

楼主都不看底下的error和warning吗？


Question: C语言虚心请教

意思是x y z都是float，它们之间的运算结果有可能会超出float所能表示的范围，建议你用double类型


Question: 计算4人平均实发工资

p<p+4这里也有问题，语法上看没啥，但是<作为指针去操作会出错，你可以用你的i去控制个数

如果想加一个结构体内部的数，应该这样：sum+=p->money

sum=sum+p;这是什么？p是一个指针。。。。

cpp:18 error:invalid conversion form "SALARY*" to int. cpp:20 error:invalid conversion form "SALARY*" to int. cpp:22 error:invalid operands of types "int" and "SALARY*" to binary "operator"


Question: 帮帮忙！感谢

每个 ∑符号就是一个循环  以第一个∑为例，就是 for （ i=a； i<=100;  i++ ）｛  ｝ 多个∑串联就是循环的嵌套 for ( i=a; i<=100; i++ ) {       for ( j=i; j<=100; j++ ) {              。。。。。。       } } 这样嵌套i，j，k，l四重循环 最终的结果数据很大，int 才9位装不下， 用long int来计算吧。


Question: x code控制台输出不了中文

引用 1 楼 寻开心 的回复：没办法 xcode控制台只记录了按键， 没有记录输入法转换回来的中文  你可以把中文复制粘贴进去，那样还可以输出 自己直接用中文输入法输入的就是不行  没有啥好办法呢。 存在了很久问题了好的 感谢


Question: 错误主要是fun函数，编译没问题，就是运行不了。求助大佬。

为什么要用p和p1？直接通过a引用数组元素不行吗？这样用法也不对

引用 3 楼 xian_wwq的回复:同意一楼，看个示例  void func(int array[3][10]) {      change_array(array[0], 10);      change_array(array[1], 10);      change_array(array[2], 10);  使用数组名称就可以操作数组内部的元素 增加指针不是自行增加复杂度吗？ 谢谢，初学者，学校要求，没办法啊

引用 2 楼 棉猴的回复:void fun(int a[4][4]) { 	int i, j, k = 1, temp; 	int *p1 = a[0]; 	int **p = &p1; 	for (i = 0; i<3; i++) 	{  		for (j = k; j<4; j++) 		{ 			temp = *((*p + i*4) + j); 			*((*p + i  * 4) + j) = *((*p + j  * 4) + i); 			*((*p + j  * 4) + i) = temp; 		} 		k++; 	} } VS2015调试  请参考《C++中二维数组与指针》 《C++中对数组名的运算》 《C++中函数的数组形参》 希望能够帮到你！ 谢谢，初学者，感谢指教

引用 1 楼 user-3的回复:为什么要用p和p1？直接通过a引用数组元素不行吗？这样用法也不对 初学者，谢谢指教，不知道正确格式。


Question: 提问！！！恳请大家帮我看看这个题目

没看到哪段代码统计了字符数啊？

引用 2 楼 自信男孩 的回复:#include<stdio.h> #include<string.h> #include <ctype.h>  int alpha_cnt, digit_cnt, space_cnt, other_cnt, total_cnt; void merge_sort(char *a, char *b, char *c);  void sort(char x[]) {     int len, i, j;     char temp;     len = strlen(x);     for(i=0;i<len-1;i++)         for(j=0;j<len-i-1;j++)             if (x[j]>x[j+1])             {                 temp = x[j]; x[j] = x[j + 1]; x[j + 1] = temp;             } }   int main() {     FILE *fp;     char a[21], b[21], c[41];     /*     int lena, lenb;     int sum=1;     int ch;     int number = 0;     int character = 0;     int space = 0;     int total = 0;     char *pa, *pb, *pc;     */     if((fp=fopen("A2.txt","r"))==NULL)     {         printf("can't open file A2\n");         return 1;     }     while(fgets(a,21,fp)!=NULL)     {         printf("the content of file A2:");         printf("%s\n", a);     }     fclose(fp);     if((fp=fopen("B2.txt","r"))==NULL)     {         printf("can't open file B2\n");         return 1;     }     while(fgets(b,21,fp)!=NULL)     {         printf("the content of file B2:");         printf("%s\n", b);     }     sort(a);     sort(b);      /*     lena = strlen(a);     lenb = strlen(b);     pa = a; pb = b; pc = c;     while (pa <= a + lena - 1 && pb <= b + lenb - 1)     {         if (*pa <= *pb)             *pc++ = *pa++;         else *pc++ = *pb++;         sum++;     }      while (pa <= a + lena - 1) {         *pc++ = *pa++;         sum++;     }      while (pb <= b + lenb - 1) {         *pc++ = *pb++;         sum++;     }     */     merge_sort(a, b, c);     printf("digit: %d, alpha: %d, other: %d\n", digit_cnt, alpha_cnt, other_cnt);     return 0; }  void merge_sort(char *a, char *b, char *c) {     int lena, lenb;     char *pa, *pb, *pc;      lena = strlen(a);     lenb = strlen(b);     pa = a; pb = b; pc = c;     while (pa <= a + lena - 1 && pb <= b + lenb - 1)     {         if (*pa <= *pb)             //*pc++ = *pa++;             *pc = *pa++;         else             //*pc++ = *pb++;             *pc = *pb++;         if (isdigit(*pc))             digit_cnt++;         else if (isalpha(*pc))             alpha_cnt++;         else if (isspace(*pc))             space_cnt++;         else             other_cnt++;         total_cnt++;         pc++;     }      while (pa <= a + lena - 1) {         *pc = *pa++;         if (isdigit(*pc))             digit_cnt++;         else if (isalpha(*pc))             alpha_cnt++;         else if (isspace(*pc))             space_cnt++;         else             other_cnt++;         total_cnt++;         pc++;     }      while (pb <= b + lenb - 1) {         *pc = *pb++;         if (isdigit(*pc))             digit_cnt++;         else if (isalpha(*pc))             alpha_cnt++;         else if (isspace(*pc))             space_cnt++;         else             other_cnt++;         total_cnt++;         pc++;     }  } 供参考～  注意一下fgets会将'\n'放到缓存里。你好！感谢你的回答，我把完整的代码贴出来了，可不可以请你帮我在源代码的基础上修改呀，感谢~

不好意思，代码没有复制完全，完整的在下面 #include<stdio.h> #include<string.h> void sort(char x[]) { int len, i, j; char temp; len = strlen(x); for(i=0;i<len-1;i++) for(j=0;j<len-i-1;j++) if (x[j]>x[j+1]) { temp = x[j]; x[j] = x[j + 1]; x[j + 1] = temp; } } int main() { FILE *fp; char a[21], b[21], c[41]; int lena, lenb; int sum=1; int ch; int number = 0;         int character = 0;         int space = 0;         int total = 0; char *pa, *pb, *pc; if((fp=fopen("A2.txt","r"))==NULL) { printf("can't open file A2\n"); return 1; } while(fgets(a,21,fp)!=NULL) { printf("the content of file A:"); printf("%s\n", a); } fclose(fp); if((fp=fopen("B2.txt","r"))==NULL) { printf("can't open file B2\n"); return 1; } while(fgets(b,21,fp)!=NULL) { printf("the content of file B2:"); printf("%s\n", b); } sort(a); sort(b); lena = strlen(a); lenb = strlen(b); pa = a; pb = b; pc = c; while (pa <= a + lena - 1 && pb <= b + lenb - 1) { if (*pa <= *pb) *pc++ = *pa++; else *pc++ = *pb++; sum++; } while (pa <= a + lena - 1) *pc++ = *pa++; while (pb <= b + lenb - 1) *pc++ = *pb++;         *pc = '\0'; if((fp=fopen("C2.txt","w"))==NULL) { printf("can't open file C2\n"); return 1; } fputs(c, fp); fclose(fp); if((fp=fopen("C2.txt","r"))==NULL) { printf("can't open file C2\n"); return 1; } while (fgets(c,41,fp)!=NULL) { printf("the content of file C2:"); printf("%s\n", c); } while(ch= fgetc(fp) != EOF)         {                 if(ch>=48 &&ch<=57)//数字的ASCII码                 {                          number++;                 }         if((ch>=65&&ch<=90) || (ch>=97&&ch<=122))//字母的ASCII码         {             character++;         }         if(ch == 32)//空格的ASCII码         {             space++;         }         total++;         } printf("数字 = %d 字母 = %d 空格 = %d 字符数 = %d\n",number,character,space,total); printf("文件C2中包含的字符数：%d\n",sum); return 0; }


Question: git提交规范 Angular规范，大家能分享一些实例吗？我写的的对吗？

实例：  docs(changelog): update changelog to beta.5 fix(release): need to depend on latest rxjs and zone.js   The version in our package.json gets copied to the one we publish, and users need the latest of these. feat的修改  feat(影响论坛的相关模块):增加点赞功能  （这里是空行）  论坛跟帖增加点赞功能，增加用户体验……  （这里是空行）  解决了名字ID冲突bug        fix的提交  fix(影响论坛的相关模块):修改点赞的bug  （这里是空行）  修改点赞大拇指颜色不变红的bug……  （这里是空行）  close #2143   test的提交  test:增加测试并发登录  （这里是空行）  增加测试并发登录的代码，并发用户量可以设置   docs的提交  docs:增加工程说明文档  （这里是空行）  怎加工程说明文档 《xxxxx工程说明.doc》   ……           revert 有特殊的格式  # head: revert: <要被撤销的commit的head> # body: This reverts commit <commit-hash>. # eg: 	revert: docs add README.md 	This reverts commit a2d04c0b914785e4ff0cdf4baeea84d8611c7a61.     原文链接：https://blog.csdn.net/bandaoyu/article/details/103587113


Question: 求大神改进

原题的意思是只要包含留的都要举手

改了发出来啊！！！！！

if(i%6==0&&i%10==6) 这个去掉吧。前面已经有对i% 6， i %10判断了，这里又是一个else

改了，但是与原题还是有区别

赶紧改吧，还在那里发愣干嘛

这是原题，大家看能改进下吗

3.10个人围成一圈玩“跳过6”的游戏:从其中一人开始,从1开始报数一直到100.如某遇到6的倍数(如12,42等),报数的人要喊“跳过”通到含有6的数字(如16,61)报数的人不能出声且要举手;遇到既是6的倍数又含有6的数字(如6,60等),报数的人不出声且要起立,模拟这个戏的过程,并给出每个人报的数字或动作

写的有问题，永远不可能有“起立” %30 为条件 起立 else  %6为条件 跳过 else %10 为条件 举手

最后一个else之后if都要全部去掉，并且printf里面的i有什么用呢？


Question: 二叉树一道难题快来看看

引用 6 楼 Pure?sky的回复:[quote=引用 5 楼 起个昵称就叫“啥”的回复:][quote=引用 4 楼 Pure?sky 的回复:] [quote=引用 1 楼 起个昵称就叫“啥”的回复:]自己写一写吧，写多少算多少 但是我不知道怎么后序遍历输入[/quote]你是想说后序输出吧 你写的输出是先序遍历  先序遍历：若二叉树为空，则空操作；否则 （1）访问根结点； （2）先序遍历左子树； （3）先序遍历右子树。 用伪码表示： void PreOrder（T）//T是树根 { if（T为空）return； 访问T的元素； PreOrder（T的左子树）； PreOrder（T的右子树）； } 后序遍历：若二叉树为空，则空操作；否则 （1）后序遍历左子树； （2）后序遍历右子树； （3）访问根结点。 void PostOrder（T）//T是树根 { if（T为空）return； PostOrder（T的左子树）； PostOrder（T的右子树）； 访问T的元素； }[/quote] 后序遍历输入呀，你看看题目[/quote] 想请教一下大佬，我不怎么会

引用 5 楼 起个昵称就叫“啥”的回复:[quote=引用 4 楼 Pure?sky 的回复:] [quote=引用 1 楼 起个昵称就叫“啥”的回复:]自己写一写吧，写多少算多少 但是我不知道怎么后序遍历输入[/quote]你是想说后序输出吧 你写的输出是先序遍历  先序遍历：若二叉树为空，则空操作；否则 （1）访问根结点； （2）先序遍历左子树； （3）先序遍历右子树。 用伪码表示： void PreOrder（T）//T是树根 { if（T为空）return； 访问T的元素； PreOrder（T的左子树）； PreOrder（T的右子树）； } 后序遍历：若二叉树为空，则空操作；否则 （1）后序遍历左子树； （2）后序遍历右子树； （3）访问根结点。 void PostOrder（T）//T是树根 { if（T为空）return； PostOrder（T的左子树）； PostOrder（T的右子树）； 访问T的元素； }[/quote] 这个是用后序遍历输入，如然后输出先序

引用 5 楼 起个昵称就叫“啥”的回复:[quote=引用 4 楼 Pure?sky 的回复:] [quote=引用 1 楼 起个昵称就叫“啥”的回复:]自己写一写吧，写多少算多少 但是我不知道怎么后序遍历输入[/quote]你是想说后序输出吧 你写的输出是先序遍历  先序遍历：若二叉树为空，则空操作；否则 （1）访问根结点； （2）先序遍历左子树； （3）先序遍历右子树。 用伪码表示： void PreOrder（T）//T是树根 { if（T为空）return； 访问T的元素； PreOrder（T的左子树）； PreOrder（T的右子树）； } 后序遍历：若二叉树为空，则空操作；否则 （1）后序遍历左子树； （2）后序遍历右子树； （3）访问根结点。 void PostOrder（T）//T是树根 { if（T为空）return； PostOrder（T的左子树）； PostOrder（T的右子树）； 访问T的元素； }[/quote] 后序遍历输入呀，你看看题目

引用 4 楼 Pure?sky 的回复:[quote=引用 1 楼 起个昵称就叫“啥”的回复:]自己写一写吧，写多少算多少 但是我不知道怎么后序遍历输入[/quote]你是想说后序输出吧 你写的输出是先序遍历  先序遍历：若二叉树为空，则空操作；否则 （1）访问根结点； （2）先序遍历左子树； （3）先序遍历右子树。 用伪码表示： void PreOrder（T）//T是树根 { if（T为空）return； 访问T的元素； PreOrder（T的左子树）； PreOrder（T的右子树）； } 后序遍历：若二叉树为空，则空操作；否则 （1）后序遍历左子树； （2）后序遍历右子树； （3）访问根结点。 void PostOrder（T）//T是树根 { if（T为空）return； PostOrder（T的左子树）； PostOrder（T的右子树）； 访问T的元素； }

引用 1 楼 起个昵称就叫“啥”的回复:自己写一写吧，写多少算多少 但是我不知道怎么后序遍历输入

题目是前序输出，但样例输入是后序的话，样例输出却是中序。

引用 1 楼 起个昵称就叫“啥”的回复:自己写一写吧，写多少算多少 #include <stdio.h> #include <malloc.h> typedef struct Node {     char root;     struct Node *lchild,*rchild; } BiTNode,*BiTree; BiTree CreateBiTree()//先序建树 {     BiTree T;     char ch;     if((ch = getchar() )== '.')         return 0;     else     {         T = (BiTNode*)malloc(sizeof(BiTNode));         T->root = ch;         T->lchild = CreateBiTree();         T->rchild = CreateBiTree();         return T;     } } void postorder(BiTree T)//后序输出 {     if(T)     {	printf("%c",T->root); 	          		postorder(T->lchild);         postorder(T->rchild); 		printf("%c",T->root);         	     } } int main() {     BiTree T = NULL;     T = CreateBiTree();     postorder(T);     printf("\n");     return 0; }

自己写一写吧，写多少算多少


Question: 学生成绩管理系统，排序和总分不会弄，求帮助

引用 1 楼 自信男孩的回复:for (i = 0; i < n; i++)     for (j = 0; j < n - 1 - i; j++)         if (stu[j].num > stu[j+1].num) {             stu_temp = stu[j];     xxxx;     xxxx;  } 改成这样试试。xxxx的地方自己补充吧。  j = 0从0开始，j-1不就越界了吗？ 我写出来了，蟹蟹你啊


Question: 程序设计 c语言 电话号码管理

自己写写，不会的再问，没有人会闲到替别人写作业的


Question: 分函数定义空型无法运行

引用 4 楼 user-1的回复:C++严格要求函数要先声明才能调用，C比较宽松一点 是的，我把main函数放到最后面就ok了

C++严格要求函数要先声明才能调用，C比较宽松一点

已解决，把main放到最后面就行了

为什么cpp不能运行？

文件后缀cpp改成c就能运行了


Question: 奇怪的输出，输出同一个字符串，主函数和被调用的函数输出却不一样

十分感谢各位 我已经懂了 结贴了

没问题呢，楼主的分函数是把s1的字符串追加到s后面了。  #include <stdio.h>  void removeSpace(char *s) {     int i;     char s1[81], *tmp = s;      for(i=0;*s!='\0';s++)     {         if(*s!=' ')             {s1[i]=*s;             i++;}     }     s1[i]='\0';     s = tmp;     for(i=0;s1[i]!='\0';i++)     {         s[i]=s1[i];     }     s[i]='\0';     printf("分函数=%s\n",s); }  int main() {     char s[81];     fgets(s, 81, stdin);     removeSpace(s);     printf("主函数=%s", s);     return 0; }   这样再试试~

倒数第四行的是空字符，不是空字符串，打错了

空字符，不是空字符串，打错了

你主函数里面调用被调函数，传进去的是s[81]这个数组的首元素地址，也就是s[0]的地址，而不是数组名s。你在你的被调函数中创建了形参s接受s[0]的地址指向s[0]，这个s是另外一个指针，不过与main中的数组名s同名而已你被调函数中第一个循环的更新表达式s++，修改了s指针所指的位置，指向了主调函数中s[81]数组中的空字符串，之后加上去掉空格的字符串，最后加上一个空字符，形成一个新的字符串。而你主函数中打印的是从数组名开始打印的，你数组名指向的始终是s[0]，没变过，也不能变

引用 1 楼 寻开心的回复:把奇怪，你在被调用函数里面修改了s的值，printf的时候s已经不是传参进来时候的s了 简单的验证方法， 改一下你的两个printf语句如下： printf("%p: %s", s, s);  第一个参数是把指针输出出来，第二个是输出的指针指向的内容 对比地址就可以看到，其实两个s不是同一个东东 十分感谢 我还想请教一下，那为什么主函数会输出的是本来的s加上被调用函数的s呢


Question: 编程题

int i, sum = 0; for ( i = 1; i < n; i += 2) {     sum += i; }

#include<stdio.h> int func(int k) { 	if(k<=1) 	{ 		return 0; 	} 	int sum,i; 	sum=0; 	for(i=1;i<=k;i++) 	{ 		if(i%2) 		{ 			printf("--%d\n",i); 			sum+=i; 		} 	} 	return sum; } int main() { 	int x; 	scanf("%d",&x); 	x=func(x); 	printf("%d\n",x); 	return 0; }


Question: 影碟信息管理系统

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

参考博客： https://blog.csdn.net/Donald_Shallwing/article/details/99734501?utm_source=app

只要代码的话，你还是跪着吧       要代码的百度，或者找猪八戒外包去


Question: 新手寻求帮助

引用 1 楼 寻开心的回复:union A {    int n;    unsigned char c[4]' } a; a.n = 0x01020304;  for ( I=0; I<4; I++ )     printf("%x", a.c[I]);  借助union共享内存， 你就可以研究出来n里面数字字节高低放置的顺序了  sum & 0xFF  对于32bits的int类型来说， 它等价于 sum & 0x000000FF  就是取它的最低位，因为高位都是0了（&位运算符自己了解一下去） 谢谢大佬指点，太感谢了


Question: c语言基础学习，求大佬推荐学习书籍

随便一本c教程都可以用，只要不是错误百出的，各大正规出版社的书都是可以的  多做练习才是关键  语言都是基础， 就和学外语背单词学语法一样， 如何学好还不是多说学写多练  而且语言也只是基础工具， 研究算法数据结构的才是正途，  在做这些练习当中逐步熟悉和完善技巧去


Question: C中赋值的奥秘？？？

（x， x--） 在另外一个帖子里面，问了这个问题吧  while（x， x--） 就是 while（x--）  第一个x屁用没有

&&运算短路了，即&&前面的表达式为假，则整个表达式都是假，&&后面就不会判断，也就不会执行了。 因此i = 0; z = 2了。

引用 3 楼 寻开心 的回复：i=x<!y&&(z=10)>y;   这里&&判断在 x<!y 不成立的时候就自动返回了，并不执行 &&后面的代码 y是4， !y 是0，  x<0 是不成立的，所以 i是0谢谢🙏

引用 1 楼 與蘤舊縐 的回复：int main return 0  &&前面那个false之后不会再判断后面的，z=10压根没执行请问：while（x,x - -)这个是什么意思？

引用 1 楼 與蘤舊縐 的回复：int main return 0  &&前面那个false之后不会再判断后面的，z=10压根没执行谢谢大佬🧍♂


Question: 输入一种动物并输出数量，没有就输出0，为啥我的程序一直崩溃？

#include <stdio.h> #include <string.h>  typedef struct {     char name[10];     int num; }ANIMAL;  int main(void) {     ANIMAL cc[10]={{"大象",3},{"猴子",52},{"斑马",6},{"羚羊",11},{"老虎",4},{"狮子",7},{"黑熊",2},{"猩猩",6},{"狼",17},{"豹",4}};     int i;     char t[16];     ANIMAL *p;     printf("输入动物：");     scanf("%s",t);     printf("\n");     for(p = cc;p<cc+10;p++)     {         if(strcmp(p->name,t)==0)         {             printf("该动物的数量：%d\n",p->num);             break;          }     }     if (p >= cc + 10)         printf("该动物的数量：0\n");      return 0; } 供参考～  楼主的else应该放在函数外; t应该定成数组～

t的定义应该是跟name一样才对

引用 1 楼 user-2的回复:t是字符，能当做字符串来输入吗？不崩溃才怪呢 那请问我应该怎么修改呢？

t是字符，能当做字符串来输入吗？不崩溃才怪呢


Question: 请问，运行出来是这样是什么原因？

printf("\n");     for(j=0;j<N;j++)         for(i=0;i<N-j-1;I++.  如果是 I<N-j 那么当j是0的时候，  后续的 j+1最大就是N越界了， 结果就不一定是什么东西了


Question: 求大神解答，哭了

引用 楼主 qq_46055174的回复:一、作业内容 某班学生某学期学习了如下课程：高等数学（5学分）、C语言程序设计（3.5学分）、体育（2学分）、英语（3学分）、中国革命史（2学分），需对学生的考试成绩进行统计分析，编程实现如下功能： （1）成绩的录入； （2）根据考试成绩计算每位学生的总分、平均分、学分，每门课程考试合格（>=60分）则取得该门课程的学分，否则该门课程的学分为0； （3）将平均分按照分数段进行统计； （4）实现查找功能，例如输入某学生的学号，能够显示其所有信息； （5）按学分进行排序； 二、要求 （1）至少用函数实现一个或多个功能； （2）根据功能需求设计程序的结构； 我会附上程序的，还请不要吐槽，新手小白

再继续哭吧  这里不提供原码   如果你只想要原码的话   你可以自己做， 出了问题贴上代码来，会有人帮你改正 。 只要原码的话，还是继续哭去吧


Question: 问题

就这么点破数据，为啥不都读入进来放到一个数组里面， 要哪个显示哪一个就是啦。  否则， 先要3，再要0， 文件指针来回跑以便定位， 那是闲的蛋疼  非要蛋疼的话，你是可以 先fopen后获得文件指针不关闭它 输入一个序号 fseek定位到序号*5的位置，%5d的格式读取数据 每次都要先fseek定位文件读取的位置


Question: 指针小白在线求救

有个小东西，要注意一下     *p+1 和 *（p+1） 是不同 但是 *p++ 和 *（p++）可是一样的  为啥，为啥？  差异在于 * 和 ++ 是同一个优先级， 而++ 的优先级高于 +

引用 5 楼 于扬鑫的回复:而你说的5是这个地址上的值，也就是a[4]的值 取一个指针所指的地址上的值需要加*取内容运算符 哦哦哦，懂了(￣∀￣)，谢谢

其他的没错，最后一个是 指针移动4个该指针所指的存储空间 也就是说p+4是个指针，现在指向a[4]这个存储空间的首字节地址，所以p+4是个地址，具体值是你的计算机此时分配给a[4]的地址

......最后一个是错的，你可以跑下看看是什么，然后想想为什么

引用 1 楼 suifengsanjin的回复:*p + 4 = (*p) + 4 先取值再+4 *（p+4） 先把指针移动再取值 *p += 3  => (*p) = (*p) +3 p+4 指针移动4 那结果是5 5 4 5么？