Question: 这段代码什么意思？

引用 2 楼 sweetswing 的回复:"%d%*c"  *c是什么意思？乘以C?直接百度 scanf 就能看到解释了

"%d%*c"  *c是什么意思？乘以C?

把輸入的字符串從第7個字符之後輸出

引用 楼主 sweetswing 的回复:# include <stdio.h> char str[15] ; int main () {     int n ;     scanf ("%d%*c", &n) ;     while (gets(str))         printf ("6%s\n", str+6) ;     return 0 ;     getchar(); }  作者想到达什么目的？ 排除数字后面的字母到字母终止读入，表达的意思就是防止无效输入字母

Format Specification Fields: scanf and wscanf Functions A format specification has the following form:  % [width] [{h | l | I64 | L}]type  The format argument specifies the interpretation of the input and can contain one or more of the following:   White-space characters: blank (' '); tab ('\t'); or newline ('\n'). A white-space character causes scanf to read, but not store, all consecutive white-space characters in the input up to the next non–white-space character. One white-space character in the format matches any number (including 0) and combination of white-space characters in the input.   Non–white-space characters, except for the percent sign (%). A non–white-space character causes scanf to read, but not store, a matching non–white-space character. If the next character in stdin does not match, scanf terminates.   Format specifications, introduced by the percent sign (%). A format specification causes scanf to read and convert characters in the input into values of a specified type. The value is assigned to an argument in the argument list.  The format is read from left to right. Characters outside format specifications are expected to match the sequence of characters in stdin; the matching characters in stdin are scanned but not stored. If a character in stdin conflicts with the format specification, scanf terminates, and the character is left in stdin as if it had not been read.  When the first format specification is encountered, the value of the first input field is converted according to this specification and stored in the location that is specified by the first argument. The second format specification causes the second input field to be converted and stored in the second argument, and so on through the end of the format string.  An input field is defined as all characters up to the first white-space character (space, tab, or newline), or up to the first character that cannot be converted according to the format specification, or until the field width (if specified) is reached. If there are too many arguments for the given specifications, the extra arguments are evaluated but ignored. The results are unpredictable if there are not enough arguments for the format specification.  Each field of the format specification is a single character or a number signifying a particular format option. The type character, which appears after the last optional format field, determines whether the input field is interpreted as a character, a string, or a number.   The simplest format specification contains only the percent sign and a type character (for example, %s). If a percent sign (%) is followed by a character that has no meaning as a format-control character, that character and the following characters (up to the next percent sign) are treated as an ordinary sequence of characters, that is, a sequence of characters that must match the input. For example, to specify that a percent-sign character is to be input, use %%.  An asterisk (*) following the percent sign suppresses assignment of the next input field, which is interpreted as a field of the specified type. The field is scanned but not stored.


函数调用和函数声明以及定义是不一样的。函数调用不能再加上返回值类型。去掉case 后面的void

函数调用不要加返回值类型。。。

case 1: search_book();break; 后面一样，调用的时候不能带函数类型定义


Question: C语言课程设计

目的：培养学生综合利用C语言进行程序设计的能力，主要是培养学生利用系统提供的标准函数进行创新设计。 写，遇到问题再问不迟

引用 1 楼 user-1的回复:hh，我会，这跟你不会可没什么关系 救救孩子吧，呜呜呜

hh，我会，这跟你不会可没什么关系


Question: 改错题！

cin和std::string是c++的. 纯C的话用下面的。 由于gets没有上限，使用时得保证空间足够大，以保证读取是不会溢出。 由于可以无限读取，所以在2011年12月，ANSI 采纳了 ISO/IEC 9899:2011 标准，标准中删除了 gets()函数，使用一个新的更安全的函数gets_s()替代

错误1, gets的缓冲大小是否足够, 建议用cin>>string 错误2.fun的n如果超过了a[80]的长度or char s[]长度异常处理没有做. 错误3. fun 的p没有初始化直接拿来用. 感觉手误，应该是p=s; 错误4: do while的i没有清零. i的[]操作注意越界

是p=s不是s=p

直接贴代码吧，能不贴图还是不建议贴图。

引用 1 楼 自信男孩的回复:直接贴代码吧，能不贴图还是不建议贴图。 谢谢你！能给我讲下这道题吗？我真的没办法了


Question: 求教指针

引用 4 楼 Italink的回复:[quote=引用 2 楼 李小龙的传人 的回复:] [quote=引用 1 楼 Italink的回复:]while(*p)p++；结束之后p执行末尾字符的下一个位置，也就是终止字符'\0',如果你不p--,那么会输出终止符 又是你啊，兄弟，怎么还要十个字[/quote] hhh，缘分呐[/quote] 怎么结贴帖啊，…………

#include <stdio.h> #include <string.h>  int main() {     char s[100];     char *p = s;     printf("input a string:");     gets(s);     while(*p)         p++;      //上面的操作之后,p指向'\0'，p--是为了让p指向邮箱字符串的末尾     p--;      while(p>=s)     {         printf("%c",*p);         p--;     }     putchar(10);      return 0; } 供参考～

手机怎么没有…………

电脑上，帖子右上角有结贴

引用 2 楼 李小龙的传人 的回复:[quote=引用 1 楼 Italink的回复:]while(*p)p++；结束之后p执行末尾字符的下一个位置，也就是终止字符'\0',如果你不p--,那么会输出终止符 又是你啊，兄弟，怎么还要十个字[/quote] hhh，缘分呐

引用 2 楼 李小龙的传人 的回复:[quote=引用 1 楼 Italink的回复:]while(*p)p++；结束之后p执行末尾字符的下一个位置，也就是终止字符'\0',如果你不p--,那么会输出终止符 又是你啊，兄弟，怎么还要十个字[/quote] 别人给你回答了，你满意就结贴，又。。。结贴率0%

引用 1 楼 Italink的回复:while(*p)p++；结束之后p执行末尾字符的下一个位置，也就是终止字符'\0',如果你不p--,那么会输出终止符 又是你啊，兄弟，怎么还要十个字


Question: 这个程序流程图怎么画

你是不会还是懒得去做？ 这么简单的程序用visio标准流程图自己画画就行了 引用 2 楼 lslaw 的回复:引用 1 楼 user-1 的回复：输入->处理->输出可以大概画个草图吗

引用 1 楼 user-1 的回复：输入->处理->输出可以大概画个草图吗

输入->处理->输出


Question: 如图

判断结构体中num是否等于0.


Question: 一个很简单的程序，但是为什么会出现这个问题呢？能帮我解答一下吗？在线等，急急急

https://blog.csdn.net/monster_2495/article/details/7730165  http://www.voidcn.com/article/p-dxasvtge-tb.html 供参考～


Question: 求大神帮忙做一个储存信息模块，就是下次打开了之前储存的信息还在。

https://blog.csdn.net/smwhotjay/article/details/78319172 你这个功能叫做 序列化/反序列化

引用 1 楼 待续_1006的回复:1简单点，数据写到文件里面，下次打开读取文件 2 数据库 怎样写到文件里呢？

1简单点，数据写到文件里面，下次打开读取文件 2 数据库


Question: 新人求解啊？

问题已经解决了，是我没有重新赋值p

👀完，我想删贴，也不会。


Question: 求帮助

建议论坛推出一个旋转图片的功能。


Question: 求解c语言

引用 1 楼 user-1的回复:给分能行？这要给红包的 行啊，万事好商量，只要能帮我解决问题

行啊，万事好商量

给分能行？这要给红包的


Question: 求助！

自定义数据类型实现长整数的加法运算


Question: 求助 c语言 文件 结构体

百度下，“序列化和反序列化”

全部功能都正常，就是文件是单独子函数形式，文件要怎么改啊！


Question: 嵌入式设计求个思路

嵌入式的课设，要求在uc/os嵌入式系统里用c需要设计……

这个跟嵌入式有关系？


Question: 请问各位大佬

理解和讨论之前请先学会如何观察！ //char (*(*x[3])())[5];//x是什么类型的变量? // //分析C语言声明，关键是搞清楚这个变量是个什么东西（函数、指针、数组）， //是函数那么剩下的就是他的参数和返回值， //是指针那剩下部分是说明他指向什么， //是数组剩下的部分就是说明数组的成员是什么类型。 //解析C语言声明规则： //从左侧第一个标识符开始，按照优先级进行结合。*表示是..的指针，const表示只读的，volatile表示可变的，[]表示是数组，()表示是函数。 // //x和[3]结合说明是一个大小为3的数组，该数组的每个元素为一类指针，该类指针指向一类函数，该类函数无参数，返回一类指针，该类指针指向一个大小为5的char型数组 #include <stdio.h> #include <typeinfo.h> char num[5]; char (*x00())[5] {     return # } int main() {     char (*(*x[3])())[5];//是个数组，大小为3     char (*(*x0  )())[5];//数组的元素，是个函数指针     char (*( x00 )())[5];//函数原型，参数为空，返回值为指针     char (*  x000   )[5];//返回值      x0 = x00;     x[0] = x0;     x[1] = x0;     x[2] = x0;     printf("typeid(x).name() is %s\n",typeid(x).name());     return 0; } //typeid(x).name() is char (* (__cdecl**)(void))[5]

（1）对指针 p 的赋值语句只能是 「 p = max ; 」，p 可以作为左值被赋值，而 *p 不能被赋值所以不能作为左值。 （2）后面使用函数指针 p 的时候 ， 可以是 (*p)(a,b) 也可以直接使用 p(a,b) ， 看习惯和喜好。你看的书上写 (*p)(a,b) 只是作者的喜好吧，或者是想提醒 p 是一个函数指针，而不是函数。

救救孩子吧..


Question: 求助一个编程题

和的公式： (2^(n-1)*(10^n-1))/3。n为位数 #include <iostream> #include <math.h>  using namespace std; int main() {         int S = 0;         for(int i = 1;i<=3;i++)         {                 S += (pow(2,i-1)*(pow(10,i)-1))/3;         }         cout<<"和为："<<S<<endl;         return 0; }


Question: 结构体小试

引用 2 楼 自信男孩的回复:没看出代码中对num用错的地方，确认一下你的编译代码和你贴出来的代码是否完全一致 确认是一样的  我截得屏

也许是每个人习惯不同吧

第一次见到将函数声明放在main里面的。是我少见多怪了？？

引用 1 楼 user-3的回复:要么就是没有这个变量，要么就是写错了变量。估计你把name写成了num 我将这个变量放在struct student  里的

要么就是没有这个变量，要么就是写错了变量。估计你把name写成了num


Question: 萌新入门

引用 1 楼 user-5的回复:我觉得你应该找个老师 我也有想过去培训班，但是现在的培训班多数都是为了应付应聘，心凉

引用 3 楼 qq_45026299的回复:推荐清华大学出版的《C程序设计教程》作为入门教材，它里面的内容不像其他书那么晦涩难懂，都是一些十分基础的东西，适合作为入门书籍，建议边学边做当中例题。之后如果还想深入学习C，就可以看看《C语言经典编程282例》这本书。另外提一下，本人也正在学C语言，关键还是得坚持。 对的，做什么事都要坚持下去，所谓学无止境。

引用 5 楼 赵4老师的回复:关于自己是否适合编程的很简单的测试： 在报纸或杂志上随便找一段约1000字的文章，在Word中输入一遍。输完后再参考下面答案：  A里面有10处以上文字或标点错误 B里面没有文字或标点错误并敢为此跟人打赌 C里面没有文字或标点错误并且字体和排版完全与原稿一致 D打印在半透明的纸上和原稿重叠在一起检查一模一样，且自我感觉很有成就感  A不适合编程（理由：打字准确度偏低、粗心大意） B初级程序员（理由：打字准确度很高、认真细致、自信、理解全角半角概念） C高级程序员（理由：在B的基础上理解字体和排版也是电脑打印的重要因素、但相比D还不够偏执、精益求精、结果可验证） D软件项目经理（理由：能针对项目给出令人信服的细致到极点的需求说明和典型测试用例。用户几乎挑不出毛病。专业！）  如果想从A变成B的话，到我的资源http://download.csdn.net/detail/zhao4zhong1/4084259里面下载“适合程序员的键盘练习” 谢谢！！我会努力的。谢谢你的建议

先搞懂基础的语法 然后再高算法

学个一年半载的肯定就可以了！第一门课程学《汇编语言程序设计》，学好之后所向披靡！不用谢！

我觉得你应该找个老师


Question: 求大佬解答

引用 4 楼 qq_45026299 的回复：是我错了，后面有循环限制的话，n可以任意输入，但不能超过5，建议下标改大些。谢谢解答，共勉

是我错了，后面有循环限制的话，n可以任意输入，但不能超过5，建议下标改大些。

首先，输入字符数组的格式符应该是%s，其次数组的输入地址搞错了，你要输入到数组中，&a[i].name[10]应改为a[i].name，&a[i].num[9]应改为a[i].num。顺便一提，你的人数已经定死了，只能和结构体数组的下标相等，无法做到由用户任意输入。

引用 1 楼 lslaw 的回复：#include<stdio.h> struct student {int score;char name[10];char num[9];}; int main(void) { int n,i; struct student a[5]; printf("输入人数"); scanf("%d",&n); printf("输入姓名，学号，成绩\n"); for(i=0;i<n;i++) { scanf("%d",&a[i].name[10]); scanf("%d",&a[i].num[9]); scanf("%d",&a[i].score); if(a[i].score<=100&&a[i].score>90) printf("优\n"); else if(a[i].score<=90&&a[i].score>80) printf("良\n"); else if(a[i].score<=80&&a[i].score>70) printf("中\n"); else if(a[i].score<=70&&a[i].score>=60) printf("及格\n"); else printf("\n"); } return 0; }想知道这个错哪了


Question: c语言程序改错，急用

引用 5 楼 lslaw 的回复：[quote=引用 4 楼 focuslight 的回复：]void fun(int a, b)  错误主要是这个交换函数， 你想直接传值，调用函数本身不对实参进行操作，也就是说，即使形参的值在函数中发生了变化，实参的值也完全不会受到影响，仍为调用前的值。  你百度一下， 函数传递参数的三种方式，以及它们的区别谢谢[/quote]这个题可以解答一下吗 定义一个学生成绩的结构体数组，编写函数，根据学生成绩给出“优、良、中、及格”的评定“90-100”-优、“80-90”-良，“70-80”-中，“60-70”-及格。

引用 4 楼 focuslight 的回复：void fun(int a, b)  错误主要是这个交换函数， 你想直接传值，调用函数本身不对实参进行操作，也就是说，即使形参的值在函数中发生了变化，实参的值也完全不会受到影响，仍为调用前的值。  你百度一下， 函数传递参数的三种方式，以及它们的区别谢谢

引用 2 楼 lslaw 的回复：[quote=引用 1 楼 focuslight 的回复：]#include   <stdio.h>  #include   <conio.h>  void fun(int *a, int *b)  {    int t;      t = *b;  *b = *a ;  *a = t;  }  void main( )  {    int a, b;      printf("Enter a,b :"); scanf("%d %d", &a, &b);      fun(&a, &b);      printf("a=%d  b=%d\n", a, b);  }大佬，可以给我讲个每个改错点的原因吗[/quote]感激不尽

引用 1 楼 focuslight 的回复：#include   <stdio.h>  #include   <conio.h>  void fun(int *a, int *b)  {    int t;      t = *b;  *b = *a ;  *a = t;  }  void main( )  {    int a, b;      printf("Enter a,b :"); scanf("%d %d", &a, &b);      fun(&a, &b);      printf("a=%d  b=%d\n", a, b);  }大佬，可以给我讲个每个改错点的原因吗


Question: 头文件的内容不能用

引用 1 楼 安锅锅 的回复：datatype被重定义了，去书上找找是什么类型，在结构体前面加一下typedef datatype 类型你的意思是在头文件那前面定义datatype吗？而不是在源程序


Question: 函数在switch语句里运用的问题

贴代码不要贴图

咋贴呀？第一次玩这个，不明白。


Question: 流水灯 通过Uart串口输入点亮顺序和点亮时长 实现。 还要把输入的东西显示到LCD上

求助大神啊啊啊啊啊


Question: 身份证和姓名输入不进去，那里错误了，求改正

exit(0); 	fwrite(passenger,sizeof(passenger[0]),50,fp);   前面exit(0); 这句不执行   fprintf(fp,"%s\n",passenger[c].num);}   你没有给passenger[c].num赋值   else if(a=17)   应该是 else if(a==17)


Question: 没有运行错误，但是不是我要的，c语言的一个课程设计

引用 1 楼 nothing_but的回复:你可以设置断点，单步调试啊，给定一个输入，看看在程序中的运行有哪个地方不符合预期，是不小心写错了还是逻辑处理的问题，总之直接看是没法看的啊 我应该是从一个功能到另一个功能之间出了问题

