Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 逐步走入C语言

回复:
user: user-1
content: 引用 楼主 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语言程序怎么写吗？
user-0 提问: c语言顺序查找

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

user: user-2
content: 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)
user-0 提问: 如何编程空心三角形200行啊？？？？求大佬帮忙

回复:
user: user-1
content: no picture you say a jb

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

user: user-0
content: #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行，麻烦大佬们教练怎么增加行数

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

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

user: user-4
content: 现在伸手党都直接要论文了，你咋不上天呢
user-0 提问: 寻找最大元素和最小元素

回复:
user: user-1
content: #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 另外，排序会提高时间复杂度，用一层循环就可以求出最大值和第二最大值

user: user-2
content: 这个代码有问题吧，这是输出最大元素和第二大元素 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];
user-0 提问: 求解啦

回复:
user: user-1
content: 代码看不到不好准确定位到问题，还是建议直接贴代码吧

user: user-2
content: 引用 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++)

user: user-0
content: 引用 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"); 				}囊个处理哎？

user: user-2
content: 根据扫到的代码看，考虑极限条件，当 j =199， j+1 = 200，有可能数组越界，加一下判断条件，排除 j =199的情况
user-0 提问: c语言问题求大佬帮助

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

user: user-1
content: 这个问题不要管，因为不同编译器结果可能会不同。可能是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++标准的标准并没有规定以上问题，也就是说都是不违反标准，因此，程序员编程时应该避免写这种表达式及语句。

user: user-2
content: 我试了一下，i=1啊

user: user-2
content: 等一下我好像说错了

user: user-2
content: 先执行了赋值然后自增了吧

user: user-3
content: i=i++; 分解： i++   操作 保存i的内容（0） i加1，此时i变成1了 i=    赋值操作 把上面保存的值赋给i，即把0赋给i，i又变成0
user-0 提问: 急，c语言求解

回复:
user: user-1
content: #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;  }
user-0 提问: 求大佬解决一个小问题

回复:
user: user-1
content: 语句这样写 a=b=5;c=b+2;只要定义了a b c肯定是没有问题的

user: user-2
content: 呵呵，有一个运算符叫逗号运算符，有一种表达式叫逗号表达式

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

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

user: user-4
content: 为什么要用a＝b＝5   不能分别赋值呢？
user-0 提问: 按钮显示1-8  不显示0-7  有没有大佬看下

回复:
user: user-1
content: 引用 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],这样

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

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

user: user-1
content: 看num的赋值，赋值有问题，你按下按键0，num=1,table赋值了table[1],table也是从0开始计数。 而且你的table数组，排序对应的是不是，0~7，还有阴极，阳极问题。
user-0 提问: 请哪位大神，看一下，这个程序为什么运行不出来！着急等，谢谢！

回复:
user: user-0
content: 编译是没问题，但运行有问题

user: user-1
content: #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; } 供参考，程序有多处问题，建议自己对比查一下问题

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

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

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

user: user-3
content: 这种东西完全没有实用架子，闲得蛋疼

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

user: user-5
content: 逗号运算符，把最后一个逗号后面表达式的值赋值给k，经过两次+1，所以结果是D
user-0 提问: 想问问这个怎么做的 

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

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

user: user-2
content: 对于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 这个参数是还是谨慎为妙。

user: user-3
content: 比如当调用这个程序的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>
user-0 提问: *和&

回复:
user: user-0
content: 是我的理解问题，谢谢各位的解答！

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

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

user: user-3
content: 《牛肉干》 C语言上机课，某女同学偷偷吃起牛肉干。 有一粒牛肉干掉到了键盘上，卡在7和8键之间。 女同学就在键盘上抠啊、抠啊、抠啊…… 程序里一行代码变成这个样子： int *pa=&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&a; 后来的结局是 ————程序顺利通过编译，运行结果正确！
user-0 提问: ＃include在Windows7条件下不能运行，想问什么函数可以代替Windows.h函数。

回复:
user: user-1
content: graphics.h可以，也是做图形化的。

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

user: user-3
content: 引用 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;); }  // 以下都是你原来的代码

user: user-3
content: 没有问题，本来只是一行代码，有点长，折成两行了

user: user-4
content: c语言里也有个sleep，window里面也有Sleep，看你用哪个