引用 楼主 qq_44956723的回复://6-车票管理系统  #include<stdio.h> #include<stdlib.h> #include<string.h> #define N 4   void manage();           //管理员界面 void user();             //用户界面  void record();         //录入信息  void  menu();          //菜单  void findsdate();    //查询状态  void findroute();   //查询路线  void book();       //预定车票  void refund();    //退票    struct time 	{ 	  int hour; 	  int minute; 	};  struct infor      //定义汽车信息  { 	int shift;             //汽车的班次  	struct time  start;   //发车时间，输入形式为 08:00  	char spoint[20];     //起始站  	char dest[20];      //终点站 	float hour;        //行车时间 	int num;          //额定数量 	int snum;        //已售数量  	  } infor[N-1] ;   int main() { 	int i; 	while(1) 	{ 	printf("\n\n----------------------------------车票管理系统--------------------------------\n"); 	printf("请选择登入身份\n");  	printf("管理员-----1\n"); 	printf("用户-------2\n"); 	printf("退出-------3\n"); 	scanf("%d",&i); 	if(i!=1&&i!=2&&i!=3) 	printf("输入错误，请重新输入"); 	switch(i) 	{ 		case 1:manage();break; 		case 2:user();break; 	} 	if(i==3) 	printf("谢谢使用！\n"); 	break;  	} }  void manage() { 	while(1) { 	int i; 	printf("请选择要进行的操作：\n");  	printf("录入信息-----1\n"); 	printf("信息查询-----2\n"); 	printf("退出系统-----3\n"); 	scanf("%d",&i); 	if(i!=1&&i!=2&&i!=3) 	printf("输入错误，请重新输入"); 	switch(i)    { 	  case 1:record();break; 		case 2:findsdate();break; 		}   if(i==3) 	printf("谢谢使用！\n"); 	break; 		 	} }	 	 	 void user() {	      printf("*****************************************\n");     printf("*        选择您要进行的操作:            *\n");     printf("*       查询所有班次当前状态----1       *\n");     printf("*           查询汽车路线--------2       *\n");     printf("*             购买车票----------3       *\n");     printf("*             退订车票----------4       *\n");     printf("*             退出系统----------5       *\n");     printf("*****************************************\n");     menu(); 	 }  	  void record()  //录入信息  {    printf("录入班车信息\n输入信息\n");  	printf("班次 发车时间 起点 终点 行车时间 额定载量 已定载量\n");       	int i;      for(i=0;i<N;i++) 	{ 		scanf("%d%d:%d%s%s%f%d%d",&infor[i].shift,&infor[i].start.hour,&infor[i].start.minute, 		                       infor[i].spoint,infor[i].dest,&infor[i].hour, 		                       &infor[i].num,&infor[i].snum);  // 键盘输入信息 	} 	FILE *fp; 	if((fp=fopen("qichexinxi.dat","wb"))==NULL)     	{ 	       printf("文件不存在\n"); 	       exit(0); 	    } 	for(i=0;i<N;i++) 	if(fwrite(&infor[i],sizeof(struct infor),1,fp)!=1) 		printf("文件出错\n"); 		fclose(fp) ; }	   void menu()  //菜单选项  { 	while(1) {   int m;    char c; 	scanf("%d",&m) ; 	if(m<1||m>5) 	printf("输入错误，请重新输入");   switch(m)   switch(m)   { 	case 1:	findsdate(); break;    case 2: findroute(); break;   case 3:  book(); break;   case 4: refund();break;    }   if(m==5) 	printf("谢谢使用！\n"); 	break;  }	   }  void findsdate()//查询状态  {  	int i; 	struct time now; 	printf("请输入时间：\n"); 	scanf("%d:%d",&now.hour,&now.minute);//输入系统时间   	if(now.hour>23||now.hour<0||now.minute>59||now.minute<0)  	 { 	    printf("输入错误，请输入正确时间\n"); 	    getchar(); 	    getchar(); 	 }  else  	for(i=0;i<N;i++)  	  { 	 	if (now.hour<infor[i].start.hour||now.minute<infor[i].start.minute&&now.hour==infor[i].start.hour) 	 	printf("汽车%d未发出\n",i+1); 		 else  		 printf("汽车%d发出\n",i+1);       }       getchar(); 	    getchar(); }  void findroute() { 	 int i; 	 int j; 	 int flag=0; 	 char c1;    printf("请选择查询方式：\n") ;    printf("按班次查询------1\n");    printf("按终点站查询----2\n");    scanf("%d",&i);    if(i!=1&&i!=2)    printf("输入错误，请重新输入\n");    getchar(); 	 getchar();    switch(i)    { 	 case 1: 	          			  	printf("请输入班次：\n");    	      scanf("%d",&j);    	if(j>N)    { 	 printf("输入错误，请重新输入\n");    getchar();    getchar(); 	 }     else printf("班次%d:\t%d%d:%d%s%s%f%d%d",infor[j-1].shift,infor[j-1].start.hour,infor[j-1].start.minute, 		                       infor[j-1].spoint,infor[j-1].dest,infor[j-1].hour, 		                       infor[j-1].num,&infor[j-1].snum);        break;  case 2:      printf("请输入地址:\n"); 		scanf("%s",&c1);     	for(i=0;i<N;i++) 	  {    		if(strcmp(c1,infor[i].dest)==0)   		printf("班次%d:/t%d%d:%d %s %s %f%d%d",i,infor[i].shift,infor[i].start.hour,infor[i].start.minute, 		                       infor[i].spoint,infor[i].dest,infor[i].hour, 		                       infor[i].num,&infor[i].snum);        flag=1; 			} 			if(flag==0) 			printf("未查询到，请重试，谢谢使用!\n"); 			getchar(); 	    getchar();           break;	     } }  void book() { 	int i; 	struct time now;     printf("请输入要订购的车票的班次:");     scanf("%d", &i);     //printf("i=%d\n", i);     if (i < 1 || i > N + 1)     {         printf("对不起，今天没有这趟车，请明天再来，谢谢使用!\n");         getchar();          menu();     }  	  printf("输入当前时间:\n");//输入系统时间  	  scanf("%d:%d",&now.hour,&now.minute); 	  if (now.hour<infor[i-1].start.hour||now.minute<infor[i-1].start.minute&&now.hour==infor[i-1].start.hour)     {         if (infor[i - 1].snum < infor[i - 1].num)         {             (infor[i - 1].snum)++;             printf("你的订票成功，请按时上车，谢谢使用!\n");         }         else 			 printf("对不起，今天的这趟车的票已卖完,请明天再来，谢谢合作!\n");     }     getchar();     menu(); }  void refund() { 	 int i; 	 struct time now;     printf("请输入要退购的车票的班次:");     scanf("%d", &i);     if (i < 1 || i >N + 1)     {         printf("对不起，今天没有这趟车,无法完成退票.谢谢使用!\n");         getchar();          menu();     }     scanf("%d:%d",&now.hour,&now.minute);//输入系统时间  	 printf("当前时间%d:%d",now.hour,now.minute);     if (now.hour>=infor[i-1].start.hour&&now.minute>=infor[i-1].start.minute)         if (infor[i - 1].snum >= 1)         {             infor[i - 1].snum = infor[i - 1].snum-1;             printf("退订车票成功，谢谢使用!\n");         }         else            { 					  printf("对不起,今天的这趟车的票尚未卖出,无法完成退票!\n");             getchar(); 	          getchar(); 	          }      else         { 				printf("对不起，今天的这趟车已发出,无法完成退票!\n");         getchar(); 	      getchar(); 	      }  } if(i!=1&&i!=2&&!=3) printf("输入错误，请重新输入!"); 这里是要重新输入，应该重新进入循环而不是退出if后继续执行下面的switch，所以在if里加continue; if(i!=1&&i!=2&&!=3) {printf("输入错误，请重新输入!");continue;} 后面的也是类似的问题


Question: c语言编程

int max_pos( char str[]){      int pos = 0;      char max_char = 0;      int i = 0;          for( i = 0;  str[ i] != '\0'; i++){          if( max_char < str[ i])              max_char = str[ i];              pos = i;      }      printf("最大的字符是％c\n"，str[ pos]);      printf("最大字符的位置是%d\n", pos + 1);  }

先定义一个tmp［］数组去接要求的数组，来一个for循环求出最大值，就是如果前一个比后一个大就交换位置，循环之后，最后一个元素就是数组的最大值，再来一个for循环，和原数组一个个元素比较，如果等于这个最大值就返回此时是哪个数组，break，就好了，思路就是这样


Question: 矩阵的转置

#include<stdio.h> #define MAX 10 int a[MAX][MAX] = { {1,2,3},{4,5,6} }; int row = 2, col = 3; void swap(int* a, int* b) { 	int temp; 	temp = *a; 	*a = *b; 	*b = temp; } int main() { 	 	int i, j; 	for (i = 0; i < row; i++) { 		for (j = i; j < col; j++) { 			swap(&a[i][j], &a[j][i]); 		} 	} 	swap(&row, &col); 	for (i = 0; i < row; i++) { 		for (j = 0; j < col; j++) { 			printf("%5d", a[i][j]); 		} 		printf("\n"); 	} 	return 0; }


Question: 求解

使用gets读取一行，然后输出  #include<stdio.h> int main() { 	char str[100]; 	gets(str);	//vs用gets_s 	printf("%s", str); 	return 0; }

没看明白你想表达什么需求


Question: 各位大佬，请教一下C语言中字符串的一个小问题。

引用 3 楼 gouyanfen的回复:[quote=引用 楼主 修宿休秀 的回复:] 为什么char a[5]={"china"}与char a[6]={"china"}的效果是一样的，不应该因为存在"\0"的原因，字符数组大小应该是6嘛？而且用sizeof去算字节大小时是6，那么在a[5]这个数组里有没有\0呢？求解释，谢谢！ 记得结贴，不要一直提问不结贴  char a[5]={"china"}是编译通不过的，如果你用的编译器没有检查的话，sizeof大小取决于编译器怎么解释，但是数组里一定有\0,因为这个会首先给字符串"china"分配一个内存，这个内存中就是china\0。然后把这个地址给a[/quote] 抱歉，现在手机客户端无法结帖，晚些时候再结帖！

引用 楼主 修宿休秀 的回复:为什么char a[5]={"china"}与char a[6]={"china"}的效果是一样的，不应该因为存在"\0"的原因，字符数组大小应该是6嘛？而且用sizeof去算字节大小时是6，那么在a[5]这个数组里有没有\0呢？求解释，谢谢！ 记得结贴，不要一直提问不结贴  char a[5]={"china"}是编译通不过的，如果你用的编译器没有检查的话，sizeof大小取决于编译器怎么解释，但是数组里一定有\0,因为这个会首先给字符串"china"分配一个内存，这个内存中就是china\0。然后把这个地址给a

char*字符串需要留一个位置存放终止符\0， sizeof得到的是字节大小（跟你字符串的内容没有任何关系） 字符串长度使用strlen()函数（得到的是第一个字符到终止字符的长度（不含终止字符）） char a[5]={"china"}没有\0，如果你使用%s来输出的话，就会出现错乱（乱码）。 但如果你通过%c逐个输出字符是没问题的

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


Question: 求教C语言问题Googol String

引用 3 楼 user-1的回复:注解在这 https://blog.csdn.net/qq_40946921/article/details/93347548 while(true)这句代码能行吗？反正我不行。最后一次的代码改成了while(1)，终于通过了。不错哦，兄弟

上面发错了  #include<stdio.h> #include<math.h> int find(long long x, long long k) { 	int t = 0; 	while (true) { 		long long mid = ((long long)1 << (x - 1));        //注意此处的数据类型 		if (k == mid) 			return t; 		else if (k > mid) {        //如果在右侧，折半取反 			t = !t; 			k = (mid << 1) - k; 		} 		x--; 	} } int main() { 	int n; 	long long max, k; 	scanf("%d", &n); 	for (int i = 1; i <= n; i++) { 		scanf("%lld", &k); 		max = ceill(log2l(k + 1));        //最多只需要在第log2(k)个字符中查找字符k（注意向上取整以及数据类型） 		printf("case %d:%d\n", i, find(max, k)); 	} 	return 0; }

发现问题了，数据类型不符导致溢出  [code=c]#include<stdio.h> #include<math.h> int find(long long x, long long k) { 	int t = 0; 	while (true) { 		long long mid = ((long long)1 << (x - 1));		//注意此处的数据类型 		if (k == mid) 			return t; 		else if (k > mid) {        //如果在右侧，折半取反 			t = !t; 			k = (mid << 1) - k; 		} 		x--; 	} } int main() { 	int n; 	long long max, k; 	scanf("%d", &n); 	for (int i = 1; i <= n; i++) { 		scanf("%lld", &k); 		max = ceill(log2l(k + 1));        //最多只需要在第log2(k)个字符中查找字符k（注意向上取整以及数据类型） 		printf("case %d:%d\n", i, find(max, k - 1)); 	} 	return 0; } [/code]

引用 3 楼 user-1的回复:注解在这 https://blog.csdn.net/qq_40946921/article/details/93347548 while(true)不能用吧！我改成了while(1)，然后还是时间超限

那可能是因为递归太慢了吧 再不行我也没办法咯  #include<stdio.h> #include<math.h> int find(long long x, long long k) { 	int t = 0; 	while (true) { 		int mid = (1 << (x - 1)); 		if (k == mid) 			return t; 		else if (k > mid) {		//如果在右侧，折半取反 			t = !t; 			k = (mid << 1) - k; 		} 		x--;	 	} } int main() { 	int n; 	long long max, k; 	scanf("%d", &n); 	for (int i = 1; i <= n; i++) { 		scanf("%lld", &k); 		max = ceill(log2l(k + 1));        //最多只需要在第log2(k)个字符中查找字符k（注意向上取整以及数据类型） 		printf("case %d:%d\n", i, find(max, k)); 	} 	return 0; }

引用 1 楼 user-1的回复:这题目也真麻烦的，算是数学题吧，推算老半天（还是不要贴翻译的题目，好多句子有歧义，看半天才看懂题目）  #include<stdio.h> #include<math.h> int find(long long x, long long k) { 	int mid = (1 << (x - 1));		 	if (k == mid)		//如果在中间说明为0 		return 0; 	else if (k < mid)	//如果在左边说明跟上一字符串的同一位置相同 		return find(x - 1, k); 	else 		return !find(x - 1, (mid << 1) - k);	//右边的话就是上一字符串对称位置的反转 } int main(){ 	int n; 	long long max, k; 	scanf("%d", &n); 	for (int i = 1; i <= n; i++) { 		scanf("%lld", &k); 		max = ceill(log2l(k + 1));		//最多只需要在第log2(k)个字符中查找字符k（注意向上取整以及数据类型） 		printf("case %d:%d\n", i, find(max, k)); 	} 	return 0; }   代码提交后超过时间运行上限，这是怎么回事，算法太复杂了？

引用 1 楼 user-1的回复:这题目也真麻烦的，算是数学题吧，推算老半天（还是不要贴翻译的题目，好多句子有歧义，看半天才看懂题目）  #include<stdio.h> #include<math.h> int find(long long x, long long k) { 	int mid = (1 << (x - 1));		 	if (k == mid)		//如果在中间说明为0 		return 0; 	else if (k < mid)	//如果在左边说明跟上一字符串的同一位置相同 		return find(x - 1, k); 	else 		return !find(x - 1, (mid << 1) - k);	//右边的话就是上一字符串对称位置的反转 } int main(){ 	int n; 	long long max, k; 	scanf("%d", &n); 	for (int i = 1; i <= n; i++) { 		scanf("%lld", &k); 		max = ceill(log2l(k + 1));		//最多只需要在第log2(k)个字符中查找字符k（注意向上取整以及数据类型） 		printf("case %d:%d\n", i, find(max, k)); 	} 	return 0; }   不好意思，题目原来是英文，我通过百度翻译得来的中文


Question: 新手求教

呵呵，好像是结贴吧

引用 4 楼 csucxy 的回复：至于你这里为什么会小1，根本原因就是上面大家说的浮点型数据的精度问题。从数学上来看你这个程序可以实现编程目的，但是你将程序做如下调整： #include <stdio.h> int main() {     int time;     scanf("%d", &time);     double f = time / 100.0 - time / 100;     int h = f * 100;     printf("%d\n", h);      return 0; } 在printf那一行前设一中断，运行，假设输入1234，你能发现f的值可能是0.33999999999999986，那么h的值就是33——比预期的就是应该少1。因为：浮点型数据转换为整型时，是直接把小数部分去掉，而不是四舍五入！！！ 其实，以上f丢失的精度并不是很严重。由此可以知道，1、数学上的计算结果与计算机计算的结果不符是完全正常的，2、编程时把简单的问题故意复杂化有时是自找苦吃的。还有，请问一下我要怎么操作把积分给你们吗？

谢谢，求余和改成double结果是对的，这个我已经知道了，我都试了一遍。只是新手，单纯想弄懂为啥那样不行，以免以后再犯。谢谢你的回答

#include <stdio.h>  int main() { 	int t; 	scanf("%d", &t);  	int h = t % 100; 	printf("%d\n", h);  	return 0; } 为什么要整那么复杂呢？

引用 1 楼 user-2 的回复：浮点数有精度问题  #include<stdio.h> int main() { 	int time; 	scanf("%d", &time); 	int h = time - time / 100 * 100; 	printf("%d", h); 	return 0; } 请问精度问题具体可以解释吗？ 因为它不是才到小数点后2位吗？有点不明白


Question: 各位大佬，想问下为什么我返回了c的值，却依旧不成功呢？

C/C++中，实参对形参当然是单向值传递。函数返回值的问题与实参、形参的单向值传递没有关系。如果函数不是void类型，则该函数的函数调用表达式是一个有数据类型和值的表达式，它的值由函数结束调用时的return语句返回。

谢谢各位，我大概知道了，非常感谢！

返回值是返回到调用函数的地方 在这个例子中，就是返回到调用函数fun的地方 本例的返回值为6 返回后，相当于 int a=6; printf("%d", a );  #include<stdio.h> int fun(int a, int b) { int c=a*b;  return c;  }  void main()  {  int  a = fun(2,3);   printf("%d\n",a);  }

引用 3 楼 csucxy的回复:这是所谓作用域与可见性的问题。 这个程序中有一个全局变量c，fun函数有一个形参也是c（也是一个局部变量，与全局变量c是两个完全不同的重名变量） 在函数fun中，根据小范围的屏蔽大范围的原则，形参c全fun函数中将全局变量c屏蔽，即在fun函数中，直接使用变量名c，访问的形参c，而不是全局变量c。 在main函数中，变量名c代表的是全局变量。调用fun时的实参c，其值为0，因为c是全局变量，是静态的，它在没有显示初始化时，会被初始化为0。而形参与实参之间是单向值传递，即函数被调用过程中，形参值的改变不会影响形参，因此，fun的调用，对全局变量c的值没有任何影响。 实参与形参是单向值传递的话，那么在子函数中return 一个值能传给主函数嘛？

实参与形参是单向值传递的话，那么在子函数中return 一个值能传给主函数嘛？

局部变量c 和全局的c冲突了

一句话，你的函数内部的c和你全局的c不是同一个变量  引用 2 楼 修宿休秀 的回复:[quote=引用 1 楼 user-4的回复:]#include<stdio.h>  int c;  int fun(int a,int b,int * c)  {  *c=a*b;  return c;  }  void main()  {  fun(2,3,&c);   printf("%d\n",c);  } 我知道用地址是正确的，可是我的返回了c的值然后输出c的值，这样为啥不行呢？[/quote]

引用 1 楼 user-4的回复:#include<stdio.h>  int c;  int fun(int a,int b,int * c)  {  *c=a*b;  return c;  }  void main()  {  fun(2,3,&c);   printf("%d\n",c);  } 我知道用地址是正确的，可是我的返回了c的值然后输出c的值，这样为啥不行呢？


Question: 第二天  突然感觉指针真的好有魅力呀！

电脑内存或文件内容或传输内容只是一个一维二进制字节数组及其对应的二进制地址； 人脑才将电脑内存或文件内容或传输内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、函数指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……

void swap(int *a, int *b) { int tmp = *a;    *a = *b;     *b = tmp; }

直接操作指针可以实现很多其它语言不方便做到的事情，函数指针做为参数传递，可以实现回调，类用函数指针实现多态之类。灵活性非常强。


Question: 救救孩子的python吧，跪求大神解答

引用 楼主 qq_45286724 的回复:我运行该程序时Python总提示' long' object has no attribute '__getitem__' ，咋回事呢？？ 这孩子不好救了，板块发错了

' long' object has no attribute '__getitem__'  从意思出发，我觉得这个错误不在这段代码里