user: user-4
content: 不可能啊，你发下错误，或者尝试添加MFC库

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

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

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

user: user-3
content: 自己写一个： #include <time.h>  static void Sleep(unsigned int dwMilliseconds) {   for (clock_t ticks = clock();         clock() - ticks < dwMilliseconds * (int)CLOCKS_PER_SEC / 1000;); }

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

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

user: user-5
content: windows.h首字母大小写都试试

user: user-6
content: conio.h和Windows.h一起用，亏楼主想得出来！

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

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

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

user: user-0
content: 引用 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....这个函数好像也少括号

user: user-7
content: 会全盘搜索windows.h文件在哪个文件夹下吗？ 如果搜不到，会安装VS20XX吗？

user: user-8
content: VS2015调试，把代码中的kbhit()改为_kbhit()即可，以下是调试画面
user-0 提问: 数据结构 学生搭配问题

回复:
user: user-1
content: 仅供参考：//舞会上，男士们（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);  }
user-0 提问: fopen函数问题

回复:
user: user-1
content: 是可执行文件的目录，不是动态库的目录，不要搞错了

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

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

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

user: user-5
content: 肯定支持相对路径的。 用getcwd获取当前的绝对路径看看
user-0 提问: 什么是踩内存？什么是内存越界？

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

user: user-2
content: #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; }
user-0 提问: 又遇到问题了

回复:
user: user-1
content: 建议直接贴代码～

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

user: user-2
content: q=hand hand来自q 可那个时候q也没有值啊
user-0 提问: 求教大佬!(关于用NULL和\0对字符指针初期化的问题)

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

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

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

user: user-4
content: (*strTest)='\0';   这样可以，不过括号是多余的  另外有个大问题，strTest没初始化，直接给 *strTest 赋值是有问题的。
user-0 提问: 有没有哪位大神能告诉我这个怎么写 用c语言   不会用结构体  十分感谢

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

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

user: user-2
content: 等着挂科重修呗，还有什么好写的
user-0 提问: 输入两个个数，求，这两个数的最大公约数和最小公倍数

回复:
user: user-0
content: 引用 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;             } 这是两个死循环。好的👌👌👌👌👌，

user: user-1
content: #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; }

user: user-2
content: 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;             } 这是两个死循环。
user-0 提问: C语言中形参的问题（大概）

回复:
user: user-1
content: 补充：仔细看看你的代码，错误很多，而且不知道你要完成功能

user: user-1
content: 你的change函数是将二维数组的两个位置数进行交换。 change(a[M][N],M,N,1,1)会下标越界，C是不会抛异常，但是会有异常数据到a[1][1],修改A[M][N]的值 可能什么导致系统异常。

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

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

user: user-2
content: 你是不是想这样写？ 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);  }

user: user-2
content: 如果你用MN来定义数组大小，a[M][N]全部越界了，还有a[M][N]传给change的时候是不是少了个取地址符&？这个函数里p没有用到，把a[M][N]传进去干嘛呢？

user: user-1
content: 按你的change函数的定义，第一个参数int *p,猜测你是想将二维数组传给该该当，当数组做为参数是传递的是指针，调用change函数是第一个参数应当是一个指针，那么正确的调用示例change(a,0,0,1,2);change函数中使用数组时，数组变量名应该为p,而不是a,如果你使用了变量名a,并且不报错的话，那么你的a数组应当是在所有方法外部定义的全局变量，那么参数p就没有意义了。

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

回复:
user: user-1
content: #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; }

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

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

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

user: user-2
content: #include<stdio.h> int main() { 	int i ,s=0; 	for(i=1;i<=100;i++) 	{ 		s=s+i; 	} 	printf("%d",s);  }  手敲的，这太简单了。，。。。。

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

user: user-4
content: 引用 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; } 修改一下～

user: user-4
content: 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; } 供参考～

user: user-5
content: #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; }
user-0 提问: 求大佬带飞（告急）！！！

回复:
user: user-0
content: 引用 楼主 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;  } 如果用这一方式对数据进行整理，那那完整的代码该怎么写啊？？？？

user: user-0
content: 程序要具通用性，可以任意输入一组数据。 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;  } 如果用这一方式对数据进行整理，那那完整的代码该怎么写啊？？？？

user: user-1
content: #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); }

user: user-0
content: 引用 3 楼 提及的回复:

user: user-2
content: #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; }  供参考～

user: user-3

user: user-0
content: 引用 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); }  哇噻，看不懂耶，能有基础点的语言么😂

user: user-3
content: #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); }
user-0 提问: 调试好久快疯了，大佬帮忙看看

回复:
user: user-1
content: #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  体侧路五号

user: user-2
content: getchar()

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

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

user: user-2
content: 服了，  `fscanf(fp, "%[^,],%[^,],%d,%ld,%s", p1->name, &p1->sex, &p1->number, &p1->phone, p1->addr);`  `打什么，M，101，10086，阿萨路一号`

user: user-0
content: 大大大大大佬......
user-0 提问: 求教求教！！！

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

user: user-1
content: void func(int 1yuan_num, int 5jiao_num, int 1jiao_num, int *value)

user: user-2
content: 二楼的函数头有点问题，标识符命名不能以数字开头 附上以下程序，估计只会被其他朋友鄙视，楼主这种自己完全不看书，不学习，只要求别人给答案，确实非常过分。  #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; }

user: user-3
content: 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; }

user: user-1
content: 已经提示得这么明显了，自己都不肯试试，等着挂科吧
user-0 提问: C语言

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

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

user: user-1
content: 初中毕业还是接着上高中或自学高中课程去吧。 希望楼主不要犯类似 “早知道吃完第七个包子就饱了，我为什么还要吃前六个包子呢？！” 这种低级错误。

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

user: user-3
content: 你先搜索一下各个语言所适用的领域 然后选择一个感兴趣的 买推荐书籍，看教学视频，多敲敲代码，尝试写点项目
user-0 提问: 命令行调用exe文件和我们直接双双击运行有什么不同？

回复:
user: user-1
content: 环境变量不同 当前文件夹不同 父进程不同 ……

user: user-1
content: 《深入解析Windows操作系统-Windows Internals》

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

user: user-0
content: 自己回一个，我去查了查父进程，是从cmd调用程序他开辟的空间不一样？或者说不会因为一些算法问题修改一些重要的系统文件？说的不对，轻喷
user-0 提问: 一道c语言编程题，求大佬解答

回复:
user: user-1
content: 已经很好了

user: user-2
content: 谁删我评论了。赵同学。

user: user-3
content: int main() {     solve();     arr_sort();     print();     return 0; } 解决

user: user-4
content: 巨型模拟，一套带走

user: user-5
content: 自己想出来总比问别人好

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

user: user-7
content: xswl老哥，两百多行代码一把梭，至于放csdn上吗

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

user: user-8
content: 有啥难度，基础遍历统计题目

user: user-9
content: 样例输入：  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
user-0 提问: linux和Windows下fprintf函数向文件写结果不一样

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

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

user: user-1
content: double和float比较相等都需要考虑误差的存在。 可以参考这个 https://www.cnblogs.com/zxls-zmr/archive/2013/04/19/3031342.html

user: user-1
content: if (P[j] - Prg[j] == 0.0)，double的数据不能用==的。
user-0 提问: 询问各位大佬一个问题

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

user: user-1
content: *(set0t+0)=*(list0t+0);你这写法也是有点怪怪的 set0t[0]=list0t[0];怎么容易读怎么写好点，看你是调试不同来运行了printf打印看，1。你加个检测在分配内存看看成功了没有 2.分配之前看看R是不是出了问题.3学会设置断点，单步调试对你分析有很大帮助
user-0 提问: 简单的c语言题，求解

回复:
user: user-1
content: #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;   }
user-0 提问: 新手求助QAQ

回复:
user: user-1
content: 2l给你答案了，你第四行for循环加了；这样循环体就不循环了

user: user-2
content: 你程序都没帖出来，怎么知道问题在哪呢？

user: user-3
content: 你 for 那行语句后多加了一个 ;

user: user-4
content: void s(int a[],int len) { int i=0; for(i=0;i<len;i++) { printf("%d  ",a[i]); } printf("\n"); }
user-0 提问: 求寻大佬

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

user: user-1
content: 你先用一个最简单的程序来测试，不要在那里固执地认为你的输入操作是正确的。 #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)    则用空白符隔开

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

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

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

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

user: user-1
content: scanf("%d,%d", &a, &b) 输入a、b的值时，应该以逗号分隔开。因为%d,%d之间有个逗号。

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