我写了一个，不知道是不是你要的结果，如下： while True:     print("请输入一个产品编码：")     mystr=raw_input()     if(mystr=="quit"):         break     else:         if mystr[0]=="1":             print("商品在市场，")         else:             print("商品退市了，")         myyear=mystr[2:6]+"年"         mymonth=mystr[6:8]+"月"         myday=mystr[8:10]+"日"         print("商品的出厂日期为："+myyear+mymonth+myday)


Question: C语言

和谐社会，你还真以为有人帮你现场替考？


Question: 我想把指针数组的指向的内存赋给结构体数组元素，但是指针数组存的是地址啊，我懵了。

数组名本来就是首地址呀，C语言里面是没有字符串这种结构的，都是字符数组来存字符串的，所以你这里就是用指针数组存了那几个字符串的首地址呀，如果不是用指针这个数组里面就只能存几个字符而不是几个字符串

重修  -----------------------------------  group[i].ST[10]=*seed[i];	 能取10吗？ 不取10也不对  ST[10]=*seed[i] 说对也不对  ---  struct GP {     char ST[10];     char *STp; };  char *seed[] = {"德  国","西班牙","比利时","巴  西","阿根廷","瑞  士","哥伦比亚","乌拉圭"};  struct GP group[8]; for(i=0;i<8;i++) {     strncpy(group[i].ST, seed[i], 9);      group[i].STp = seed[i];      printf("%s",group[i].ST); }

那你还不如把ST写成指针，另外ST[10]是ST这个字符数组的第十一个元素（char类型），ST是一个char [10]类型的数据，你把一个指针赋给char类型不出错才怪，*seek[i]也是，seek[i]是字符串，加了个*就是字符串的第一个元素等价于seek[i][0] 修改2条语句 char *ST; group[i].ST=seek[i];

#include <stdio.h> #include <string.h> // for strncpy  int main(void) {    struct GP    {       char ST[10];    } group[8];     char *seed[] =    {       "德  国",       "西班牙",       "比利时",       "巴  西",       "阿根廷",       "瑞  士",       "哥伦比亚",       "乌拉圭"    };    int i;    for (i = 0; i < 8; ++i)    {       strncpy(group[i].ST, seed[i], 10); // 拷贝字符串       printf("%s\n", group[i].ST);    }    return 0; }

初学C，基础很弱，求大佬们多说说，谢谢


Question: 哪位大神能把这三道题过程说一下嘛

例如第1题中的 #define Y(n) ((N+1)*n) Y(5+1)时，实际上就是((3+1)*5+1)=21，所以，应该进行如下定义 #define Y(n) ((N+1)*（n)) 第2题也是同样问题

都说了宏就是替换，自己动手替换下就知道了！ 引用 6 楼 weixin_44690524 的回复:[quote=引用 5 楼 宾灬的回复:]第一题： z=2 * (N+Y(5+1)) = 2*(3+(3+1)*5+1) = 48 第二题：d = ADD(a+b)*c=（4+6）+ (4+6) * 7 =  80 第三题：arr[0].y/arr[0].x*arr[1].x = 3/1*2= 6 第二题为啥要这样算啊，我不太理解[/quote]

引用 6 楼 weixin_44690524 的回复:[quote=引用 5 楼 宾灬的回复:]第一题： z=2 * (N+Y(5+1)) = 2*(3+(3+1)*5+1) = 48 第二题：d = ADD(a+b)*c=（4+6）+ (4+6) * 7 =  80 第三题：arr[0].y/arr[0].x*arr[1].x = 3/1*2= 6 第二题为啥要这样算啊，我不太理解[/quote]  用代码中的“a+b” 替换宏定义中的“x”

引用 5 楼 宾灬的回复:第一题： z=2 * (N+Y(5+1)) = 2*(3+(3+1)*5+1) = 48 第二题：d = ADD(a+b)*c=（4+6）+ (4+6) * 7 =  80 第三题：arr[0].y/arr[0].x*arr[1].x = 3/1*2= 6 第二题为啥要这样算啊，我不太理解

引用 3 楼 weixin_44690524 的回复:[quote=引用 1 楼 user-4的回复:]Y(5+1)   展开成  ((3+1)*5+1) 结果自己算 为啥要这样算，不能先把括号里面相加[/quote]  宏只是替换而已，编译前的工作

引用 1 楼 user-4的回复:Y(5+1)   展开成  ((3+1)*5+1) 结果自己算 为啥要这样算，不能先把括号里面相加

ADD(a+b)*c展开  (a+b) + (a+b)*c

Y(5+1)   展开成  ((3+1)*5+1) 结果自己算


Question: 求助 c语言链表知识

这是链表的插入吧？ 在p之后插入s p-＞next=s； p=p-＞next； 上面两句是指要指针指向新插入的节点。


Question: fscanf读文本文件错误

引用 6 楼 user-1 的回复:#include <stdio.h> #include <iostream> #include <cmath> #include <vector> #include <atlstr.h>   struct Points {     double x;     double y;     double z;     int u; }; void main() {     Points po;     std::vector<Points> vec_point1;   //加了这句读取就出问题       int i = 0, j = 0;           FILE *fp1 = NULL;     fp1 = fopen("1.txt", "r+");     if (fp1 == NULL)     {         printf("filedata1 error");  		getchar(); 		exit(0);     }              while (1)     {         fscanf(fp1, "%lf %lf %lf %d", &po.x, &po.y, &po.z, &po.u); 		vec_point1.push_back(po);         if (feof(fp1))            break;              }  	for(i=0;i<vec_point1.size();i++) 	{ 		printf("%lf,%lf,%lf,%d\n",vec_point1.at(i).x,vec_point1.at(i).y,vec_point1.at(i).z,vec_point1.at(i).u);  	} 	getchar();     fclose(fp1); } 我测试了，并没有出现问题，就加了个打开文件错误直接退出 感谢，我知道咋回事了，谢谢您

文本文件格式什么样的，我测试看看

引用 3 楼 user-1 的回复:你定义个临时变量做push_back,和读取的不要用同一个测试一下     Points po,po1;     std::vector<Points> vec_point1;   //加了这句读取就出问题      int i = 0, j = 0;      FILE *fp1 = NULL;     fp1 = fopen("1las1_denoising.xyz", "r+");     if (fp1 == NULL)     {         printf("filedata1 error");      }              while (1)     {         fscanf(fp1, "%lf %lf %lf %d", &po.x, &po.y, &po.z, &po.u);         if (feof(fp1))            break;       memcpy(&po1,&po,sizeof(Points));         vec_point1.push_back(po1);     } 或者单步进入看看是那里出问题了按您说的加上这两句，还是读取错误，而且我发现个奇怪的事情，当不加pushback的时候指针会=null，进入if语句，但是没有命令窗口没有输出“filedata1 error”，而且可以正确读取。当加入pushback的时候，不进入if语句，读取错误。

引用 1 楼 user-1 的回复:是push_back之后出的问题吧，只定义不push_back看有没有问题对是的，我刚刚试了一下，不pushback可以正确读，请问这个怎么解决呢？


Question: 求解，还要求按下按钮流水灯就可以依次点亮

引用 楼主 user-0的回复:这个把T0改成T1  外部中断改成0就不闪烁了，一直保持着常亮 #inc1ude<reg51.h> #define uchar unsinged char#define uint unsigned intuint i; void main()[  i=0; EA=1; ET1=1; TRl=1; TMOD=0x10； THl= (65536-50000)/256 ; TLl= (65536-50000)%256; P2=0X00; while (l) ;  void inte () interrupt 0 i+l; if(i=10)  P2=~P2; i=0;  ) THl= (65536-50000)/256 ; TLl= (65536-50000）% 256;  ｝


Question: 可以帮我写下代码吗？

引用 3 楼 TxyITxs的回复:有什么语言写，需要界面吗，设计到数据库吗？ C语言  只需要写出源代码就行了

引用 2 楼 Reb0uRne 的回复:[quote=引用 1 楼 user-3的回复:]钱给够，很多人会愿意的 大概。。。。。多少呢？[/quote] 你能出多少？我想怎么也能买本数的价格吧

有什么语言写，需要界面吗，设计到数据库吗？

引用 1 楼 user-3的回复:钱给够，很多人会愿意的 大概。。。。。多少呢？

钱给够，很多人会愿意的


Question: DEV C++这个软件调试查看*min *max数据不对，printf输出又是对的

引用 4 楼 六道佩恩 的回复:你这里的max和min是函数minmax里的变量，所以它的值就是个地址值 你要分清楚，你这里两个函数，两个max和min，你的调试窗口显示的是哪一对min和max  我说的市*min和*max这两个值，这两个值在调试那个窗口是固定的*min=1528349827  *max=6422420，每一个循环，*min或者*max会有一个值发生变化，最后一次printf  *max  值是6，但是调试窗口*max=6422420还是不变，输出的值不是应该是调试窗口的值一样才对吗

Visual C++ 2010 Express简体中文版http://pan.baidu.com/s/1bnwRVLt

交换值

引用 1 楼 吖如 的回复:交换值什么意思


Question: 用c语言编写

无聊写了下，仅供参考   #include <string.h> #include <stdio.h> #include <stdlib.h>  #define TEST_CLASS_MAX_NUM (100) #define TEST_STUDENT_MAX_NUM (100)  typedef struct{ 	int iStuID; 	char strStuName[20]; 	char strSex[8]; }T_student;  typedef struct{ 	int iClassID; 	char strClassName[20]; 	int iStuCnt; 	T_student tStu[TEST_STUDENT_MAX_NUM]; } T_class;  typedef struct{ 	int iClassCnt; 	T_class tClass[TEST_CLASS_MAX_NUM]; }T_classList;  static T_classList gs_tClassList;  void func_showMenu() { 	printf("\n\n  同学录管理系统\n"); 	printf("\t1.显示班级列表\n"); 	printf("\t2.增加班级\n"); 	printf("\t3.删除班级\n"); 	printf("\t4.班级同学录入\n"); 	printf("\t5.班级同学删除\n"); 	printf("\t6.显示指定班级同学录\n"); 	printf("\t7.退出\n"); 	printf("\t请输入您的操作选项:"); 	return; }  void func_initClass() { 	int iReadSize = 0; 	FILE *fp = fopen("tongxunlu.dat","rb"); 	if(NULL == fp) 	{ 		printf("tongxunlu.dat is null\n"); 		return; 	} 	 	int iClassCnt = 0; 	 	T_class tClass; 	 	while(1) 	{ 		iReadSize = 0; 		memset(&tClass,0,sizeof(T_class)); 		iReadSize = fread(&tClass,sizeof(T_class),1,fp); 		if(iReadSize <= 0) 		{ 			break; 		}		 		 		memcpy(&(gs_tClassList.tClass[gs_tClassList.iClassCnt]),&tClass,sizeof(T_class)); 		 		gs_tClassList.iClassCnt++; 	} 	 	fclose(fp); 	return; }  void func_showClass() { 	printf("班级总数为%d\n",gs_tClassList.iClassCnt); 	 	int i = 0; 	T_class *ptClass = NULL; 	for(i = 0;i < TEST_CLASS_MAX_NUM;i++) 	{ 		ptClass = &gs_tClassList.tClass[i]; 		if(ptClass->iClassID > 0) 		{ 			printf("班号:%d 班级名称:%s 班级人数:%d\n",ptClass->iClassID,ptClass->strClassName,ptClass->iStuCnt); 		} 	} 	 	return; }  int func_insertClass() { 	T_class tClass; 	memset(&tClass,0,sizeof(T_class)); 	 	printf("请输入班号:"); 	scanf("%d",&(tClass.iClassID)); 	 	if(tClass.iClassID <= 0) 	{ 		printf("iClassID = %d,return\n",tClass.iClassID); 		return -1; 	} 	 	printf("请输入班级名称:"); 	scanf("%s",tClass.strClassName); 	 	int i = 0; 	T_class *ptClass = NULL; 	for(i = 0;i < TEST_CLASS_MAX_NUM;i++) 	{ 		ptClass = &gs_tClassList.tClass[i]; 		if(ptClass->iClassID == tClass.iClassID) 		{			 			printf("此班号%d的班级已存在,请修改\n",tClass.iClassID); 			return -1; 		} 	} 	 	ptClass = NULL; 	for(i = 0;i < TEST_CLASS_MAX_NUM;i++) 	{ 		ptClass = &gs_tClassList.tClass[i]; 		if(ptClass->iClassID == 0) 		{			 			memcpy(ptClass,&tClass,sizeof(T_class)); 				 			gs_tClassList.iClassCnt++; 			return 0; 		} 	} 	 	return -1; }  void func_saveFile() { 	int iReadSize = 0; 	FILE *fp = fopen("tongxunlu.dat","wb"); 	if(NULL == fp) 	{ 		printf("tongxunlu.dat不存在\n"); 		return; 	} 	 	int i = 0; 	T_class *ptClass = NULL; 	for(i = 0;i < gs_tClassList.iClassCnt;i++) 	{ 		ptClass = &gs_tClassList.tClass[i]; 		if(ptClass->iClassID > 0) 		{ 			fwrite(ptClass,sizeof(T_class),1,fp); 		} 	} 	 	fclose(fp); 	 	printf("修改成功\n"); 	 	return; }  int func_deleteClass() { 	int iClassID = 0; 	 	printf("请输入您要删除的班号:"); 	scanf("%d",&iClassID); 	if(iClassID <= 0) 	{ 		printf("iClassID = %d,return\n",iClassID); 		return -1; 	} 	 	int i = 0; 	T_class *ptClass = NULL; 	for(i = 0;i < TEST_CLASS_MAX_NUM;i++) 	{ 		ptClass = &gs_tClassList.tClass[i]; 		if(ptClass->iClassID == iClassID) 		{			 			memset(ptClass,0,sizeof(T_class)); 				 			gs_tClassList.iClassCnt--; 			return 0; 		} 	} 	 	return -1; }  int func_insertStudent() {	 	T_student tStu; 	memset(&tStu,0,sizeof(T_student)); 	 	printf("请输入您添加学生的学号:"); 	scanf("%d",&(tStu.iStuID)); 	 	printf("请输入您添加学生的姓名:"); 	scanf("%s",&(tStu.strStuName)); 	 	printf("请输入您添加学生的性别:"); 	scanf("%s",&(tStu.strSex)); 	 	int iClassID = 0;	 	printf("请输入您添加学生的班号:"); 	scanf("%d",&iClassID);	 	 	if(iClassID <= 0 || tStu.iStuID <= 0) 	{ 		printf("iClassID = %d,tStu.iStuID=%d,return\n",iClassID,tStu.iStuID); 		return -1; 	} 	 	int i = 0; 	T_class *ptClass = NULL; 	for(i = 0;i < TEST_CLASS_MAX_NUM;i++) 	{ 		ptClass = &gs_tClassList.tClass[i]; 		if(ptClass->iClassID == iClassID) 		{			 			break; 		} 	} 	 	if(i == TEST_CLASS_MAX_NUM) 	{ 		printf("此班号%d的班级不存在\n",iClassID); 		return -1; 	} 	 	T_student *ptStu = NULL; 	for(i = 0;i < TEST_STUDENT_MAX_NUM;i++) 	{ 		ptStu = &(ptClass->tStu[i]); 		if(ptStu->iStuID == tStu.iStuID) 		{ 			printf("此学号的学生已存在,请修改\n"); 			return -1; 		} 	} 	 	ptStu = NULL; 	for(i = 0;i < TEST_STUDENT_MAX_NUM;i++) 	{ 		ptStu = &(ptClass->tStu[i]); 		if(ptStu->iStuID == 0) 		{ 			memcpy(ptStu,&tStu,sizeof(T_student)); 			ptClass->iStuCnt++; 			return 0; 		} 	} 	 	return -1; }  int func_deleteStudent() { 	int iStuID = 0; 	printf("请输入您删除学生的学号:"); 	scanf("%d",&iStuID); 	 	if(iStuID <= 0) 	{ 		printf("iStuID=%d,return\n",iStuID); 		return -1; 	} 	 	int i = 0;	 	int j = 0; 	T_class *ptClass = NULL; 	T_student *ptStu = NULL; 	for(i = 0;i < TEST_CLASS_MAX_NUM;i++) 	{ 		ptClass = &gs_tClassList.tClass[i]; 		if(ptClass->iClassID == 0 || ptClass->iStuCnt <= 0) 		{ 			continue; 		} 		 		for(j=0;j<TEST_STUDENT_MAX_NUM;j++) 		{ 			ptStu = &(ptClass->tStu[j]); 			if(ptStu->iStuID == iStuID) 			{ 				memset(ptStu,0,sizeof(T_student)); 				ptClass->iStuCnt--; 				return 0; 			} 		} 	} 		 	return -1; }  void func_showStudent() { 	int iClassID = 0; 	printf("请输入您要显示的班号:"); 	scanf("%d",&iClassID); 	 	if(iClassID <= 0) 	{ 		printf("iClassID = %d,return\n",iClassID); 		return; 	} 	 	int i = 0;	 	int j = 0; 	T_class *ptClass = NULL; 	T_student *ptStu = NULL; 	for(i = 0;i < TEST_CLASS_MAX_NUM;i++) 	{ 		ptClass = &gs_tClassList.tClass[i]; 		if(ptClass->iClassID == iClassID) 		{ 			for(j=0;j<TEST_STUDENT_MAX_NUM;j++) 			{ 				ptStu = &(ptClass->tStu[j]); 				if(ptStu->iStuID == 0) 				{ 					continue; 				} 				printf("学号:%d 姓名:%s 性别:%s 班号:%d\n",ptStu->iStuID,ptStu->strStuName,ptStu->strSex,ptClass->iClassID); 			} 			break; 		} 		 	} 	 	return; }  int main() { 	int iSelect = 0; 	memset(&gs_tClassList,0,sizeof(gs_tClassList)); 	func_initClass(); 	 	int iRet = -1; 	 	do{ 		iRet = -1; 		func_showMenu(); 		scanf("%d",&iSelect); 		if(iSelect <1 || iSelect > 7) 		{ 			printf("您的输入有误.\n"); 			getchar(); 			continue; 		} 		switch(iSelect) 		{ 			case 1: 				func_showClass(); 				continue; 			 			case 2: 				iRet = func_insertClass(); 				break; 				 			case 3: 				iRet = func_deleteClass(); 				break; 			 			case 4: 				iRet = func_insertStudent(); 				break; 			 			case 5: 				iRet = func_deleteStudent(); 				break; 			 			case 6: 				func_showStudent(); 				continue; 				 			case 7: 				break; 			 			default: 				printf("您的输入有误.\n"); 				continue; 		} 		if(iRet == 0) 		{ 			func_saveFile(); 		} 	}while(iSelect != 7); 		 	return 0; }


Question: lcd1602仿真的时候只亮不显示数字，是怎么回事，程序在下边

LCD的屏幕对比度调了吗？