user: user-1
content: 没有代码，谁能回答你
user-0 提问: 数据结构课程设计（C语言）

回复:
user: user-1
content: 有代码吗

user: user-0
content: 彩票优选号码问题：目前彩票市场中，比较多的是一类“乐透型”彩票，例如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）要提示菜单的方式，显示使用了多种排序算法来进行两个集合元素的比较。

user: user-0
content: qq1163418353
user-0 提问: C语言

回复:
user: user-1
content: #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; }

user: user-2
content: 解啥？代码？
user-0 提问: 萌新求助

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

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

user: user-1
content: 深搜，就跟走迷宫一样，有路就走，没路就回头，一直把所有的路都走一遍 广搜，也就是一层一层的处理

user: user-2
content: Bfs  dfs

user: user-1
content: 嗯嗯，因为并没有到V1 V2的路线

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

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

user: user-1
content: 假设优先顺序是V1>V2>V3>V4>V5>V6>V7 深搜：v3-v4-v5-v6-v7 广搜：v3-v4v5v6-v7

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

回复:
user: user-1
content: //将字符串反序 每行不超过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; }
user-0 提问: 大一C语言期末考试题目

回复:
user: user-0
content: 引用 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 啊啊啊我明白了，谢谢你!

user: user-1
content: B 当C==2时，执行了case 0(什么也没有做)    case 1   case2，输出了两次c+4,即66 当C==4时，执行了case2 ，输出了C+4,即8 当C==7时，执行了default ,输出了c+2,即9  连起来就是6689
user-0 提问: 爸爸们救救孩子叭！求c语言取石子编程，今天就要交了呜呜呜

回复:
user: user-1
content: 你这标题就是在侮辱你自己

user: user-2
content: 游戏还要不断分别告诉两个人，剩余石子信息，比如单数，双数，或是几的倍数。
user-0 提问: 结构体如何运用啊？

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

user: user-2
content: 链表是非线性的，数组是线性的，要使用链表就要使用结构体，同一个结构体在一段连续的内存空间，但是所有的链表节点不一定在连续的内存区域，但是线性表是在连续的内存区域。链表要删除某个数据节点，分为以下几步：1、找到要删除数据节点地指针，上一节点指针、下一节点指针，将上一节点结构体内的指针指向下一节点地址。回收本节点内存空间，如果不回收，小数据量是看不到影响，当数据量大时，就会体现出现，C不像C#或者JAVA那样，系统会自动回收内存空间，自己开辟的内存空间，当不使用时需要自己释放。
user-0 提问: 题目3：有三个硬盘文件A.txt和B.txt,C.txt,各存放一行字母，要求把这三个文件中的信息合并并排序（按字母顺序排列）， 并将结果输出到磁盘文件D.tx

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

user: user-1
content: 你这错误比较多了 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);

user: user-2
content: 刚学到文件处理这一块

user: user-3
content: 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

user: user-3
content: //有三个硬盘文件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);
user-0 提问: 求助，C语言一道期末考试题

回复:
user: user-1
content: 引用 楼主 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;  } 这样估计更明确一点

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

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

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

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

user: user-0
content: 引用 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] 好滴好滴!!!谢谢你呀♡

user: user-2
content: 引用 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。

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

回复:
user: user-1
content: 标准答案.c

user: user-2
content: #include<iostream.h> #include<春夏秋冬.h> void main(){   printf("Hello,生长情况\n\r"); }

user: user-3
content: #include<iostream.h> #include<stdlib.h> void main(){   printf("Hello,春夏秋冬\n\r"); }
user-0 提问: 大佬帮忙看看哪里有问题

回复:
user: user-1
content: 你的链表没有连接到一块，按下面代码修改下。另外你malloc的内存没有free掉，在打印后free下。  while(flag!='N')     { 		printf(" please in put name\n"); 		scanf("%s",str); 		getchar(); 		p2=(struct student *)malloc(sizeof(struct student)); 		strcpy(p2->name,str); 		p2->next = NULL; 		p1->next=p2; //新来的链表，放在尾指针p1的next 		printf("continuing?"); 		scanf("%c",&flag); 		p1 = p2; //p1指向链表最后一个     }  void main() {     struct student *head,*p;     head=creat(); 		 	p = head; 	struct student *temp;     while(p!=NULL)     { 		printf("name is %s\n",p->name); 		temp = p;         p=p->next; 		 		free(temp); //使用完毕要释放内存     } }
user-0 提问: 哈夫曼树的编码译码

回复:
user: user-1
content: https://blog.csdn.net/qq_40946921/article/details/90267205

user: user-0
content: 引用 2 楼 动力风暴的回复:建议粘贴代码用格式  #include<stdio.h> #include <stdlib.h> #include <string.h>  #define maxval 100000000.0  typedef struct { char ch; float weight; int lchild,rchild,parent; }hufmtree; typedef struct { char bits[100];    int start;     char ch;       }codetype; int n, m; char *values; float *weights;  👍哈哈哈哈哈哈哈哈哈哈哈哈哈

user: user-2
content: 建议粘贴代码用格式  #include<stdio.h> #include <stdlib.h> #include <string.h>  #define maxval 100000000.0  typedef struct { char ch; float weight; int lchild,rchild,parent; }hufmtree; typedef struct { char bits[100];    int start;     char ch;       }codetype; int n, m; char *values; float *weights;
user-0 提问: while (scanf_s("%d", &temp)==1)循环以外的语句无法执行，这是为什么啊？

回复:
user: user-1
content: while (scanf_s("%d", &temp)==1)执行条件是scanf_s的返回值等于1，并不是temp等于1,scanf_s的返回值是读取的个数，你的刚刚好读取一个数，不会跳出的

user: user-0
content: 引用 1 楼 此生注定孤独的回复:你的while陷入了死循环啊---后面的没执行~ 我在while(scanf_s)中scanf_s的前面加上fflush(stdin)，也试着在条件中加了getchar()，虽然这两个办法都不会再让我继续输入了，但是还是不执行printf，按下enter之后直接闪退，这是为什么呢？

user: user-2
content: 你的while陷入了死循环啊---后面的没执行~
user-0 提问: C语言题目

回复:
user: user-1
content: 引用 4 楼 来不及的如果 的回复:我C语言初学啊！我真的看不懂啊 这不是看得懂看不懂的问题。编程需要实践。既然入了C语言的坑，那肯定写过hello world吧。既然写过hello world，print应该会用吧。把你问的问题复制到vs（vc6或者turbo c，不清楚现在用到ide是哪种），这个不难吧。直接编译跑一遍是最基础的吧。哪里不会或者不懂的，用print打印下，不难吧。 等你把上面那些都搞明白了。实在不理解数组的内存分布，再来问问，或者问问老师，应该就能理解了吧。

user: user-0
content: 引用 3 楼 轻箬笠的回复:楼主也太懒了吧。这种题直接放到vs里面跑一遍就知道了。如果不确定num[0]和num[1]里面的数值，std::cout打印下就知道了。再不清楚，看看什么叫数组，数组的内存排列顺序和数组的初始化也能懂。直接问，就算给了你答案，除了应付了这道题目，你还得到什么了 我C语言初学啊！我真的看不懂啊

user: user-1
content: 楼主也太懒了吧。这种题直接放到vs里面跑一遍就知道了。如果不确定num[0]和num[1]里面的数值，std::cout打印下就知道了。再不清楚，看看什么叫数组，数组的内存排列顺序和数组的初始化也能懂。直接问，就算给了你答案，除了应付了这道题目，你还得到什么了

user: user-2
content: 这不是共用体的问题，共用体应该是union关键字，而不是struct

user: user-2
content: 其实主要是把num[0].y, num[0].x， num[1].x的值打出来就可以知道为啥结果为6了 3/1 × 2 = 6  struct  complex { int x; int y; }num[2]={ {1,3},{2,7}};
user-0 提问: C语言问题

回复:
user: user-0
content: 这张清楚些

user: user-0
content: 这是输出结果。

user: user-1
content: 应该是24吧,j分配的是一个内存，每加一次都自加先运算括号内的三次 j就等于8了 8+8+8=24
user-0 提问: VS 2019 的操作问题

回复:
user: user-1
content: 按键盘上的ins键

user: user-0
content: 引用 1 楼 user-2的回复:文件输入有插入模式和替换模式，切换按键Insert 问题已解决 多谢！！！！

user: user-2
content: 文件输入有插入模式和替换模式，切换按键Insert