Question: 求大神帮我看看这个语句哪里没结束？

引用 2 楼 Nitrous Oxide 的回复:那应该去哪个区间呀。。。。   难道自己不知道这是啥语言？？  还问这个问题？？

引用 1 楼 user-2的回复:明显不是C语言还来C语言分区问 那应该去哪个区间呀。。。。

明显不是C语言还来C语言分区问


Question: 为啥在linux下运行不起，求大神指点。

引用 3 楼 user-1的回复:linux C++用g++编译，不是gcc 哦哦，好的👌，谢谢

linux C++用g++编译，不是gcc

引用 1 楼 user-1的回复:一大坨编译错误自己解决啊 运行之后说iostream不存在，这个问题应该咋解决啊？不是说iostream在linux中是可以的吗？

一大坨编译错误自己解决啊


Question: 救救孩子，请各位帮忙看一下这道题

很纳闷，自己运行一下不就知道答案了吗？ 都是递归函数，先了解递归的原理。给了你答案能怎么着，下次遇到这样的问题，还是不知道怎么办嘛  17) A；18) A；19) C；20) B;  为啥都是第一行的输出，这个题目本身就有问题吧


Question: 有人帮我改一下错误吗？我怎么找都找不出来

引用 1 楼 Reb0uRne 的回复:代码 不能用的话  私我 just waiting ...

代码 不能用的话  私我


Question: 菜鸟求助指针问题

#include <stdio.h>   int main() {     unsigned char a_count=0;     int arry[10]={0};     int *p=arry;       for(a_count=0;a_count<10;a_count++)     {         (*p)++;         p =p+1;         printf("数组输出=%d\r\n",arry[a_count]);         printf("指针输出*p=%d\r\n",*p);         delay_ms(1000);     }      while(1)     {      } }  供参考～


Question: C语言编码

引用 2 楼 离水的鱼儿的回复:文件名是卡号和身份证号的组合，还是文件内容包含卡号和身份证号？ 包涵卡号和身份证号码

文件名是卡号和身份证号的组合，还是文件内容包含卡号和身份证号？

search(card_id, num);


Question: 分邮票问题

求和除2得到一个数，然后用深搜或广搜找一个距离那个数最近的子集和

srand(time(0)); printf("%d\n", (rand() % 2 == 0) ? 0: 2);


Question: c语言输入读写文件错误，求教...

引用 1 楼 自信男孩的回复:读取操作有问题： 问题1：从文件里读取应该判断fp，文件指针是否到了文件末尾，而不应该是判断链表； 问题2：读取之后放到文件里的地址，不能保证是原来链表中的next指向的地址；  建议把程序做一下修改，改成每次程序运行都从文件里读取，边读边申请链表节点； 即把读取操作从后面的逻辑中去掉，保留写操作； 另外，建议读写只对节点数据部分，next就不要写入/读取了。 那么请问该如何输入，我输入全是乱码


Question: c++语句理解困难

引用 2 楼 user-4 的回复:引用 1 楼 早打大打打核战争 的回复:产生(0, 1]区间的随机浮点数rand返回值最小是 0  对，应该是[0, 1)

1 rand()函数 函数的返回值是产生的伪随机整数。C++中产生的随机数实际上并不是真正的随机，而是伪随机（pseudorandom）。计算机通过C++中的算法从一个起始数（startingpoint）开始计算，最终得到的一个“貌似随机”的整数，即为伪随机整数。而不同的起始数得到的伪随机的整数也是不同的。具体内容请参考《C++中产生随机整数的方法》 2 RAND_MAX常量 MSDN中关于RAND_MAX的描述是 The constant RAND_MAX is the maximum value that can be returned by the rand function. RAND_MAX is defined as the value 0x7fff. RAND_MAX是一个常量，该常量是rand()函数能产生的最大值，该值为0x7FFF。 3 类型转换 在RAND_MAX函数前加double的原因是：rand()函数的返回值是int，RAND_MAX也是int，如果不进行类型转换，那么 rand( )/RAND_MAX; 的值要么是0，要么是1. 而把rand()函数的返回值变为double后， rand( )/(double)RAND_MAX; 以上表达式的值取值就是0~1范围内的所有小数了

引用 3 楼 gergul 的回复:返回0至RAND_MAX之间的随机数。（包含0与RAND_MAX） 以上错误了。 应该是返回0到1/RAND_MAX之间的随机数。包含0与1/RAND_MAX）

产生(0, 1]区间的随机浮点数


Question: 逐步走入C语言

引用 楼主 qq_44841318的回复:任何一小白接触编程面临的第一个问题便是：如何选择教材和视频教学，毕竟好的开始便是成功的一半? 而我能做到的也只能是推荐C语言方面的一些书籍和视频： 新手入门： 机械工业出版社的《C程序设计语言》 C强化进阶： 《C缺陷与陷阱》、《C专家编程》、《C和指针》 C视频： 郝斌的 C 视频，51CTO 上面也有不错的 C 视频 学习 C 语言，三步走战略：看视频 + 看书 +敲程序，不断的加强自己对 C 的认识。 我也是一个初学者，我用的是Visual c++ 6.0 进行写代码，和编译运行的。 #include<stdio.h>  main()  { 	printf("Hello World!\n"); } 这基本上是入门 C 语言大家写的第一个程序，当初我写几行代码的时候，很纠结，个人搞不不明白这些，心里难受的很，就是只知道这个是写 C 的最简单的程序，按照这个来就好了。 总结: C 程序的几个特点： 1、main()主函数：一个独立的、完整的、正确的 C 语言程序，有且仅有一个主函数，主函数是整个程序的入口，无论将其书写在什么地方 2、；：分号是 C 语言语句结尾的标志，如果没有这个分号，只能形成表达式，单独的一个分号，也是语句，叫做：空语句 3、{}：花括号，表示的是一段程序，是 C 语言程序块、函数体的起止标志 4、C 语言是一个大小写 “敏感” 的语言，即，C 语言严格区分大小写 学习编程在于不断的敲，光听光看是没用的，得去实践，日积月累，最终定当水到渠成，对于 C 语言的学习，一定的坚持。 有心者无催万事齐，无心位百压不在焉. 可以帮忙看看，c语言程序怎么写吗？


Question: c语言顺序查找

数组下表是从0开始的，一次最后一个元素的下表是长度-1

C语言中对于数组的访问使用下标，下标的起始为0. for(i = s.length,i>=1;--i) length是你传递到函数的数组的长度，那么s.list[i].key，第一次访问时是下标越界的，当然这个不会报错。但是当这个越界的地方的值刚好等于你要查找的值时就会返回错误位置。 最小的数组下标为0，但是你的循环条件为i>=1,所以下标为0的元素（也就是第一个无素）不会被访问。 修改为for(i = s.length-1;i>=0;--i)


Question: 求大佬指点 根本没有学过画图的知识

用qt吧，我写的俄罗斯方块，可以参考。https://blog.csdn.net/mdjros/article/details/89736522


Question: 如何编程空心三角形200行啊？？？？求大佬帮忙

no picture you say a jb

写代码就是要精炼，高效，健壮 你50行能写好，非要再写一百多行的成分来污染原来的代码干啥 写完就行了，你写的代码少指不定得夸你哦 如果你非要再加100行 比较简单的方法是复制粘贴，一百行注释 最好这样写 /*脑残老师*/

#include<stdio.h> #include<string.h> int main() { char a; int n,s=0; while (~scanf("%c", &a) && a != '@') { scanf("%d", &n); if (s) printf("\n"); s++; int sum = n * 2 - 1; for (int i = 0; i < n; i++) { for (int j = 0; j < sum; j++) { if (i == 0) { if (j == n - 1) printf("%c", a); else { if(j<n-1) printf(" "); } } else if (i == n - 1) { printf("%c", a); } else { if (j == n - i - 1 || j == n + i - 1) printf("%c", a); else { if(j<n+i-1) printf(" "); } } } printf("\n"); } getchar(); } return 0; }   这是我的空心三角形，不过我们老师要求150行，麻烦大佬们教练怎么增加行数

引用 1 楼 user-4的回复:现在伸手党都直接要论文了，你咋不上天呢 我之前想问问空心三角形的行数怎么让他多起来，不是要论文呀，

描述清楚问题，如果是请教讨论没有问题。如果是要代码和论文，有偿。

现在伸手党都直接要论文了，你咋不上天呢


Question: 寻找最大元素和最小元素

#include <stdio.h>  #define N 100  void find_two_largest(const int a[],int n,int *largest,int *second_largest);  int main() {     int a[N],len,largest,second_largest, i;     scanf("%d",&len);      for(i=0;i<len;i++)     {         scanf("%d",&a[i]);     }      find_two_largest(a,len,&largest,&second_largest);     printf("%d %d\n",largest,second_largest);     return 0; } void find_two_largest(const int a[],int n,int *largest,int *second_largest) {     int i, max_i, sec_max_i = -1;      max_i = 0;     for (i = 1; i < n; i++) {         if (a[max_i] < a[i]) {             sec_max_i = max_i;             max_i = i;         } else if (a[max_i] == a[i]) {             continue;         } else if (sec_max_i < 0){             sec_max_i = i;         } else if (a[sec_max_i] < a[i]){             sec_max_i = i;         }     }      if (sec_max_i < 0)         sec_max_i = 0;      *largest = a[max_i];     *second_largest = a[sec_max_i];  #if 0     int i, j, b[N];      for(i=0;i<n;i++)     {         b[i]=a[i];     }     for(i=1;i<=4;i++)     {         for(j=0;j<n-i;j++)         {             if(b[j]>b[j+1])             {                 int t;                 t=b[j];                 b[j]=b[j+1];                 b[j+1]=t;             }         }     }     *largest=b[n-1];     *second_largest=b[n-2]; #endif } 供参考，楼主的方法是排序，但是需要注意的是如果最大值是两个相同的，楼主的方法得到的第二最大值就是错误的。 比如用例： 5 20 10 20 8 3 另外，排序会提高时间复杂度，用一层循环就可以求出最大值和第二最大值

这个代码有问题吧，这是输出最大元素和第二大元素 for循环的j是把最大的元素往后放，b[n-1] b[n-2]就是最大的和第二大的元素  for循环的i <4，也有问题  获取最大元素和第二大元素，i <=2 就行了。  如果获取最大元素和最小元素，按照你的算法，i<=4应该修改成i<=n-1  /*下面这两行就是输出参数，用指针赋值下，函数结束，main函数才能获取到正确数据*/ *largest=b[n-1]; *second_largest=b[n-2];


Question: 求解啦

代码看不到不好准确定位到问题，还是建议直接贴代码吧

引用 2 楼 着心 的回复:[quote=引用 1 楼 0四月天0的回复:]根据扫到的代码看，考虑极限条件，当 j =199， j+1 = 200，有可能数组越界，加一下判断条件，排除 j =199的情况  				if (sel1 == 1) 				{    //下标i,i+1----199 					for (j = i + 1; j <= 199; j++) 						comm[j + 1]= comm[j]; 					printf("********删除成功********\n"); 					system("pause"); 				}囊个处理哎？[/quote]  考虑 comm的元素容量，comm[n] = {}，要保证 j+1 < n , 如果comm的元素容量是comm[199] 如果你要处理到，j=199，那么。当  if(j ==199）  ｛ //相应操作 ｝  或者，你要处理到 j+1=199，j=198，那  for (j = i + 1; j < 199; j++)

引用 1 楼 0四月天0的回复:根据扫到的代码看，考虑极限条件，当 j =199， j+1 = 200，有可能数组越界，加一下判断条件，排除 j =199的情况  				if (sel1 == 1) 				{    //下标i,i+1----199 					for (j = i + 1; j <= 199; j++) 						comm[j + 1]= comm[j]; 					printf("********删除成功********\n"); 					system("pause"); 				}囊个处理哎？


Question: c语言问题求大佬帮助

正常情况下，各种考试都不会考这种问题，如果实在有，那只能说明出题人太潭浩强了。

这个问题不要管，因为不同编译器结果可能会不同。可能是0，也可能是1。原因在于不同的编译器处理表达式i=i++时，i自加的时间点不同，即i自加是在赋值运算之前还是之后。如果是之前，则i=i++;语句结束后，i的值应该是0，否则i的值应该为1。 解析： 不管怎样，由于是后置++，因此表达式i++的值等于0，赋值运算也是用这个表达式的值对赋值运算符左边的变量i进行赋值，即这里的赋值运算是将0赋值给i，这一点毫无疑问！但为什么i=i++;语句结束后，i可能为0，也可能为1呢？ 如果自加在赋值之前完成，则i=i++表达的计算过程如下： （1）计算表达i++的值，表达式i++的值为0 （2）i自加，i的值变为1 （3）进行赋值运算，即将表达式i++的值赋值给变量i，变量i又变为0 （4）计算结束，最终i的值为0 如果自加在赋值运算之后完成，则i=i++表达的计算过程如下： （1）计算表达i++的值，表达式i++的值为0 （2）进行赋值运算，即将表达式i++的值赋值给变量i，i的值仍为0 （3）i自加，i的值变为1 （4）计算结束，最终i的值为1 示例： #include <iostream> int main() {     int i = 0;     i = i++;     std::cout << i;      return 0; } 以上程序，用VS编译运行，程序输出的结果为1，用DEV C++，程序运行结果为0。 结论：C和C++标准的标准并没有规定以上问题，也就是说都是不违反标准，因此，程序员编程时应该避免写这种表达式及语句。

我试了一下，i=1啊

等一下我好像说错了

先执行了赋值然后自增了吧

i=i++; 分解： i++   操作 保存i的内容（0） i加1，此时i变成1了 i=    赋值操作 把上面保存的值赋给i，即把0赋给i，i又变成0


Question: 急，c语言求解

#include<stdio.h> int main() { int Num=100; int i=0; while(Num<=200) { if(Num%3!=0) { 	if(i<4){printf("%d,",Num);i++;}else {printf("%d\n",Num);i=0;} }  Num++; } getchar(); return 0;  }#include<stdio.h> int main() { int Num=100; int i=0; while(Num<=200) { if(Num%3!=0) { 	if(i<4){printf("%d,",Num);i++;}else {printf("%d\n",Num);i=0;} }  Num++; }  return 0;  }


Question: 求大佬解决一个小问题

语句这样写 a=b=5;c=b+2;只要定义了a b c肯定是没有问题的

呵呵，有一个运算符叫逗号运算符，有一种表达式叫逗号表达式

a=b=5是一个语句，c=b+2是一个语句，中间应该是分号吧？为啥是逗号？

谁说它不合法呢？如果a、b、c是已定义了的变量，没有问题啊

为什么要用a＝b＝5   不能分别赋值呢？


Question: 按钮显示1-8  不显示0-7  有没有大佬看下

引用 3 楼 weixin_45275083 的回复:[quote=引用 1 楼 0四月天0的回复:]看num的赋值，赋值有问题，你按下按键0，num=1,table赋值了table[1],table也是从0开始计数。 而且你的table数组，排序对应的是不是，0~7，还有阴极，阳极问题。 用的是共阳极数码管，排序也是0-7，但按按钮就显示1-8[/quote]  if(key1==0) {     delay1ms(10);     if(key1==0)    {        num=1;        P1=table[num];    }     while(!key1); } if(key1==0) {     delay1ms(10);     if(key1==0)    {        P1=table[1]; //P1 = table[0] ，这两个考虑一下    }     while(!key1); } table[1] = 0xf9,table[0]=0xc0 unsigned char code table[8]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8}; table[8]，应该是越界了;  char 数组的定义，还有table[8],是从 table[0]~table[7]，table[8]越界 而且num 很明显没什作用，不如直接 table[1],这样

引用 1 楼 0四月天0的回复:看num的赋值，赋值有问题，你按下按键0，num=1,table赋值了table[1],table也是从0开始计数。 而且你的table数组，排序对应的是不是，0~7，还有阴极，阳极问题。 用的是共阳极数码管，排序也是0-7，但按按钮就显示1-8

引用 1 楼 0四月天0的回复:看num的赋值，赋值有问题，你按下按键0，num=1,table赋值了table[1],table也是从0开始计数。 而且你的table数组，排序对应的是不是，0~7，还有阴极，阳极问题。 。。。。。  改了半天了  不知道咋改


Question: 请哪位大神，看一下，这个程序为什么运行不出来！着急等，谢谢！

编译是没问题，但运行有问题

#include <stdio.h>  int n=0; int rest[7][7];  void swap(int *a,int *b) {     int m;     m  = *a;     *a = *b;     *b = m; } //void func(int list[],int k,int,m) void func(int list[],int k,int m) {     int i,j;     if(k>m)     {         for(i=0;i<7;i++)         {             for(j=0;j<7;j++)             {                 if (rest[i][j]==-1)                     return;                 if (rest[i][j]!=list[i])                     continue;                 if(rest[i][j]==list[i])                     break;             }         }         n++;         printf("solution:%d\n",n);         printf("赵 钱 孙 李 周 吴 陈\n"); printf("=============================================================\n");         for (i=0;i<m;i++)         {             switch(list[i])             {                 case 1:printf("星期一");break;                 case 2:printf("星期二");break;                 case 3:printf("星期三");break;                 case 4:printf("星期四");break;                 case 5:printf("星期五");break;                 case 6:printf("星期六");break;                 case 7:printf("星期日");break;                 default: break;             }         }         printf("\n\n\n");     }     else     {         for(i=k;i<=m;i++)         {             swap(&list[k],&list[i]);             func(list,k+1,m);             swap(&list[k],&list[i]);         }     } } int main() {     int list[]={1,2,3,4,5,6,7};     int  i,j;     char func1[7][20]={"赵","钱","孙","李","周","吴","陈"};     printf("=================欢迎使用排班系统==================\n");     for (i=0;i<7;i++)     {         printf("%s:",func1[i]);         for (j=0;j<7;j++)         {             scanf("%d",&rest[i][j]);             if(rest[i][j]==-1)                 break;         }     }     printf("\n\n\n");     //func2(list,0,6);     func(list,0,6);     printf("total:%d\n",n);     getchar();     getchar();     return 0; } 供参考，程序有多处问题，建议自己对比查一下问题

上面题目不全，缺少部分为           学校实验楼有7名保安人员：钱、赵、孙、李、周、吴、陈。由于工作需要进行轮休制度，一星期中每人休息一天。预先让每一个人选择自己认为合适的休息日。请编制程序，打印轮休的所有可能方案。当然使每个人都满意，例如每人选择的休息日如下：


Question: 霍夫曼编码解码

个人手写，仅作参考  // // Created by denglibin on 2019/6/21 0021. // 霍夫曼编码 // 简介： https://blog.csdn.net/qq_36653505/article/details/81701181 //  #include <stdio.h> #include <stdlib.h> #include <string.h>  /**思路：用一个有序链表（从大到小）来保存节点，然后通过链表来构造霍夫曼树, 再由霍夫曼树得到霍夫曼编码**/  typedef struct huffman_tree_node{     int weight;//权重     char c;//字符 非叶子节点为0     struct node * nextHuffmanTreeNode;//链表下一个节点     struct huffman_tree_node * leftHuffmanTreeNode;//左节点     struct huffman_tree_node * rightHuffmanTreeNode;//右节点 }HuffmanTreeNode; //霍夫曼树节点  typedef struct huffman_code{     char *s;//编码 如  010， 00， ....     int len;//编码长度     char c;//字符 }HuffmanCode; //霍夫曼编码（可以用来保存结果）  /**  * 创建一个节点  * @param c  字符  * @param weight 权重  * @return  */ HuffmanTreeNode * createHuffmanTreeNode(char c, int weight){     HuffmanTreeNode * node = (HuffmanTreeNode *)calloc(1, sizeof(HuffmanTreeNode));     node->c = c;     node->weight = weight;     node->nextHuffmanTreeNode = NULL;     node->leftHuffmanTreeNode = NULL;     node->rightHuffmanTreeNode = NULL;     return node; }  /**  * [insert 插入节点到有序链表中]  * @param  h [头节点指针]  * @param  s [要插入的节点]  * @return   [头节点]  */ HuffmanTreeNode * insert(HuffmanTreeNode * h, HuffmanTreeNode * s){     if(h == NULL){ //插入第一个节点时 没有头节点         return s;//s作为头节点     }     if(s->weight > h->weight){         s->nextHuffmanTreeNode = h; //s作为头节点         return s;     }      HuffmanTreeNode * tempHuffmanTreeNode = h; //中间变量 用于遍历     HuffmanTreeNode * preHuffmanTreeNode = tempHuffmanTreeNode;//中间变量的前一个节点     while(tempHuffmanTreeNode != NULL){         if(s->weight < tempHuffmanTreeNode->weight){ //要插入的节点的学号比当前节点小             preHuffmanTreeNode = tempHuffmanTreeNode;             tempHuffmanTreeNode = tempHuffmanTreeNode->nextHuffmanTreeNode;             continue;         }         //插入到中间         preHuffmanTreeNode->nextHuffmanTreeNode = s;         s->nextHuffmanTreeNode = tempHuffmanTreeNode;         break;     }     if(tempHuffmanTreeNode == NULL){ //插入的节点比已有的节点都小         preHuffmanTreeNode->nextHuffmanTreeNode = s;     }     return h; }  /**  * 移除最后一个节点（最小的那个） 并返回  * @param node  * @return  */ HuffmanTreeNode * removeLastHuffmanTreeNode(HuffmanTreeNode * h){     HuffmanTreeNode * tempHuffmanTreeNode = h; //中间变量 用于遍历     HuffmanTreeNode * preHuffmanTreeNode = tempHuffmanTreeNode;//中间变量的前一个节点     while(tempHuffmanTreeNode->nextHuffmanTreeNode != NULL){             preHuffmanTreeNode = tempHuffmanTreeNode;             tempHuffmanTreeNode = tempHuffmanTreeNode->nextHuffmanTreeNode;         }         preHuffmanTreeNode->nextHuffmanTreeNode = NULL;     return tempHuffmanTreeNode; }  /**  * 链表转霍夫曼树  * @param head  * @return  */ HuffmanTreeNode * createTree(HuffmanTreeNode * head){     if(head == NULL){         return NULL;     }     while (1){         //获取最小的两个节点         HuffmanTreeNode * node1 = removeLastHuffmanTreeNode(head);         if(node1 == head){ //只有一个节点了 完成             return node1;         }         HuffmanTreeNode * node2 = removeLastHuffmanTreeNode(head);         if(node2 == head){ //最后一个节点             head = NULL; //头节点置为NULL         }         //创建一个新的节点         HuffmanTreeNode * newNode = createHuffmanTreeNode(0, node1->weight+node2->weight);         //设置左节点         newNode->leftHuffmanTreeNode = node1->weight < node2->weight ? node1 : node2;         //设置右节点         newNode->rightHuffmanTreeNode = node1->weight < node2->weight ? node2 : node1;         //新节点插入到链表中，再次循环 直到链表中只有一个节点         head = insert(head, newNode);     } }  /**  * 字符串拷贝  * @param s  * @param len  * @param dest  */ void str_copy(char *s,int len ,char *dest){     for(int i = 0; i < len; i++){         dest[i] = s[i];     } }  /**  * 霍夫曼编码  * @param node 节点  * @param s 编码的字符串 如 001,00,01...  * @param len 编码字符串的长度  */ void showCode(HuffmanTreeNode * node, char *s, int len){     if(node->c != 0){ //到叶子节点了         //打印编码结果（或保存到结构体中）：         printf("%c->%s\n", node->c, s);         free(s);         return;     }     //遍历左节点 编码增加一个0     char * leftS = (char *)calloc(len+1, sizeof(char));     str_copy(s, len, leftS);     leftS[len] = '0';     showCode(node->leftHuffmanTreeNode, leftS, len+1);      //遍历右节点 编码增加一个1     char * rightS = (char *)calloc(len+1, sizeof(char));     str_copy(s, len, rightS);     rightS[len] = '1';     showCode(node->rightHuffmanTreeNode, rightS, len+1);     free(s);  }  int main(){     //创建节点     HuffmanTreeNode * head = NULL;     HuffmanTreeNode * node_a = createHuffmanTreeNode('A', 5);     HuffmanTreeNode * node_b = createHuffmanTreeNode('B', 4);     HuffmanTreeNode * node_c = createHuffmanTreeNode('C', 3);     HuffmanTreeNode * node_d = createHuffmanTreeNode('D', 2);     HuffmanTreeNode * node_e = createHuffmanTreeNode('E', 1);     //插入到有序链表中     head = insert(head,node_a);     head = insert(head,node_b);     head = insert(head,node_c);     head = insert(head,node_d);     head = insert(head,node_e);     //转霍夫曼树     HuffmanTreeNode *tree =  createTree(head);     printf("huffman encode:\n");     //获取编码     showCode(tree, "", 0);  }


Question: 求代码

先写一个排序，把数据按照从大到小排序，然后在帮你把插入数组功能完成


Question: (a++,++a)是个什么鬼？

a++，先用后加，它是值就是a ++a，先加后用，它的值是a+1 括号运算，即括号之内的算式优先运算 逗号运算，其结果就是右边的表达式的结果 所以，（a++ , ++a ） 这里先运算 a++ 和 ++a 得出（-5 , -3 ） 即-5和-3进行逗号运算，其结果就是-3 因此k为-3 这种出现同一个变量的两次自增的表达式，最好不要用。

比孔乙己的茴香豆的茴字的写法还无聊 工作中写这种代码肯定被开

这种东西完全没有实用架子，闲得蛋疼

这种写法也就那些出题的人才能想出来（死扣）。工作中没碰到过。 再比如优先级的问题，一般写代码的时候，如果不确定，加个括号就可以了。还非得考考你优先级的概念，真是闲的蛋疼

逗号运算符，把最后一个逗号后面表达式的值赋值给k，经过两次+1，所以结果是D


Question: 想问问这个怎么做的

先分解，最小的处理单元就是1+..+n，因此把这个操作定义成一个函数，最后的就好计算了；   int cusum (int max) {     int i, sum = 0;      for (i = 1; i <= max; i++)         sum += i;     return sum; }


Question: void，int main

这就是规则吧，老版本的编译器也是支持void main(void);的，新版本只支持int main(void);不过这没什么纠结的， 按照规则走就好了

对于C语言： 在C89标准中，main() 的形式是可以接受的，当然使用如下的C99标准更明智，因为在这个标准中只有如下格式才能被接受： int main ( void ) int main ( int argc, char *argv[] ) 我们可以对main函数做轻微的改变，比如我们可以用一个自定义的类型代替int（当然这个类型必须被定义为int型），还可以把*argv[]改为**argv，等等。 如果我们不想在命令行下对程序输入参数，可以选择第一种形式。 其实第二种形式的两个参数argc,argv的名称是可以改变的，但保持原样是更明智的选择。 main()函数的返回类型必须为int；返回的整形值作为传递给调用者的一个返回码。(this allows a return code to be passed to the invoker)对于C++:以下是可以接受的格式： int main ( int argc, char *argv[] ) int main () 第一种格式遵从C99标准；第二种格式在不需要通过命令行向程序传递参数时使用，与C99标准中规定的格式int main(void)效果相同。 （C）int main()与int main(void)之间的区别： 很多C程序员都曾搞错的一个概念，就是以为这样一个函数不接受任何参数：int foo();事实上，这个函数被认为可以接受未知个数的参数（译：可接受任意多的参数！）。正确的用法是在括号内添加关键字void。 在C/C++正规的调用/返回函数中，如果你不想让一个函数返回任何值，你可以使用void定义返回类型。比如，一个不接受任何参数并且无任何返回值的函数原型可以像这样： void foo(void); 一个常见的误解是，这种逻辑同样适用于main()函数。呵呵，事实并非如此，main()函数是很特殊的，无论何时你都应该依照标准定义main()函数（译：即使用int main()的形式！），并把返回值定义为int。有时void main()的例外形式是可以出现的，但这仅限于某些特定的系统。如果你不敢肯定正在使用这些系统，那么答案很简单，不能使用void main()的形式。 如果你在论坛上写了像“void main”这样的代码而被警告，那么最好改过来。不要用"我的老师告诉我这么做是对的"之类的话来为自己开脱；老师们总是习惯犯错误(teachers have a bad habit of being wrong)。写安全的，合乎标准的代码，大家就可以专注于你程序中其它的问题而不是在这种规范方面的东西上浪费时间。 好比是标准的扩展版，main()函数可以在一些系统中提取一个额外的参数用来访问环境变量。这个用法不能保证在每个编译环境中都行得通，所以使用 envp 这个参数是还是谨慎为妙。

比如当调用这个程序的bat或父进程需要根据其返回码不同在下一步采取不同动作时。   d:\>if /? 执行批处理程序中的条件处理。  IF [NOT] ERRORLEVEL number command IF [NOT] string1==string2 command IF [NOT] EXIST filename command    NOT               指定只有条件为 false 的情况下，Windows 才                     应该执行该命令。    ERRORLEVEL number 如果最后运行的程序返回一个等于或大于                     指定数字的退出代码，指定条件为 true。    string1==string2  如果指定的文字字符串匹配，指定条件为 true。    EXIST filename    如果指定的文件名存在，指定条件为 true。    command           如果符合条件，指定要执行的命令。如果指定的                     条件为 FALSE，命令后可跟 ELSE 命令，该命令将                     在 ELSE 关键字之后执行该命令。  ELSE 子句必须出现在同一行上的 IF 之后。例如:      IF EXIST filename. (         del filename.     ) ELSE (         echo filename. missing.     )  由于 del 命令需要用新的一行终止，因此以下子句不会有效:  IF EXIST filename. del filename. ELSE echo filename. missing  由于 ELSE 命令必须与 IF 命令的尾端在同一行上，以下子句也 不会有效:      IF EXIST filename. del filename.     ELSE echo filename. missing  如果都放在同一行上，以下子句有效:      IF EXIST filename. (del filename.) ELSE echo filename. missing  如果命令扩展被启用，IF 会如下改变:      IF [/I] string1 compare-op string2 command     IF CMDEXTVERSION number command     IF DEFINED variable command   d:\zz\MiaLabEscope>


Question: *和&

是我的理解问题，谢谢各位的解答！

最好根据例子来理解比较好一些；&取地址，*是引用；  int array[16]; int *p = array;  p == &array[0]; *p == array[0] *(p+1) == array[1] p[0] == *(array+0)

引用 1 楼 赵4老师 的回复:《牛肉干》 C语言上机课，某女同学偷偷吃起牛肉干。 有一粒牛肉干掉到了键盘上，卡在7和8键之间。 女同学就在键盘上抠啊、抠啊、抠啊…… 程序里一行代码变成这个样子： int *pa=&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&a; 后来的结局是 ————程序顺利通过编译，运行结果正确！ 谁都不服，就服赵老师


Question: C语言编写车票管理系统

1 8:00 pixian guanghan 2 45 30 2 6:30 pixian chengdu 0.5 40 40 3 7:00 pixian chengdu 0.5 40 20 4 10:00 pixian chengdu 0.5 40 2

//6-车票管理系统  #include<stdio.h> #include<stdlib.h> #define N 4  void record();         //录入信息  void mune();          //菜单  void findsdate();    //查询状态  void findroute();   //查询路线  void book();       //预定车票  void refund();    //退票    struct time 	{ 	  int hour; 	  int minute; 	};  struct infor      //定义汽车信息  { 	int shift;             //汽车的班次  	struct time  start;   //发车时间，输入形式为 08:00  	char spoint[20];     //起始站  	char dest[20];      //终点站 	float hour;        //行车时间 	int num;          //额定数量 	int snum;        //已售数量  	  } infor[N-1] ;   int main() { 	printf("\n\n----------------------------------车票管理系统--------------------------------\n"); 	printf("录入班车信息\n输入信息：\n");       	int i;      for(i=0;i<N;i++) 	{ 		scanf("%d%d:%d%s%s%f%d%d",&infor[i].shift,&infor[i].start.hour,&infor[i].start.minute, 		                       infor[i].spoint,infor[i].dest,&infor[i].hour, 		                       &infor[i].num,&infor[i].snum);  // 键盘输入信息 	} 	 record(); 	 	     printf("\n\n选择您要进行的操作: \n");     printf("查询所有班次当前状态----1\n\n");     printf("查询汽车路线------------2\n\n");     printf("购买车票----------------3\n\n");     printf("退订车票----------------4\n\n");         mune();            printf("                  感谢您的使用                \n"); 	 }  	  	     void record()  //录入信息  {    int i; 	FILE *fp; 	if((fp=fopen("qichexinxi.dat","wb"))==NULL)     	{ 	       printf("文件不存在\n"); 	       exit(0); 	    } 	for(i=0;i<N;i++) 	if(fwrite(&infor[i],sizeof(struct infor),1,fp)!=1) 		printf("文件出错\n"); 		fclose(fp) ; }	   void mune()  //菜单选项  {   int m;  	scanf("%d",&m) ;   switch(m)   case 1:   {  	 char c;   	 findsdate();  	 printf("按任意键退出系统\n"); 	 printf("按 # 返回上一层\n");  	 printf("请输入： \n"); 	 scanf("%c",c); 	 if(c=='#')  	 mune();  };   break;      case 2:   {  	 char c;   	 findroute();  	 printf("按任意键退出系统\n"); 	 printf("按 # 返回上一层\n"); 	 printf("请输入： \n") ; 	 scanf("%c",c); 	 if(c=='#')  	 mune();  };   break;     case 3:   {  	 char c;   	 book();  	 printf("按任意键退出系统\n"); 	 printf("按 # 返回上一层\n"); 	 printf("请输入： \n");  	 scanf("%c",c); 	 if(c=='#')  	 mune();  };     break;       case 4:   {  	 char c;   	 refund();  	 printf("按任意键退出系统\n"); 	 printf("按 # 返回上一层\n"); 	 printf("请输入： \n");  	 scanf("%c",c); 	 if(c=='#')  	 mune();   };    break;  }  void findsdate()//查询状态  {  	int i; 	struct time now; 	scanf("%d%d",&now.hour,&now.minute);//输入系统时间  	 printf("当前时间%d:%d",now.hour,now.minute);  	if(now.hour>23||now.hour<0||now.minute>59||now.minute<0)  	 { 	    printf("输入错误，请输入正确时间\n"); 	    getchar(); 	    getchar(); 	 }  	for(i=0;i<N;i++)  	  { 	 	if (now.hour<=infor[i].start.hour&&now.minute<=infor[i].start.minute) 	 	printf("汽车%d未发出\n",i); 		 else  		 printf("汽车%d发出\n",i);       }       mune(); }     void findroute() { 	 int i;    printf("请选择查询方式：\n") ;    printf("按班次查询------1\n");    printf("按终点站查询----2\n");    scanf("%d",&i);    if(i!=1&&i!=2)    printf("输入错误，请重新输入\n");    switch(i)    case 1:    {   	int j;    	printf("请输入班次：\n");    	scanf("%d",&j);    	if(j>N)    printf("输入错误，请重新输入\n");    printf("班次%d:/t\t%d%d:%d%s%s%f%d%d",infor[j-1].shift,infor[j-1].start.hour,infor[j-1].start.minute, 		                       infor[j-1].spoint,infor[j-1].dest,infor[j-1].hour, 		                       infor[j-1].num,&infor[j-1].snum);    };    break;    case 2:    {    	char c1;    	int i;    	for(i=0;i<N;i++) 	  {   		if(c1=infor[i].dest)   		printf("班次%d:/t\t%d%d:%d%s%s%f%d%d",i,infor[i-1].shift,infor[i-1].start.hour,infor[i-1].start.minute, 		                       infor[i-1].spoint,infor[i-1].dest,infor[i-1].hour, 		                       infor[i-1].num,&infor[i-1].snum);        else         printf("未查询到\n");   	};    }    break;	 }    void book() { 	int i; 	struct time now;     printf("请输入要订购的车票的班次:");     scanf("%d", &i);     printf("i=%d\n", i);     if (i < 1 || i > N + 1)     {         printf("对不起，今天没有这趟车,请明天再来，谢谢使用!\n");         printf("按任意键回主菜单......\n");         getchar();         mune();     }  	scanf("%d%d",&now.hour,&now.minute);//输入系统时间  	 printf("当前时间%d:%d",now.hour,now.minute);     if (now.hour<=infor[i-1].start.hour&&now.minute<=infor[i-1].start.minute)     {         if (infor[i - 1].snum < infor[i - 1].num)         {             (infor[i - 1].snum)++;             printf("你的订票成功，请按时上车，谢谢使用!\n");         }         else printf("对不起，今天的这趟车的票已卖完,请明天再来，谢谢合作!\n");     }     getchar();     menu();      }   void refund() { 	 int i;     printf("请输入要退购的车票的班次:");     scanf("%d", &i);     if (i < 1 || i >N + 1)     {         printf("对不起，今天没有这趟车,无法完成退票.谢谢使用!\n");         getchar();         mune();     }     scanf("%d%d",&now.hour,&now.minute);//输入系统时间  	 printf("当前时间%d:%d",now.hour,now.minute);     if (now.hour>=infor[i-1].start.hour&&now.minute>=infor[i-1].start.minute)         if (infor[i - 1].snum >= 1)         {             infor[i - 1].snum = infor[i - 1].snum-1;             printf("退订车票成功，谢谢使用!\n");         }         else             printf("对不起,今天的这趟车的票尚未卖出,无法完成退票!\n");          else         printf("对不起，今天的这趟车已发出,无法完成退票!\n"); }

建议直接贴代码吧，贴图片不清晰 代码如果比较多，那就多发几个


Question: c语言教师管理系统

竟然是一样的题，害，根本不会


Question: ＃include在Windows7条件下不能运行，想问什么函数可以代替Windows.h函数。

graphics.h可以，也是做图形化的。

引用 2 楼 ゞ☆伊晓宁 的回复:[quote=引用 1 楼 gouyanfen的回复:]你的只用到了Sleep()函数，这个是windows.h提供的系统API，不可能win7不能运行 学校的电脑应该就是win7的呀，显示的错误是这样的:cannot  open  include  file:'Windows.h':no such file  or directory.[/quote]  网上下载这个文件,然后把这个文件拷贝过去就可以了,

引用 19 楼 ゞ☆伊晓宁 的回复:[quote=引用 16 楼 早打大打打核战争的回复:]没有问题，本来只是一行代码，有点长，折成两行了 大神啊，还是有问题，能麻烦你给我发一遍完整的代码吗？  万分感谢![/quote]  #include<stdio.h> #include<stdlib.h> //#include<conio.h> #include<time.h> //#include<windows.h>  static void Sleep(unsigned int dwMilliseconds) {   for (clock_t ticks = clock();         clock() - ticks < dwMilliseconds * (int)CLOCKS_PER_SEC / 1000;); }  // 以下都是你原来的代码

没有问题，本来只是一行代码，有点长，折成两行了

c语言里也有个sleep，window里面也有Sleep，看你用哪个

不可能啊，你发下错误，或者尝试添加MFC库

引用 16 楼 早打大打打核战争的回复:没有问题，本来只是一行代码，有点长，折成两行了 大神啊，还是有问题，能麻烦你给我发一遍完整的代码吗？  万分感谢!

引用 17 楼 ゞ☆伊晓宁的回复:[quote=引用 16 楼 早打大打打核战争的回复:]没有问题，本来只是一行代码，有点长，折成两行了 哦，原来是这样啊。那我回去重新改改[/quote] 大神啊，还是有问题，能麻烦你给我发一遍完整的代码吗？  万分感谢!

引用 16 楼 早打大打打核战争的回复:没有问题，本来只是一行代码，有点长，折成两行了 哦，原来是这样啊。那我回去重新改改

引用 10 楼 syrchina的回复:windows.h首字母大小写都试试 还可以这样改啊，我还以为只和系统兼容不兼容有关😂

引用 6 楼 赵4老师的回复:会全盘搜索windows.h文件在哪个文件夹下吗？ 如果搜不到，会安装VS20XX吗？ 就是在我的电脑里面搜索Windows.h，然后将它复制到这个代码的文件夹下面，同时debug文件夹下面也复制一份吗？

windows.h首字母大小写都试试

conio.h和Windows.h一起用，亏楼主想得出来！

引用 5 楼 棉猴的回复:VS2015调试，把代码中的kbhit()改为_kbhit()即可，以下是调试画面  好的，谢谢～  我试试去

引用 4 楼 liups的回复:conio.h和Windows.h一起用，亏楼主想得出来！ 😂这是一个大神教的，在win10里可以运行，但在winXP不可以运行

嗯嗯，我之前查过Sleep函数的代替函数，主要是它具体怎么替代啊，查的那些说的都不太清楚

引用 13 楼 早打大打打核战争的回复:自己写一个： #include <time.h>  static void Sleep(unsigned int dwMilliseconds) {   for (clock_t ticks = clock();         clock() - ticks < dwMilliseconds * (int)CLOCKS_PER_SEC / 1000;); } 有点看不懂哎，能具体解释下    for (clock_t ticks = clock();         clock() - ticks < dwMilliseconds * (int)CLOCKS_PER_SEC / 1000;);     是什么意思吗？            还有，你这个 for (clock_t ")"ticks = clock();   后面是不是少了"   ) "呀？  clock()-ticks....这个函数好像也少括号


Question: 求帮忙

百度搜“RSA算法”


Question: 数据结构 学生搭配问题

仅供参考：//舞会上，男士们（m人）和女士们（n人, n<m）进入舞厅时，各自排成一队。跳舞开始时，依次从男队和女队的队头上各出一人配成舞伴。 //男队中未配对者等待下一轮舞曲。现要求写一算法模拟上述舞伴配对问题。在第t首曲子时，第x个女生和第几个男生配对跳舞？ #include <stdio.h> #include <string.h> #define MAX 26 int m,n,t,x,y,i,j,k; char md[MAX]; char nd[MAX]; char c; void main() {     while (1) {         printf("Input n m(1<=n<m<=%d):",MAX);         fflush(stdout);         rewind(stdin);         if (2==scanf("%d%d",&n,&m)) {             if (1<=n && n<m && m<=MAX) break;         }     }     while (1) {         printf("Input t x(1<=t<=%d 1<=x<=%d):",MAX,n);         fflush(stdout);         rewind(stdin);         if (2==scanf("%d%d",&t,&x)) {             if (1<=t && t<=MAX && 1<=x && x<=n) break;         }     }     for (i=0;i<m;i++) md[i]='A'+i;     for (i=0;i<n;i++) nd[i]='a'+i;     k=0;     for (i=0;i<t;i++) {         printf("%2d: ",i+1);         for (j=0;j<n;j++) {             c=' ';             if (i==t-1 && j==x-1) {c='*';y=k+1;}             printf("%c%c%c",md[k],nd[j],c);             k=(k+1)%m;         }         printf("\n");     }     printf("%d\n",y);  }


Question: 请求大佬帮忙。写一个c语言程序。要c6.0的。

引用 3 楼 宾灬的回复: #include <stdio.h> #include <stdlib.h> #include <memory.h> #include <math.h> int num; //输入数字的个数 int * data; //存输入的数字 0-9  数组  int * nums; // 存组成的数 数组 int numsIndex = 0; //组成的数的下标   /**  * 交换  * @param arr    [description]  * @param index1 [description]  * @param index2 [description]  */ void swap(int * arr, int index1, int index2){ 		int temp = arr[index1]; 		arr[index1] = arr[index2]; 		arr[index2] = temp; } /**  * [quickSort 快速排序]  * @param start [description]  * @param end   [description]  */ void quickSort(int start, int end){ 	if(start >= end){ 		return; 	} 	int low = start, high = end; 	int middle = nums[start];//基数 	while(low < high){ 		//从右往左找 		while(low < high && nums[high] > middle){ 			high --; 		} 		//从左往右找 		while(low < high && nums[low] <= middle){ 			low ++; 		} 		//交换 		swap(nums, low, high); 	} 	//交换 	swap(nums, start, low); 	quickSort(start, low-1); 	quickSort(low+1, end); } /**  * [createNums 创建N-1位数字]  * @param arr [description]  * @param len [description]  */ void createNums(int arr[], int len){ 	int  x = 0; 	for(int i = 1; i < len; i++){ // 如果要创建N位数字（全排列） i从0开始 		if(arr[1] == 0){ //0是第一个数，不要 			return; 		} 		x += arr[i] * pow(10,len - i -1); 	} 	//存到数组中 	nums[numsIndex++] = x; 	 } /**  * 全排列   *思路:第一个数和后面的数（包括自己）交换，每个交换结果又用第二个数和后面的数交换，交换结果又用第三个数和后面的数交换....最后一个数和最后一个数交换。  * @param arr   [数组]  * @param index [交换数位置]  * @param num   [最后一个数的位置]  */ void perm(int arr[], int index, int endIndex){ 	if(index == endIndex){ //一次递归结束 		createNums(arr, endIndex+1); 	}else{ 		for(int i = index; i <= endIndex; i++){ 			swap(arr, index, i); //交换数(index)和后面的数（包括自己）交换 			perm(arr, index+1, endIndex); //递归 index+1 			swap(arr, i, index); //交换完了，要换回来 以便 下一次循环 		} 	} }  /**  * [showNums 打印数字]  */ void showNums(){ 	for(int i = 0; i < numsIndex; i++){ 		if(i % 3 == 0){ 			printf("\n"); 		} 		printf("%d ", nums[i] );  	} }  /**  * [enterNum 输入数字]  */ void enterNum(){ 	printf("要输入数字的个数:"); 	scanf("%d", &num); 	printf("%d\n", num); 	data = (int*)calloc(num, sizeof(int)); //分配内存 	nums = (int*)calloc(num - 1, sizeof(int));  	for(int i = 0; i < num; i++){ 		printf("请输入第%d个数:",   i+1); 		scanf("%d", data + i); 		printf("%d\n", data[i]); 	} 	perm(data, 0, num -1); }   int main(){  	enterNum(); 	printf("----------------------组成的数字如下:----------------"); 	showNums(); 	quickSort(0, numsIndex-1); 	printf("\n------------------------排序后:-------------------\n"); 	showNums(); 	free(data); 	free(nums); 	return 0; }   非常感谢大佬，感谢

感谢，非常感谢大佬

引用 1 楼 user-2的回复:听过说c89,c99,c11,也听说过vc 6.0 vc 2005 vc 2008，却从未听说过c6.0. vc6.0，打错了😂😂😂😂


Question: 埃及分数

这不就是个逻辑运算么？还有啥算法分析


Question: fopen函数问题

是可执行文件的目录，不是动态库的目录，不要搞错了

windows的路径要用“\”符号啊，在C语言的字符串里就要用“\\” 即“.\\test.txt”

如果是你上面写的代码，那么你的程序执行路径应该和文件保持一致，否则会提示文件找不到。 即./test.txt是当前路径，那么可执行程序应该和文件在同一路径下

相对路径是基于 工作目录  而不是 你的动态链接库目录

肯定支持相对路径的。 用getcwd获取当前的绝对路径看看


Question: 什么是踩内存？什么是内存越界？

内存越界是指超出了内存的边界，比如申请了一个16字节的数组，a[16]或a[20]都是越界访问，同样a[-10], a[-16]一样是越界。 只有[0, 15]的下表才是正常的读写这个内存/缓存的。

#include <time.h> #include <stdlib.h> #include <windows.h> int main() {     int a,b[11];//本来是b[10]，为判断哪句越界，故意声明为b[11]      srand((unsigned int)time(NULL));//按两次F11，等黄色右箭头指向本行时，调试、新建断点、新建数据断点，地址：&b[10]，字节计数：4，确定。     while (1) {//按F5，会停在下面某句，此时a的值为10，b[10]已经被修改为对应0..4之一。         b[(a=rand()%11)]=0;         Sleep(100);         b[(a=rand()%11)]=1;         Sleep(100);         b[(a=rand()%11)]=2;         Sleep(100);         b[(a=rand()%11)]=3;         Sleep(100);         b[(a=rand()%11)]=4;         Sleep(100);     }     return 0; }


Question: 又遇到问题了

建议直接贴代码～

你问问题最好直接贴代码吧 这样截图不方便看 输入框上边一行的工具栏里有个专门输入代码的选项

q=hand hand来自q 可那个时候q也没有值啊


Question: 求教大佬!(关于用NULL和\0对字符指针初期化的问题)

典型的野指针问题 NULL是个数字，是0，你换什么，本质都一样 (*strTest)是访问strTest所指的变量 你都没赋值，它指向哪里？

首先应该说明写语句的目的，否则别人不知道怎么修改合适。 char *strTest (*strTest)=NULL; 这里有点吓人，第一行如果是一条语句，则不见分号，如果不是，就看不懂这两行是要干什么。 如果第一行后面加了分号，也看不懂，1、指针变量未指向合法的存储空间时，就试图对其所指向的内存空间进行赋值；2、NULL是一个宏： #define NULL ((void *)0) 明显，它是一个空指针，将对存放至一个字符数据的内存空间不合适。 改成 char *strTest (*strTest)='\0'; 明显也是吓人的。 改成 	char* strTest; 	(*strTest) = '\0'; 当然也还是不对，因为strTest仍未指向一个合法的内存空间。 如果你是想将strTest初始化为初指针 char* strTest = NULL; 如果不是，那就不知道了

定义变量时的*属于类型 char *strTest，这里是定义了一个char*的变量 strTest (*strTest)=NULL;  //此处的*用于对变量strTest（char*）类型取内容 而strTest指针本没有初始化，所以你调用*strTest，得到的是一个空值，对空值赋值引发了报错 就算你改成\0的一样 你应该是想把指针初始化为空指针，那么可以这样写 char *strTest=NULL; 或者这样写: char *strTestl strTest=NULL;   //注意这里用了*是取内容，strTest已经是char*类型

(*strTest)='\0';   这样可以，不过括号是多余的  另外有个大问题，strTest没初始化，直接给 *strTest 赋值是有问题的。


Question: 有没有哪位大神能告诉我这个怎么写 用c语言   不会用结构体  十分感谢

引用 1 楼 user-2的回复:等着挂科重修呗，还有什么好写的 建议不错  哈哈😄

窃以为1楼建议比较中恳。 ——“...不会用结构体..."

等着挂科重修呗，还有什么好写的


Question: 输入两个个数，求，这两个数的最大公约数和最小公倍数

引用 1 楼 user-2 的回复：scanf("%d%d\n", &m, &n); 双引号中去掉\n 如果实在要这么有个性，输入两个数后，输入Ctrl+Z。 另外             for (i = 1;; i++)             {                 m = p;                 m = m * i;             }             for (i = 1;; i++)             {                 n = q;                 n = n * i;             } 这是两个死循环。好的👌👌👌👌👌，

#include <stdio.h> #include <math.h>  int maxyue(int m,int n) {     int tmp, k;      if (m < n) {         tmp = m;         m  = n;         n = tmp;     }     while ((k = m % n)) {         m = n;         n = k;     }      return n;      /*     int k=1;      if(i==j)     {         return (j);     }     if(i>j)     {         while(k!=0)         {             k=i%j;             i=j;             j=k;         }         return (j);     }     else     {         while(k!=0)         {             k=j%i; j=i; i=k;         }         return (i);     }     */ }  int minbei (int m, int n) {     /*     int i,m,n;     if(p==q)         return (p*p);     else     {         do         {             for(i=1;;i++)    //死循环             {                 m=p;                 m=m*i;             }             for(i=1;;i++)   //死循环             {                 n=q;                 n=n*i;             }         }while(p!=q);         return (p);     }     */ }  int main(void) {     int i,j;     int m,n;      printf("请输入m,n的值:\n");     //scanf("%d%d\n",&m,&n);     scanf("%d%d", &m, &n);     i=maxyue(m,n);     printf("i = %d\n", i);     //j=minbei(m,n);     j = m * n / i;     printf("输出最大公约数，最小公倍数的值:\n");     printf("最大公约数=%d,最小公倍数=%d\n",i,j);      return 0; }


Question: 为什么用了SetWindowPos置顶了窗口，按了下显示桌面窗口就不置顶了

这里比较奇葩，写的是控制台程序，想要它置顶，hWnd是控制台窗口句柄


Question: C语言中形参的问题（大概）

补充：仔细看看你的代码，错误很多，而且不知道你要完成功能

引用 5 楼 user-2 的回复:如果你用MN来定义数组大小，a[M][N]全部越界了，还有a[M][N]传给change的时候是不是少了个取地址符&？这个函数里p没有用到，把a[M][N]传进去干嘛呢？ 已经找到问题了！非常感谢！

引用 4 楼 weixin_40290083 的回复:按你的change函数的定义，第一个参数int *p,猜测你是想将二维数组传给该该当，当数组做为参数是传递的是指针，调用change函数是第一个参数应当是一个指针，那么正确的调用示例change(a,0,0,1,2);change函数中使用数组时，数组变量名应该为p,而不是a,如果你使用了变量名a,并且不报错的话，那么你的a数组应当是在所有方法外部定义的全局变量，那么参数p就没有意义了。 ！非常感谢！完美解决！！我的a确实是声明的全局变量orz 不过指针和数组做形参还是不太能理解，明天我再去翻翻资料。 总之非常感谢！！！

你是不是想这样写？ int change(int (*p)[N],int i,int j,int m,int n) { int t; t = p[i][j]; p[i][j] = p[m][n]; p[m][n] = t; }  int put() { change(a,0,0,1,2); change(a,0,1,2,1); change(a,M-1,N-1,1,1); change(a,2,1,1,0); change(a,2,0,0,1);  }

引用 1 楼 weixin_40290083 的回复:你的change函数是将二维数组的两个位置数进行交换。 change(a[M][N],M,N,1,1)会下标越界，C是不会抛异常，但是会有异常数据到a[1][1],修改A[M][N]的值 可能什么导致系统异常。 okkkkk谢谢！！解决了TVT   但还有一堆warning不知道是啥orz  可以问一下还有啥错吗_(:з」∠)_


Question: 求一个用C语言的万年历

#include <stdio.h> /**  * 万年历  */  //是否是闰年 int isLeap(int year) {     if((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))     {         return 1;     }     return 0; } //计算 从1900年1月1日开始 到指定年月经过了多少天 int getTotalDays(int year, int month) {     int totalDays = 0;     for(int i = 1900; i < year; i++) //计算到year-1年共多少天     {         if(isLeap(i))         {             totalDays += 366;         }else         {             totalDays += 365;         }     }      //计算year年的1到month月 共多少天     for(int m = 1; m <= month; m++)     {          if(m == 2){ //2月             if(isLeap(year))             {                 totalDays += 29;             }else             {                 totalDays += 28;             }         }             //每月30天的月份         else if(m == 4 || m == 6 || m == 9 ||m== 11)         {             totalDays += 30;         }             //每月31天的月份         else         {             totalDays += 31;         }     }      return totalDays; } //计算星期（参数：1900年1月1日开始 经过多少天） int getWeekDay(int totalDays) {     return totalDays % 7; } //计算某月共多少天 int getMonthDays(int year, int month) {     if(month == 2){ //2月         if(isLeap(year))         {             return 29;         }else         {             return 28;         }     }         //每月30天的月份     else if(month == 4 || month == 6 || month == 9 ||month == 11)     {         return 30;     }         //每月31天的月份     else     {         return 31;     } } //打印信息 void print(int year, int month) {     printf("--------%d 年 %d 月 日历--------\n", year, month);     printf("日   一   二   三   四   五   六\n"); //打印星期     int totalDays = getTotalDays(year, month-1); //从1900年1月1日开始到month-1月共多少天     int weekDay = getWeekDay(++totalDays); //计算第month月的第一天星期几      int monthTotalDays = getMonthDays(year, month);//本月多少天      for(int i = 0; i < weekDay; i++ )     {         printf("     ");     }      for(int i = 1; i <= monthTotalDays; i++)     {         if(totalDays % 7 == 6)         {             printf("%d\n",i);         }         else         {             if(i < 10)             {                 printf("%d    ",i);             }             else             {                 printf("%d   ",i);             }          }         totalDays ++;     }     printf("\n"); }  int main() { 	int year, month; 	printf("请输入年份:"); 	scanf("%d",&year); 	printf("\n请输入月份:"); 	scanf("%d",&month); 	print(year,month);     return 0; }

功能要求： 1、输入一个年份，输出是在屏幕上显示该年的日历。假定输入的年份在1940-2040年之间。 2、输入年月，输出该月的日历。 3、输入年月日，输出距今天还有多少天，星期几，是否是公历节日。


Question: 求解C语言

引用 4 楼 吖如的回复:#include<stdio.h> int main() { 	int i ,s=0; 	for(i=1;i<=100;i++) 	{ 		s=s+i; 	} 	printf("%d",s);  }  手敲的，这太简单了。，。。。。 你够霸气。以后跟你多学习。

引用 4 楼 吖如 的回复:#include<stdio.h> int main() { 	int i ,s=0; 	for(i=1;i<=100;i++) 	{ 		s=s+i; 	} 	printf("%d",s);  }  手敲的，这太简单了。，。。。。 尴尬看错题了

程序就是逻辑推理的实现。（找规律） 从上述表达式1+2-3+4-5.......来看，第一反应是偶数相加，减去奇数。 第二反正1也是奇数那么就可以从2开始 最后加个1，或者先加1。 再开始后边的逻辑实现，最终代码就实现了。

引用 2 楼 自信男孩 的回复:int add(int max_num) { 	int sum = 1, sign = -1, i, k;  	i = 2; 	while (i <= max_num) { 		if (i % 2 == 1) 			k = i * sign; 		else 			k = i; 		sum += k; 	}  	return sum; } 供参考～  int add(int max_num) { 	int sum = 1, sign = -1, i, k;  	i = 2; 	while (i <= max_num) { 		if (i % 2 == 1) 			k = i * sign; 		else 			k = i; 		sum += k; 		i++; 	}  	return sum; } 修改一下～

#include <stdio.h> #include <math.h>  int main() {     int i,sum=3;     for(i=3;i<=100;i++)     {         sum+=pow(-1,i)*i;     }     printf("%d",sum);     return 0; }


Question: 求大佬带飞（告急）！！！

引用 楼主 qq_45261495的回复:编写程序 对n个正负整数组成的序列进行整理，将所有负数排到非负数之前(要求：就地调整，不能利用另一个数组来存放结果数据，只能用一个临时变量来交换数据) 程序要具通用性，可以任意输入一组数据。 void sort(A[n]) {     i=0,j=n-1,x=A[n];    while(i<j)    {    	while(i<j&&A[j]>=0)    	j--;    	A[i]=A[j];    	while(i<j&&A[i]<0)    	i--;    	A[j]=A[i];    }     A[i]=x;  } 如果用这一方式对数据进行整理，那那完整的代码该怎么写啊？？？？

#include <iostream>  int main() {     int array[] = {0, -1, -2, -1, -3, 2, -5, 9};     int length = sizeof(array) / sizeof(int), boundary = 0;     while(array[boundary] < 0) {         ++boundary;     }     for(int index = boundary + 1; index < length; index++) {         if(array[index] < 0) {             std::swap(array[index], array[boundary++]);         }     }     return (0); }

引用 3 楼 提及的回复:

#include <stdio.h>  #define MAX_LEN		10  static void print_arr(int *arr, int len) { 	int i;  	for (i = 0; i < len; i++) 		printf("%d ", arr[i]); 	putchar(10); }  static void swap(int *p, int *q) { 	int tmp;  	tmp = *p; 	*p = *q; 	*q = tmp; }  int main(int args, char** argv)  { 	int array[MAX_LEN] = { 		8, -2, 3, 7, -5, 6, -10, -3, 9, -6 	};  	int i, j;  	print_arr(array, MAX_LEN);  	i = 0; j = MAX_LEN-1; 	while (i < j) { 		while (array[i] < 0) 			i++; 		while (array[j] > 0) 			j--; 		if (i < j) 			swap(&array[i], &array[j]); 		i++; 		j--; 	}  	print_arr(array, MAX_LEN);  	return 0; }  供参考～

引用 1 楼 提及的回复: #include <stdio.h> int main(int args, char** argv) {     char buf[] = {0xe8 ,0x80 ,0x81 ,0xe5 ,0xad ,0x90 ,0xe4 ,0xb8 ,0x8d ,0xe4 ,0xbc ,0x9a ,0xe3 ,0x80 ,0x82 ,0x0a, 0x00};     printf("%s", buf); }  哇噻，看不懂耶，能有基础点的语言么😂


Question: 调试好久快疯了，大佬帮忙看看

#include<stdio.h> #include<stdlib.h>  #define LEN sizeof(struct Stu1)  void lianbiao(); struct Stu1 *creat(void);  int n; struct Stu1 {  	char name[16]; 	char sex; 	int number; 	long int phone; 	char addr[32]; 	struct Stu1 *next; };  int main() {  	lianbiao(); 	system("pause"); 	return 0;  } struct Stu1 *creat(void) //将文件信息写入链表 { 	struct Stu1 *head, *p1, *p2; 	FILE *fp;  	n = 0; 	p1 = p2 = (struct Stu1*) malloc(LEN); 	head = NULL; 	if ((fp = fopen("information1.txt", "r")) == NULL) 	{  		printf("文件不存在！！！"); 		system("PAUSE"); 		exit(0); 	} 	fscanf(fp, "%s %c %d %ld %s\n", p1->name, &p1->sex, &p1->number, &p1->phone, p1->addr); 	//printf("%s\n", p1->name); 	//printf("%s, %c, %d, %ld, %s\n", p1->name, p1->sex, p1->number, p1->phone, p1->addr); 	while (!feof(fp)) 	{ 		n = n + 1; 		if (n == 1) 		{ 			head = p1; 			//fscanf(fp, "%s, %c, %d, %ld, %s\n", p1->name, &p1->sex, &p1->number, &p1->phone, p1->addr); 		} 		else   			p2->next = p1; 		p2 = p1; 		p1 = (struct Stu1*) malloc(LEN); 		if (!p1) 			exit(0); 		fscanf(fp, "%s %c %d %ld %s\n", p1->name, &p1->sex, &p1->number, &p1->phone, p1->addr); 	} 	free(p1); 	//p2->next = p1; 	p2->next = NULL; 	fclose(fp);  	return(head); } void lianbiao() //链表的输出 {  	struct Stu1 *pt; 	pt = creat(); 	while (pt != NULL) 	{  		printf("%s,%c,%d,%ld,%s\n", pt->name, pt->sex, pt->number, pt->phone, pt->addr); 		pt = pt->next; 	} 	//system("pause"); } 供参考  文件格式： 打什么  M  101  10086  阿萨路一号 树道德  M  102  13256  发生路二号 的风格  M  103  15623  我的路三号 不开放  M  104  18562  观点路四号 而发愁  M  105  36952  体侧路五号

getchar()

引用 2 楼 提及的回复:服了，  `fscanf(fp, "%[^,],%[^,],%d,%ld,%s", p1->name, &p1->sex, &p1->number, &p1->phone, p1->addr);`  `打什么，M，101，10086，阿萨路一号` 还有一个问题就是输出的窗口只能短暂存在，我刚看个结果，它就退出了

你在文件中使用的是中文的逗号，代码中fscanf又是英文的逗号，统一一下试试

大大大大大佬......


Question: 怎么调换第一个与第8个字节

C和C++完整教程:https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++算法完整教程:https://blog.csdn.net/it_xiangqiang/category_10768339.html

引用 3 楼 lin5161678的回复:[quote=引用 2 楼 不进则退1 的回复:] char b=NULL; b=a[7]; a[7]=a[0]; a[0]=b;NULL用得莫名其妙[/quote] 说的对。应该用更具体的值对char b进行初始化。

引用 4 楼 离水的鱼儿的回复:[quote=引用 3 楼 lin5161678 的回复：][quote=引用 2 楼 不进则退1 的回复:] char b=NULL; b=a[7]; a[7]=a[0]; a[0]=b;NULL用得莫名其妙[/quote]而且应该用无符号类型吧，有可能会超过表达式范围[/quote] 好的，学习了，谢谢。

引用 7 楼 自信男孩的回复:[quote=引用 2 楼 不进则退1 的回复:] char b=NULL; b=a[7]; a[7]=a[0]; a[0]=b; 直接用int就可以，定义int b; 不过，用NULL初始化确实有问题，不初始化也没关系，因为第一条语句就是b = a[7];[/quote] 受教了。谢谢。

引用 2 楼 不进则退1 的回复:char b=NULL; b=a[7]; a[7]=a[0]; a[0]=b;NULL用得莫名其妙

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

引用 6 楼 赵4老师 的回复:#include <stdio.h> #define SWAP(a,b) do ((&(a))!=(&(b)))?((a)^=(b)^=(a)^=(b)):((a)=(a)); while (0) char   *p1="1" ,*p2="2" ; char    c1=1   , c2=2   ; short   s1=1   , s2=2   ; int     i1=1   , i2=2   ; __int64 I1=1i64, I2=2i64; float   f1=1.0f, f2=2.0f; double  d1=1.0 , d2=2.0 ; void main() {     SWAP((int)p1,(int)p2);                printf("char *     %5s,   %5s\n",p1,p2);     SWAP(c1,c2);                          printf("char       %5d,   %5d\n",c1,c2);     SWAP(s1,s2);                          printf("short      %5d,   %5d\n",s1,s2);     SWAP(i1,i2);                          printf("int        %5d,   %5d\n",i1,i2);     SWAP(I1,I2);                          printf("__int64 %5I64d,%5I64d\n",I1,I2);     SWAP(*(int     *)&f1,*(int     *)&f2);printf("float      %5g,   %5g\n",f1,f2);     SWAP(*(__int64 *)&d1,*(__int64 *)&d2);printf("double    %5lg,  %5lg\n",d1,d2);      SWAP(c1,c1);     printf("%d\n",c1); } //char *         2,       1 //char           2,       1 //short          2,       1 //int            2,       1 //__int64     2,    1 //float          2,       1 //double        2,      1 //2 这是一个糟糕的做法  存在很多问题  比如   SWAP((int)p1,(int)p2); 直接是语法错误 表达式 (int)p1 不是左值 不能 &  只能交换整型 不能交换浮点

引用 2 楼 不进则退1 的回复:char b=NULL; b=a[7]; a[7]=a[0]; a[0]=b; 直接用int就可以，定义int b; 不过，用NULL初始化确实有问题，不初始化也没关系，因为第一条语句就是b = a[7];

数组访问交换不会么？

引用 3 楼 lin5161678 的回复：[quote=引用 2 楼 不进则退1 的回复:] char b=NULL; b=a[7]; a[7]=a[0]; a[0]=b;NULL用得莫名其妙[/quote]而且应该用无符号类型吧，有可能会超过表达式范围

char b=NULL; b=a[7]; a[7]=a[0]; a[0]=b;

std::swap(a[0], a[7]);


Question: 51单片机同时控制2个步进电机正反转

有限状态自动机

了解一下运行状态自动机


Question: 求教求教！！！

引用 1 楼 636f6c696e的回复:void func(int 1yuan_num, int 5jiao_num, int 1jiao_num, int *value) 具体点呗大神，我想要源码

二楼的函数头有点问题，标识符命名不能以数字开头 附上以下程序，估计只会被其他朋友鄙视，楼主这种自己完全不看书，不学习，只要求别人给答案，确实非常过分。  #include <iostream> void fun(int OneYuan, int FiveJiao, int OneJiao, int* Total) {     *Total = OneYuan * 10 + FiveJiao * 5 + OneJiao; } int main() {     std::cout << "分别给出元、伍角、角的硬币的个数：";     int a, b, c;     std::cin >> a >> b >> c;     int t;     fun(a, b, c, &t);     std::cout << "总金额为：" << t << "角。";      return 0; }

bool func(int 1yuan_num, int 5jiao_num, int 1jiao_num, int *value) {   if (1yuan_num < 1 || 5jiao_num < 1 || 1jiao_num < 1) return false;   *value = 1yuan_num * 10 + 5jiao_num * 5 + 1jiao_num;   return true; }

已经提示得这么明显了，自己都不肯试试，等着挂科吧


Question: C语言

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

引用 3 楼 赵4老师的回复:初中毕业还是接着上高中或自学高中课程去吧。 希望楼主不要犯类似 “早知道吃完第七个包子就饱了，我为什么还要吃前六个包子呢？！” 这种低级错误。 抱歉哈，初中成绩不怎么好，选择上了中专，专业计算机，目前正努力学习，两年后踏进本科，学习之余还是很想自学一下C语言，所以想让你们给我推荐推荐，谢谢啦

初中就开始学C了想当年我初中都不知道电脑是什么鬼

你先搜索一下各个语言所适用的领域 然后选择一个感兴趣的 买推荐书籍，看教学视频，多敲敲代码，尝试写点项目


Question: 命令行调用exe文件和我们直接双双击运行有什么不同？

环境变量不同 当前文件夹不同 父进程不同 ……

《深入解析Windows操作系统-Windows Internals》

引用 2 楼 赵4老师 的回复:环境变量不同 当前文件夹不同 父进程不同 …… 有无这个问题可以参考的参考学习资料

自己回一个，我去查了查父进程，是从cmd调用程序他开辟的空间不一样？或者说不会因为一些算法问题修改一些重要的系统文件？说的不对，轻喷


Question: 一道c语言编程题，求大佬解答

已经很好了

谁删我评论了。赵同学。

int main() {     solve();     arr_sort();     print();     return 0; } 解决

巨型模拟，一套带走

自己想出来总比问别人好

我是丁老师，明天上午9点我在学院204教室关于大作业进行答疑，你来找我一下；

xswl老哥，两百多行代码一把梭，至于放csdn上吗

引用 3 楼 636f6c696e 的回复：有啥难度，基础遍历统计题目那还请您解答一下咯

有啥难度，基础遍历统计题目

样例输入：  4 00:01 B Wrong Answer University of Deep Dark Fantasy 00:01 B Accepted University of Deep Dark Fantasy 00:01 C Accepted University of Deep Dark Fantasy 00:01 D Accepted University of Deep Dark Fantasy 00:11 A Accepted Deep Dark Institude of Fantasy 00:13 C Wrong Answer Banana University 01:01 C Wrong Answer Banana University 01:11 C Wrong Answer Banana University 02:01 C Runtime Error Deep Dark Institude of Fantasy 02:10 C Accepted Deep Dark Institude of Fantasy 02:30 A Accepted University of Deep Dark Fantasy 02:50 D Accepted Bon Sha Ka La Ka Higher School of Economics 02:51 C Accepted Bon Sha Ka La Ka Higher School of Economics 02:52 B Accepted Bon Sha Ka La Ka Higher School of Economics 02:53 A Accepted Bon Sha Ka La Ka Higher School of Economics 02:55 A Runtime Error University Van Billy 02:59 B Compile Error University Van Banana GAME OVER! 样例输出：  Rank  Who                                          Solved  Penalty    A    B    C    D    1              University of Deep Dark Fantasy       4      173    +   +1    +    +    2  Bon Sha Ka La Ka Higher School of Economics       4      686    +    +    +    +    3               Deep Dark Institude of Fantasy       2      161    +        +1         4                            Banana University       0        0             -3         4                         University Van Billy       0        0   -1


Question: linux和Windows下fprintf函数向文件写结果不一样

引用 3 楼 weixin_42297298 的回复:[quote=引用 2 楼 轻箬笠 的回复：]double和float比较相等都需要考虑误差的存在。 可以参考这个 https://www.cnblogs.com/zxls-zmr/archive/2013/04/19/3031342.html谢谢指点。现在我把这个精度限制加进去了也还是输出结果缺失，不知道还有什么其他的问题[/quote] 把完整代码贴出来看看

引用 2 楼 轻箬笠 的回复：double和float比较相等都需要考虑误差的存在。 可以参考这个 https://www.cnblogs.com/zxls-zmr/archive/2013/04/19/3031342.html谢谢指点。现在我把这个精度限制加进去了也还是输出结果缺失，不知道还有什么其他的问题

if (P[j] - Prg[j] == 0.0)，double的数据不能用==的。


Question: 求教c语言的题


Question: 询问各位大佬一个问题

引用 1 楼 user-1的回复:*(set0t+0)=*(list0t+0);你这写法也是有点怪怪的 set0t[0]=list0t[0];怎么容易读怎么写好点，看你是调试不同来运行了printf打印看，1。你加个检测在分配内存看看成功了没有 2.分配之前看看R是不是出了问题.3学会设置断点，单步调试对你分析有很大帮助 就是在我说的那个地方，开空间的时候，在特定情况开不出来。如果开空间数量在我说的那个区间，开空间malloc就会出错。


Question: 简单的c语言题，求解

#include<stdio.h> #include<iostream> #include<math.h> int diagcount(char * inputstr) { int i=0,count=0; while(inputstr[i]!='\0') { 	if(isdigit(inputstr[i])) 	{ 	  count++; 	} 	i++; }  return count; }   int main()  {    char getstrline[21];    printf("Please Input String(Max 20):");    gets(getstrline);     printf(" 数字字符个数:%d",diagcount(getstrline));     return 0;   }


Question: 新手求助QAQ

2l给你答案了，你第四行for循环加了；这样循环体就不循环了

你程序都没帖出来，怎么知道问题在哪呢？

你 for 那行语句后多加了一个 ;

void s(int a[],int len) { int i=0; for(i=0;i<len;i++) { printf("%d  ",a[i]); } printf("\n"); }


Question: 求寻大佬

正如5楼说的，学C/C++得会用最基本的程序调试方法，中断、单步执行、观察程序执行流程和数据变化总还是要学会的。

你先用一个最简单的程序来测试，不要在那里固执地认为你的输入操作是正确的。 #include <stdio.h> int main() { 	int a, b; 	scanf("%d,%d", &a, &b); 	printf("a=%d\nb=%d", a, b);  	return 0; }  #include <stdio.h> int main() { 	int a, b; 	scanf("%d%d", &a, &b); 	printf("a=%d\nb=%d", a, b);  	return 0; } 你测试上面两个程序再说什么“...闪退...我同学说..."。 scanf("%d,%d", &a, &b)   你既然指定要输入逗号，输入时a b时就必须用逗号隔开 scanf("%d%d", &a, &b)    则用空白符隔开

引用 6 楼 假装是靓仔 的回复：[quote=引用 5 楼 离水的鱼儿的回复:][quote=引用 4 楼 假装是靓仔 的回复：][quote=引用 3 楼 csucxy的回复:]scanf("%d,%d", &a, &b) 输入a、b的值时，应该以逗号分隔开。因为%d,%d之间有个逗号。 可是我有逗号的呀 难道说有空格不行吗[/quote]你截的图你输入的时候也没输入逗号啊，如果你定了格式就必须遵循格式输入，还有编程要学会调式，不会断点调试就用最简单的printf调试，查看值是否正确[/quote] 如果运行的时候输入逗号的话 会闪退（有视频为证） 我同学说 编译器会把逗号看做一个字符输进去 然后判定不是int型  然后就闪退[/quote]你输入的是中文逗号吧

引用 5 楼 离水的鱼儿的回复:[quote=引用 4 楼 假装是靓仔 的回复：][quote=引用 3 楼 csucxy的回复:]scanf("%d,%d", &a, &b) 输入a、b的值时，应该以逗号分隔开。因为%d,%d之间有个逗号。 可是我有逗号的呀 难道说有空格不行吗[/quote]你截的图你输入的时候也没输入逗号啊，如果你定了格式就必须遵循格式输入，还有编程要学会调式，不会断点调试就用最简单的printf调试，查看值是否正确[/quote] 如果运行的时候输入逗号的话 会闪退（有视频为证） 我同学说 编译器会把逗号看做一个字符输进去 然后判定不是int型  然后就闪退

引用 4 楼 假装是靓仔 的回复：[quote=引用 3 楼 csucxy的回复:]scanf("%d,%d", &a, &b) 输入a、b的值时，应该以逗号分隔开。因为%d,%d之间有个逗号。 可是我有逗号的呀 难道说有空格不行吗[/quote]你截的图你输入的时候也没输入逗号啊，如果你定了格式就必须遵循格式输入，还有编程要学会调式，不会断点调试就用最简单的printf调试，查看值是否正确

引用 3 楼 csucxy的回复:scanf("%d,%d", &a, &b) 输入a、b的值时，应该以逗号分隔开。因为%d,%d之间有个逗号。 可是我有逗号的呀 难道说有空格不行吗

引用 1 楼 csucxy的回复:没有代码，谁能回答你 是这样的 我把后面的都删掉了，只有输入的代码，然后运行 ，按道理不是应该一直运行，不会结束吗，但是他就也会出现第二张图

没有代码，谁能回答你


Question: 数据结构课程设计（C语言）

有代码吗

彩票优选号码问题：目前彩票市场中，比较多的是一类“乐透型”彩票，例如37选9，31选7以及21选5等等。以“21选5”这种类型的彩票为例，在购买彩票时候，从0～21中选择5个数字，5个数字的排列构成一组号码，成为“一注彩票”。在你选择好这样5个数构成的排列后，彩票售卖机，会打印出你选择的一注彩票，她会将个位数字前面补零，是的5个数字都是两个数字构成，例如，如果你选取了{2，5，8，16，21}这个5个数字，并且将它们一次排放在由左往右的第1位至第5位，那么彩票售卖机将打印选择一个10个的数字序列，如下： 			  02 05 08 16 21 需要注意的是，05 02 08 21 16同上面的数字序列，不是同一注彩票；并且在选择5个数字的时候，这个5个数字不能相同。 现在有些职业彩民，将购买彩票作为每日的一部分，有些职业彩民，长期购买彩票，搜集了彩票开卖以来的每期中将号码，在这些中将号码中，他们发现很少有两期中将号码一样的情况。在选号码的过程中，他们还会借助于一些软件，对自己钟爱的数字产生一些排列，考虑到以前已经中过奖的号码，他们会把这些筛选掉。请你提出解决方法，帮他们快速的从自己钟爱的数字产生的排列集合中找出已经中过奖的号码。为了方便起见，假定自己钟爱的数字产生的排列集合A以及前期中将号码的集合B里面的每一注号码，都由可以一个10个长度的数字字符串表示，两个集合里面的号码都由随即产生，号码注数都不少于5000个。 【基本要求】 （1）输入数据包括：自己钟爱的数字产生的排列集合A，以及前期中将号码的集合B，都存储在输入文件input.txt中；输出集合A和集合B中相同的号码字符串,存放在output.txt。 （2）集合A和B中的数据，号码字符串采用伪随机数的方式产生，每注中的5个数据不能重复。 （3）采用多种比较算法来实现相同号码字符串的查找，至少使用选择排序（或冒泡排序），快速排序（或者合并排序），堆排序（或者希尔排序）并且统计比较次数。 （4）在号码字符串的比较过程中，不能采用strcmp( )函数或者string类对象的方式比较，调用函数进行比较效率会比较低，建议将字符串转换成基本数据类型，例如int或者long类型进行比较。 （5）要提示菜单的方式，显示使用了多种排序算法来进行两个集合元素的比较。


Question: 这个桌面飘雪程序怎么才能让它一直飘啊，而不是转换窗口就会刷新

不要直接在桌面画雪花 创建一个对话框设置置顶窗口 设置透明 就可以了


Question: C语言

#include <stdio.h> #define PI 3.14  int main() {     float r,h,C,V,S;     scanf("%f%f",&r,&h);     C=2*PI*r;     S=PI*r*r;     V=S*h;     printf("C=%.2f\nS=%.2f\nV=%.2f",C,S,V);     return 0; }

解啥？代码？


Question: 萌新求助

引用 7 楼 离水的鱼儿的回复:Bfs  dfs 这个我都知道，只是对v1，v2的路线不了解

引用 6 楼 Italink的回复:嗯嗯，因为并没有到V1 V2的路线 好的，谢谢你，，，，，，，

Bfs  dfs

嗯嗯，因为并没有到V1 V2的路线

引用 4 楼 雨过丶天阴的回复:[quote=引用 3 楼 Italink的回复:]假设优先顺序是V1>V2>V3>V4>V5>V6>V7 深搜：v3-v4-v5-v6-v7 广搜：v3-v4v5v6-v7 就是v1，v2不用遍历是吗[/quote] 我画的这个有向图。。

引用 3 楼 Italink的回复:假设优先顺序是V1>V2>V3>V4>V5>V6>V7 深搜：v3-v4-v5-v6-v7 广搜：v3-v4v5v6-v7 就是v1，v2不用遍历是吗

引用 1 楼 Italink的回复:深搜，就跟走迷宫一样，有路就走，没路就回头，一直把所有的路都走一遍 广搜，也就是一层一层的处理 具体路径能不能帮我写一下


Question: 文件读写问题

//将字符串反序 每行不超过80个字符 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <conio.h> char *invert(char *s) {     char *p, *t, c;     int i;     p = s + strlen(s) - 2;     t = s;      for (i = (strlen(s) - 2); i >= (int)((strlen(s)-1) / 2); i--) {         c = *p;         *p = *t;         *t = c;         p--;         t++;     }     return s; } int main() {     char p[82];     char *a;     int i;     FILE*fp;     FILE*fp1;     if ((fp=fopen("p.txt","r"))==NULL)     {         perror("open error!");         getch();         exit(1);     }     if ((fp1=fopen("p1.txt","w"))==NULL)     {         fclose(fp);         perror("open error!");         getch();         exit(1);     }     while (1)     {         if (NULL==fgets(p,80,fp)) break;         a=invert(p);//逆序         fputs(a,fp1);     }     fclose(fp);     fclose(fp1);     return 1; }


Question: 大一C语言期末考试题目

引用 1 楼 user-1的回复:B 当C==2时，执行了case 0(什么也没有做)    case 1   case2，输出了两次c+4,即66 当C==4时，执行了case2 ，输出了C+4,即8 当C==7时，执行了default ,输出了c+2,即9  连起来就是6689 啊啊啊我明白了，谢谢你!


Question: 爸爸们救救孩子叭！求c语言取石子编程，今天就要交了呜呜呜

你这标题就是在侮辱你自己

游戏还要不断分别告诉两个人，剩余石子信息，比如单数，双数，或是几的倍数。


Question: 结构体如何运用啊？

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

链表是非线性的，数组是线性的，要使用链表就要使用结构体，同一个结构体在一段连续的内存空间，但是所有的链表节点不一定在连续的内存区域，但是线性表是在连续的内存区域。链表要删除某个数据节点，分为以下几步：1、找到要删除数据节点地指针，上一节点指针、下一节点指针，将上一节点结构体内的指针指向下一节点地址。回收本节点内存空间，如果不回收，小数据量是看不到影响，当数据量大时，就会体现出现，C不像C#或者JAVA那样，系统会自动回收内存空间，自己开辟的内存空间，当不使用时需要自己释放。


Question: 指针作为返回值问题

引用 9 楼 Lost_guangtou 的回复：萌新看了楼主的问题记录了一下自己的思路，大神绕路。 其中shuzu()函数是我自己想到的解决方法，match()是参考了楼主的思路，其实就是把char*当作char[]然后读取固定位置并显示出来。 #include "stdafx.h" #include <iostream> #include <string> #include<stdlib.h>  using namespace std; //把char*当作char[]数组来看 /*char *shuzu(char *str,char s1,char s2) { 	char *var = str; 	char *result = new char [50]; 	int len = strlen(var); 	int num1=0, num2=0; 	//char str_var[10]; 	for (int i = 0; i<len; i++) { 		if (s1 == var[i]) { 			num1 = i; 			break; 		} 	} 	for (int j = num1+1; j<len; j++) { 		if (s2 == var[j]) { 			num2 = j; 			break; 		} 	} 	for (int i = 0;i < num2;i++) { 		result[i] = var[num1++]; 		result[i+1] = '\0'; 	} 	return result; }; */  char *match(char *s, char c1, char c2) { 	char *c = s; 	char *t = new char[50]; 	char *result = new char[50]; 	int i = 0, j = 0,k=0,h=0; 	for (;*c != '\0';c++) { 		if (*c == c1) 		{ 			break; 		} 		i++; 	} 	//cout << i << endl; 	c = c++; 	for (;*c != '\0';c++) { 		if (*c == c2) 		{ 			break; 		} 		j++;	 	} 	//cout << j << endl; 	k = i + 1 + j; 	h = i;//记录i的位置后面要用 	//cout << k << endl; 	//cout << s << endl; 	for (int q = 0;q <= k-h;q++) { 		result[q] = s[i++]; 		result[q + 1] = '\0'; 	} 	//cout << result << endl; 	return result; };  int main() { 	char str[10]; 	char s1, s2; 	cout << "请输入一个字符串：" << endl; 	cin >> str;//获取用户输入字符串 	//cout << strlen(str) << endl; 	//cout << str; 	cout << "请选择第一个字符：" << endl; 	cin >> s1; 	//cout << s1; 	cout << "请选择第二个字符：" << endl; 	cin >> s2; 	//cout << s2; 	//char *t = shuzu(str, s1, s2); 	char *t = match(str, s1, s2); 	for (int j = 0; j<(strlen(t)); j++) { 		cout << t[j]; 	} 	system("pause");     return 0; }谢谢大佬，今天重新看了下帖子，我现在在学C，但是还是认真看了你们的代码，学习学习思路，感谢感谢

刚发现没有添加图片

补一下我的截图

第一个scanf去掉'\n'；然后在第二个scanf之前加一句getchar();即加在两个scanf中间。

谢谢赐教，你的代码我会好好琢磨琢磨的

引用 5 楼 自信男孩 的回复：[quote=引用 2 楼 weixin_45077334 的回复:] 还是一样的结果呢……，想请问一下我自定义的*match函数正确吗 贴出源码吧，不要用图片了[/quote]不好意思啊，新人，以后不用图片谢谢了

引用 3 楼 李文强liwq 的回复：while之前s++，往后挪一位，要不然还是第一个匹配谢谢大佬啊，才发现漏洞在此

引用 2 楼 weixin_45077334 的回复:还是一样的结果呢……，想请问一下我自定义的*match函数正确吗 贴出源码吧，不要用图片了

首先只从你自己写的match函数来讲，你应该在第二个循环while前加上s++;这样你前后两个循环才不会找到同一个'e'; 其次从编写函数的最基本原则上来讲，你要确定好你写的每个函数的功能是什么，然后在实现过程中要牢记它，否则你会给自己或别人挖坑。match功能是在s中查找出先后匹配c1和c2的字符串，那么你就不能修改s的值！！！起始你应该函数返回先后匹配c1和c2的字符序号；  可以参考下面的方法 bool match(const char* s, char c1, char c2, int* nIdx1, int* nIdx2) {     bool bMatched = false;     if (NULL == s)    {         return bMatched;    }      nIdx1 = -1;      nIdx2 = -1;     int nLen = strlen(s);     for (int i = 0; i < nLen; i++)     {         if (c1 == s[i])         {              *nIdx1 = i;         }         if (nIdx1 != -1 && c2 == s[i])         {             *nIdx2 = i;             bMatched = true;             break;         }     }      return bMatched;     }  main函数可以根据函数返回true、false来判断是否成功匹配，然后在输出:strmathed. if (bMatched && -1 != nIdx1 && -1 != nIdx2 && nIdx1 < nLen && nIdx2 < nLen) {     strncpy(strmathed, s[nIdx1], nIdx2 - nIdx1 + 1);     printf("%s", strmathed); } else {     printf("无匹配字符串."); }

while之前s++，往后挪一位，要不然还是第一个匹配

还是一样的结果呢……，想请问一下我自定义的*match函数正确吗


Question: 题目3：有三个硬盘文件A.txt和B.txt,C.txt,各存放一行字母，要求把这三个文件中的信息合并并排序（按字母顺序排列）， 并将结果输出到磁盘文件D.tx

谢谢你，1.2.已经该正了，应该是复制的前一份，没弄仔细(눈_눈)，不懂得就是3.4.，多谢你了

你这错误比较多了 1.fputc(a,D);  D不存在，应该是pD吧 2.先关闭了pD，再读取，应该读取不到正常数据 fclose(pD); fgets(str,99,pD); 3.fputc已经把pD的指针位置指向文件尾部了，你再用fgets读取不到正常数据，strlen就是了0了。   fputc后，应该重置下pD指针    fseek(pD,0,SEEK_SET);

刚学到文件处理这一块

fclose(pD);  //这里关闭了文件D，需要再打开，已可读方式打开 pD = fopen("D:\\D.txt", "r"); fgets(str,99,pD);//这里将D文件中的内容已经获取到了str变量里面 fclose(pD);//关闭文件 fopen("D:\\D.txt","w+");//清空文件D  fputs(str,pD);//排好序的字符串重新写入文件D

//有三个硬盘文件A.txt和B.txt,C.txt,各存放一行字母，要求把这三个文件中的信息合并并排序（按字母顺序排列）， 并将结果输出到磁盘文件D.txt 	FILE *pA=fopen("D:\\A.txt","r");     FILE *pB=fopen("D:\\B.txt","r");     FILE *pC=fopen("D:\\C.txt","r");     FILE *pD=fopen("D:\\D.txt","w+"); 	char a,b,c,d; 	char str[100]; 	int i,j; 	a=fgetc(pA); 	b=fgetc(pB); 	c=fgetc(pC); 	while(a!=EOF) 	{ 		fputc(a,pD); 		a=fgetc(pA); 	} 	while(b!=EOF) 	{ 		fputc(b,pD); 		b=fgetc(pB); 	} 	while(c!=EOF) 	{ 		fputc(c,pD); 		c=fgetc(pC); 	} 	fclose(pA); 	fclose(pB); 	fclose(pC); 	//fflush(pD); 	fclose(pD); 	pD = fopen("D:\\D.txt", "r"); 	fgets(str,99,pD); 	printf("before-str:%s\n\r",str); 	fclose(pD); 	fopen("D:\\D.txt","w+"); 	for(i=strlen(str)-1;i>1;i--){ 		for(j=0;j<i;j++){ 			if(str[j]>str[j+1]) 			{ 				d=str[j]; 				str[j]=str[j+1]; 				str[j+1]=d; 			} 		} 	} 	printf("after-str:%s\n\r",str); 	fputs(str,pD); 	fclose(pD);


Question: 求助，C语言一道期末考试题

引用 楼主 AZzzzAZ 的回复:#include<stdio.h>  int main() {     int a=0x4145;     char *p;     p=(char *)&a;     *p+=1;     printf("%X",*p);     return 0; } 为什么输出结果是46而不是4146啊? #include<stdio.h>   int main()  {      int a=0x4145;      char *p; 	 int *p1;      p=(char *)&a; 	 p1=(int*)p;      *p+=1;      printf("%X,%X",*p,*p1); 	 getchar();      return 0;  } 这样估计更明确一点

p分配为char* printf时自动转为BYTE的值，虽然都是指向a的地址，编译时根据类型决定输出读取多少内存

char *p; 一个char只占8bit，00-ff，怎么可能4146呢？

引用 8 楼 自信男孩的回复:[quote=引用 5 楼 AZzzzAZ 的回复:] [quote=引用 2 楼 android2008的回复:] char *p; 一个char只占8bit，00-ff，怎么可能4146呢？ 嗷，好的，那意思是是它从右向左读前面的高位舍去了是吗? (超小声，我的C语言学得很烂)[/quote] 不是高位舍去而是只读取一个字节，因为p是char *，那么*p可以理解为char类型。[/quote] 嗷，好滴，谢谢你!!!

引用 5 楼 AZzzzAZ 的回复:[quote=引用 2 楼 android2008的回复:] char *p; 一个char只占8bit，00-ff，怎么可能4146呢？ 嗷，好的，那意思是是它从右向左读前面的高位舍去了是吗? (超小声，我的C语言学得很烂)[/quote] 不是高位舍去而是只读取一个字节，因为p是char *，那么*p可以理解为char类型。

引用 6 楼 android2008的回复:[quote=引用 5 楼 AZzzzAZ 的回复:] [quote=引用 2 楼 android2008的回复:] char *p; 一个char只占8bit，00-ff，怎么可能4146呢？ 嗷，好的，那意思是是它从右向左读前面的高位舍去了是吗? (超小声，我的C语言学得很烂)[/quote] 可以这么理解。 int a=0x4145;在低字节在前（Little-Endian）的32位机器里存储的时从低地址到搞地址是： 0x45, 0x41, 0x00, 0x00，把&a转成char* p时，指针p指向的是0x45。[/quote] 好滴好滴!!!谢谢你呀♡

引用 5 楼 AZzzzAZ 的回复:[quote=引用 2 楼 android2008的回复:] char *p; 一个char只占8bit，00-ff，怎么可能4146呢？ 嗷，好的，那意思是是它从右向左读前面的高位舍去了是吗? (超小声，我的C语言学得很烂)[/quote] 可以这么理解。 int a=0x4145;在低字节在前（Little-Endian）的32位机器里存储的时从低地址到搞地址是： 0x45, 0x41, 0x00, 0x00，把&a转成char* p时，指针p指向的是0x45。

引用 2 楼 android2008的回复:char *p; 一个char只占8bit，00-ff，怎么可能4146呢？ 嗷，好的，那意思是是它从右向左读前面的高位舍去了是吗? (超小声，我的C语言学得很烂)