Question: 求改整代码，还是我写错了

引用 3 楼 liups 的回复:#include <stdio.h>  int main(void) {     unsigned int x;       scanf("%x", &x);      x = x & 0x0f;      printf("%02x\n", x);     return 0; } 基本上是以上代码。但是题目和我给的代码都有一个问题：如何保证变量x是16位的？这个和编译器有关 引用 3 楼 liups 的回复:#include <stdio.h>  int main(void) {     unsigned int x;       scanf("%x", &x);      x = x & 0x0f;      printf("%02x\n", x);     return 0; } 基本上是以上代码。但是题目和我给的代码都有一个问题：如何保证变量x是16位的？这个和编译器有关 更正一下，0x0f应该是0xff，因为一个16进制数只有4位！

引用 6 楼 自信男孩 的回复:[quote=引用 5 楼 liups 的回复:] [quote=引用 4 楼 自信男孩 的回复:] [quote=引用 3 楼 liups 的回复:] #include <stdio.h>  int main(void) {     unsigned int x;       scanf("%x", &x);      x = x & 0x0f;      printf("%02x\n", x);     return 0; } 基本上是以上代码。但是题目和我给的代码都有一个问题：如何保证变量x是16位的？这个和编译器有关 不用要求编译器是16位的吧 可以考虑去掉高16位，保留低16位[/quote] 题目本身就暗示这个整数是16位的，而编译器太复杂了，鬼知道多少位，所以题目就有问题（当然有些教材本身就是错的，好象谭的书就直接讲int 16位）[/quote] 定义成unsigned short x;就可以了吧[/quote]  引用 6 楼 自信男孩 的回复:[quote=引用 5 楼 liups 的回复:] [quote=引用 4 楼 自信男孩 的回复:] [quote=引用 3 楼 liups 的回复:] #include <stdio.h>  int main(void) {     unsigned int x;       scanf("%x", &x);      x = x & 0x0f;      printf("%02x\n", x);     return 0; } 基本上是以上代码。但是题目和我给的代码都有一个问题：如何保证变量x是16位的？这个和编译器有关 不用要求编译器是16位的吧 可以考虑去掉高16位，保留低16位[/quote] 题目本身就暗示这个整数是16位的，而编译器太复杂了，鬼知道多少位，所以题目就有问题（当然有些教材本身就是错的，好象谭的书就直接讲int 16位）[/quote] 定义成unsigned short x;就可以了吧[/quote] 虽然目前碰到的short都是16位的，但是标准中可不是这样描述的

引用 5 楼 liups 的回复:[quote=引用 4 楼 自信男孩 的回复:] [quote=引用 3 楼 liups 的回复:] #include <stdio.h>  int main(void) {     unsigned int x;       scanf("%x", &x);      x = x & 0x0f;      printf("%02x\n", x);     return 0; } 基本上是以上代码。但是题目和我给的代码都有一个问题：如何保证变量x是16位的？这个和编译器有关 不用要求编译器是16位的吧 可以考虑去掉高16位，保留低16位[/quote] 题目本身就暗示这个整数是16位的，而编译器太复杂了，鬼知道多少位，所以题目就有问题（当然有些教材本身就是错的，好象谭的书就直接讲int 16位）[/quote] 定义成unsigned short x;就可以了吧

引用 4 楼 自信男孩 的回复:[quote=引用 3 楼 liups 的回复:] #include <stdio.h>  int main(void) {     unsigned int x;       scanf("%x", &x);      x = x & 0x0f;      printf("%02x\n", x);     return 0; } 基本上是以上代码。但是题目和我给的代码都有一个问题：如何保证变量x是16位的？这个和编译器有关 不用要求编译器是16位的吧 可以考虑去掉高16位，保留低16位[/quote] 题目本身就暗示这个整数是16位的，而编译器太复杂了，鬼知道多少位，所以题目就有问题（当然有些教材本身就是错的，好象谭的书就直接讲int 16位）

引用 3 楼 liups 的回复:#include <stdio.h>  int main(void) {     unsigned int x;       scanf("%x", &x);      x = x & 0x0f;      printf("%02x\n", x);     return 0; } 基本上是以上代码。但是题目和我给的代码都有一个问题：如何保证变量x是16位的？这个和编译器有关 不用要求编译器是16位的吧 可以考虑去掉高16位，保留低16位

#include <stdio.h>  int main(void) {     unsigned int x;     //scanf("%d", &x);     scanf("%x", &x);      //printf("%x\n", x);     x = ((~(x >> 8) & 0xff) << 8) + (x & 0xff);      printf("%x\n", x); /*     int count = 0;     int i;     for (i = 0; i < 8; i++)     {         if (x & 1 == 1)         {             count++;         }         x = x >> 1;     }     printf("%d\n", count);     */     return 0; } 供参考，你的程序在计算1出现的次数，而不是按照要求里的写的吧

%d不对，%x才是16进制！ 另外，这题显然应该是按位异或


Question: 位运算，求大佬给出代码，不太理解

#include <stdio.h>  int main(void) {     unsigned int x;     int count = 0;     int i;      scanf("%d", &x);      for (i = 0; i < 8; i++)     {         if ((x & 1) == 1)         {             count++;         }         x = x >> 1;     }     printf("%d\n", count);     return 0; } 供参考～你发了多个帖子，注意帖子的标题以及需求，不要搞混了。

int main(void){ 	unsigned short x; 	scanf("%x", &x); 	x = x & 0x00FF; 	printf("%x", x); 	return 0; } 怎么不对呀

除以2取余输出就行

取余输出就行


Question: 那位小哥哥，帮帮忙

这问题点数怎么得

#include<stdio.h> #include<stdlib.h>  struct student{  	float a;  	float b;  	float c;  	float avg;  }a[5];    int main()  {  	int i=0; 	for(i;i<5;i++){ 	 	printf("请输入第%d学生的三门课程\n",i+1); 	printf("请输入第1门课程的成绩:"); 	scanf("%f",&a[i].a); 	printf("请输入第2门课程的成绩:"); 	scanf("%f",&a[i].b); 	printf("请输入第3门课程的成绩:"); 	scanf("%f",&a[i].c); 	a[i].avg=(a[i].a+a[i].b+a[i].c)/3.0; 	system("cls"); 	 	} 	for(i=0;i<5;i++){     printf("第%d位同学的平均分为:%.2f\n",i+1,a[i].avg); 	}  	 return 0;  }


Question: C语言

贴代码吧，图片里的代码不完整

C和C++语法有区别的


Question: 简单c语言问题

函数参数只传值。

在C++中，每次调用函数时都会重新创建它的形参，并用传入的实参对形参进行初始化。  void func(char a)   {   a = 'a';   return;    char b = 'b';   func(b); 变量a是func()函数的形参，变量b是func()函数的实参。此时，在func()函数内部会创建一个临时变量保存实参的值，即字符’b’，接下来对该临时变量进行赋值，将其赋值为字符’a’，之后函数返回。此时，变量b的值并没有发生改变，其值依然是字符’b’。 具体请参考《C++中函数参数类型为指针的指针》 希望能够帮到你

引用 2 楼 Eleven 的回复:你传递的参数只是变量的副本，并不是变量它本身~你把fun的第三个参数修改成引用类型，如void fun(int a, int b, int& c)c没有引用，那是c++的东西

～ 因为此c非彼c。 其一，C语言的函数的参数的传递方式是值传递，只认传过去的值，不认变量名，所以你上面的函数fun的第3个参数传入的只是main函数中的变量c的值，并不是变量c。 其二，函数fun没有返回值，尽管有一条语句是做计算，但是这对于fun函数以外的世界而言根本没有任何影响。 其三，在main函数中变量c没有被初始化，最后的输出语句输出的值也不一定是0，也可能是其他的一个随机值，具体要看编译器和依据的标准版本。 ～ 改进方案的话，除了一楼的让fun函数有一个返回值之外，还可以使用传递指针的方式来传递参数，具体如下：  #include <stdio.h>  void func(int a, int b, int* c);  int main(void) { 	int c; 	func(2, 3, &c); 	printf("%d\n", c); 	return 0; }  void func(int a, int b, int* c) { 	*c = a * b; }  如有帮助，烦请及时结贴、给分！ ：-） ～

应该输出的是一个随机数，不一定是0或6。因为你并没有把func函数里的c的值带出来，func中的c是局部变量，函数执行完会把它释放掉 因此，不会影响main函数里的c的值。

可以写成返回值为int 类型的函数  #include <stdio.h>  int fun(int a, int b) { 	int c = a * b; 	return c; }  int main() { 	int c; 	c = fun(2, 3); 	printf("%d", c); 	return 0; }

因为你这个传值方式，是不会改变c的值，可以看看这篇文章https://blog.csdn.net/weixin_43956598/article/details/90055036


Question: 跪求大佬帮我看下哪里有错

引用 1 楼 user-2 的回复：接分   #define MAX_LEN 256 int my_strtoint(char * mystr) { 	char temp_str[MAX_LEN]={0}; 	int i=0,j=0; 	while(mystr[i]!='\0'&&i<MAX_LEN) 	{ 		if(isdigit(mystr[i])) 		{ 			temp_str[j]=mystr[i]; 			j++;  		}        i++; 	} 	return atoi(temp_str); }   int main(){ 	 char strline[MAX_LEN]={0}; 	 FILE *fpt; 	if((fpt=fopen("A1.txt","a+"))==NULL) 	{ 		printf("Can't open file.\n"); 		return -1; 	}   	int result_int=0; 	int line_count=0; 	while(fgets(strline,MAX_LEN,fpt)!=NULL) 	{ 	   line_count=my_strtoint(strline); 	   result_int+=line_count;        printf("read line str:%s   =>:%d\r\n",strline,line_count); 	   if(feof(fpt)||ferror(fpt))break; 	}  	 fseek(fpt, SEEK_END, 0); 	 printf("total is:%d",result_int); 	 fprintf(fpt,"\r%d",result_int); 	 getchar();      return 0;  }  谢谢谢谢！

引用 2 楼 自信男孩 的回复：[quote=引用 1 楼 user-2 的回复:] 接分   #define MAX_LEN 256 int my_strtoint(char * mystr) { 	char temp_str[MAX_LEN]={0}; 	int i=0,j=0; 	while(mystr[i]!='\0'&&i<MAX_LEN) 	{ 		if(isdigit(mystr[i])) 		{ 			temp_str[j]=mystr[i]; 			j++;  		}        i++; 	} 	return atoi(temp_str); }   int main(){ 	 char strline[MAX_LEN]={0}; 	 FILE *fpt; 	if((fpt=fopen("A1.txt","a+"))==NULL) 	{ 		printf("Can't open file.\n"); 		return -1; 	}   	int result_int=0; 	int line_count=0; 	while(fgets(strline,MAX_LEN,fpt)!=NULL) 	{ 	   line_count=my_strtoint(strline); 	   result_int+=line_count;        printf("read line str:%s   =>:%d\r\n",strline,line_count); 	   if(feof(fpt)||ferror(fpt))break; 	}  	 fseek(fpt, SEEK_END, 0); 	 printf("total is:%d",result_int); 	 fprintf(fpt,"\r%d",result_int); 	 getchar();      return 0;  }   以a+的模式打开文件，是不是前面的字符串就读取不到了？  是不是应该以"r+"的模式打开文件[/quote]谢谢谢谢！

引用 3 楼 自信男孩 的回复：#include <stdio.h> #include <string.h> #include <ctype.h>  int convert_number(const char *str);  int main() {     FILE *fpt;     int count=0,i,j,len,x;     char ch[50];      //if((fpt=fopen("A1.txt","r"))==NULL)     if((fpt=fopen("A1.txt","r+"))==NULL)     {         printf("Can't open file.\n");         return -1;     }     //ch[50]=fgetc(fpt);     while (fgets(ch, 50, fpt)) {         count += convert_number(ch);     }      snprintf(ch, 50, "%d", count);      fputs(ch, fpt);     /*     int a[len];     char *p = ch;     for(i=0;i<len;i++)     {      x=*(p+i);      if (isdigit(x))      {          a[j]=x;          printf("%d",x);          j++;          count=count+x;      }     }     */      fclose(fpt);     printf("这些整数和为%d\n",count);     return 0; }  int convert_number(const char *str) {     const char *tmp = str;     int num = 0;      while (*tmp) {         if (isdigit(*tmp))             num = num * 10 + (*tmp - '0');         tmp++;     }      return num; } 供参考～，可以用你老师的.txt文件测试一下，有问题再提出来。谢谢谢谢！

引用 1 楼 user-2 的回复:接分   #define MAX_LEN 256 int my_strtoint(char * mystr) { 	char temp_str[MAX_LEN]={0}; 	int i=0,j=0; 	while(mystr[i]!='\0'&&i<MAX_LEN) 	{ 		if(isdigit(mystr[i])) 		{ 			temp_str[j]=mystr[i]; 			j++;  		}        i++; 	} 	return atoi(temp_str); }   int main(){ 	 char strline[MAX_LEN]={0}; 	 FILE *fpt; 	if((fpt=fopen("A1.txt","a+"))==NULL) 	{ 		printf("Can't open file.\n"); 		return -1; 	}   	int result_int=0; 	int line_count=0; 	while(fgets(strline,MAX_LEN,fpt)!=NULL) 	{ 	   line_count=my_strtoint(strline); 	   result_int+=line_count;        printf("read line str:%s   =>:%d\r\n",strline,line_count); 	   if(feof(fpt)||ferror(fpt))break; 	}  	 fseek(fpt, SEEK_END, 0); 	 printf("total is:%d",result_int); 	 fprintf(fpt,"\r%d",result_int); 	 getchar();      return 0;  }   以a+的模式打开文件，是不是前面的字符串就读取不到了？  是不是应该以"r+"的模式打开文件

你的要求好像有这条:并把每行转换出来的整数求和且写入到该文件的尾部。  现在查文档这么方便，资料动动手指就有了。主要分读写模式，还有二进制文件还是文本文件，读取之前可以fseek到文件头 字符串 说明  r 以只读方式打开文件，该文件必须存在。  r+ 以读/写方式打开文件，该文件必须存在。  rb+ 以读/写方式打开一个二进制文件，只允许读/写数据。  rt+ 以读/写方式打开一个文本文件，允许读和写。  w 打开只写文件，若文件存在则文件长度清为零，即该文件内容会消失；若文件不存在则创建该文件。  w+ 打开可读/写文件，若文件存在则文件长度清为零，即该文件内容会消失；若文件不存在则创建该文件。  a 以附加的方式打开只写文件。若文件不存在，则会创建该文件；如果文件存在，则写入的数据会被加到文件尾后，即文件原先的内容会被保留（EOF 符保留）。  a+ 以附加方式打开可读/写的文件。若文件不存在，则会创建该文件，如果文件存在，则写入的数据会被加到文件尾后，即文件原先的内容会被保留（EOF符不保留）。  wb 以只写方式打开或新建一个二进制文件，只允许写数据。  wb+ 以读/写方式打开或新建一个二进制文件，允许读和写。  wt+ 以读/写方式打开或新建一个文本文件，允许读和写。  at+ 以读/写方式打开一个文本文件，允许读或在文本末追加数据。  ab+ 以读/写方式打开一个二进制文件，允许读或在文件末追加数据。    引用 6 楼 lhr1237 的回复:[quote=引用 1 楼 user-2 的回复：]接分   #define MAX_LEN 256 int my_strtoint(char * mystr) { 	char temp_str[MAX_LEN]={0}; 	int i=0,j=0; 	while(mystr[i]!='\0'&&i<MAX_LEN) 	{ 		if(isdigit(mystr[i])) 		{ 			temp_str[j]=mystr[i]; 			j++;  		}        i++; 	} 	return atoi(temp_str); }   int main(){ 	 char strline[MAX_LEN]={0}; 	 FILE *fpt; 	if((fpt=fopen("A1.txt","a+"))==NULL) 	{ 		printf("Can't open file.\n"); 		return -1; 	}   	int result_int=0; 	int line_count=0; 	while(fgets(strline,MAX_LEN,fpt)!=NULL) 	{ 	   line_count=my_strtoint(strline); 	   result_int+=line_count;        printf("read line str:%s   =>:%d\r\n",strline,line_count); 	   if(feof(fpt)||ferror(fpt))break; 	}  	 fseek(fpt, SEEK_END, 0); 	 printf("total is:%d",result_int); 	 fprintf(fpt,"\r%d",result_int);          fclose(ftp); 	 getchar();      return 0;  }  谢谢谢谢！[/quote]


Question: 求  用C编写一函数，实现输入一公民18位身份证，输出其年龄及性别

18位身份证号码：第7、8、9、10位为出生年份(四位数)，第11、第12位为出生月份，第13、14位代表出生日期，第17位代表性别，奇数为男，偶数为女。 利用字符串，然后按照对应位去解析字符串，不是很难，建议自己先写写


Question: 关于自制操作系统

楼主说的可能是极简内核吧？多线程支持吗？

网络操作 tcp /ip 驱动协议。。你自己实现

精神鼓励一下

你如果真的写出了操作系统，我想咱们国家也不至于受制于别人，不是看不起你，这个操作系统真的不好搞，不然也不会有贸易战了吧 建议贴出你的代码，看看你的操作系统能不能直接在裸板上运行

楼主还是把代码发到github，然后发给链接上来先

引用 7 楼 自信男孩 的回复:[quote=引用 5 楼 早打大打打核战争 的回复:] 贸易战和有没有自主操作系统一点关系都没有，主要是一个政治问题，中国20多年前都是UNIX版权方之一了 俺说的意思是没有核心科技。那有多少人用的是国产的UNIX？还是没有普及，是大家不用还是技术不够完善，说来说去都是缺少核心科技。[/quote]  只是推广的问题，不是有没有的问题，美国又有多少人用UNIX，还不是大部分windows

引用 5 楼 早打大打打核战争 的回复:贸易战和有没有自主操作系统一点关系都没有，主要是一个政治问题，中国20多年前都是UNIX版权方之一了 俺说的意思是没有核心科技。那有多少人用的是国产的UNIX？还是没有普及，是大家不用还是技术不够完善，说来说去都是缺少核心科技。

精神上支持，无数个SB般的坚持就能成为牛B的存在，只要有人不断的偿试，也算是好事情。


Question: xcode添加file的问题

https://lhdst-163-com.iteye.com/blog/1796798 我之前碰到类似问题，参考这里解决的，


Question: C语言图书管理系统

http://j.gs/Cq5t 看看这篇文章，自己照着写就ok拉

引用 1 楼 user-2的回复:基础数据结构，有什么问题t 写不来，水平有限，感觉无从下手

基础数据结构，有什么问题t


Question: C primer Plus 指向字符常量的指针初始化

m3是一个指针，指针变量里存放的是地址值，你这样初始化，说明是将字符串常量的首地址赋值给了m3， 可以理解为m3指针指向了字符串常量 可以这么理解  const char *m3 = &"enough ... name"[0]; "enough ... name"[0]就是'e'

引用 1 楼 user-2的回复:const char *m3="\Enough ..... name?";  这句分成两部分：程序编译之后"\Enough ..... name?"; 这个字符串在你的程序中会存在某个地方，运行时会加载到内存，加载到内存必然会有个内存指针指向它，把这个地址给char *m3肯定是没问题的; 编译之前编译器会分析你程序用到的常量，假如放在exe的数据段他么这向字符串编译器会解释为一个地址，char *m3是一个DWORD值，这个值就是="\Enough ..... name?"; 的地址 1.先分配地址给常量字符串="\Enough ..... name?";  2.让*m3=第一步分配的地址 后面看了下书，不知道理解的对不对。 字串符量类似于数组名称，它的数值等于第一个字符的地址。 也就是说"enough ... name" ==  &('e') 所以const char *m3="\Enough ..... name?"; 实际上m3指向'e'的地址，并且不能通过指针修改字符串内容  欢迎大家指正


Question: 自定义函数，函数名是_max，找出上表中的任意两名学生，找出此两名学生中成绩的最大值。最后把结果在main函数中输出。

#include<stdio.h>  double average(int score[], int n) {     int i,sum=0;     double aver;     for(i=0;i<n;i++)         sum = sum+score[i];     aver = sum * 1.0 / n;      return aver; }         /*自定义函数平均值*/  int main() {     int number[12],score[12]={80,78,90,93,96,85,88,60,88,98,99,52};     int i;     char name[12][10];     double aver;     /*声明变量*/      printf("请输入学号：\n");     for(i=0;i<12;i++)     {         printf("number[%d]=",i);         scanf("%d",&number[i]);     }      printf("请输入姓名：\n");     for(i=0;i<12;i++)     {         printf("name[%d]=",i);         scanf("%s",name[i]);     }      printf("学号\t姓名\t成绩\n");     for(i=0;i<12;i++)         printf("%d\t%s\t%d\n",number[i],name[i],score[i]);     aver = average(score, 12);     /*调用*/     printf("成绩平均值为：%f\n",aver);     return 0; } 供参考～


Question: c程序不能编译，一编译程序就闪退了，其他程序不会这样，感觉代码也找不出错误来了

solve()函数中 for (p = a + 1; a<a + 10; p++) 		if (*p < *min) min = p; for语句的循环条件a<a+10始终成立，所以for循环会一直执行下去，直到指针p指向的内容不能读取，就是你说的程序就闪退了。 应该修改为 for (p = a + 1; p<a + 10; p++) 		if (*p < *min) min = p; 对于这种情况，solve()函数中还有一处 for (p = a + 1; a<a + 10; p++) 		if (*p > *max) max = p; 改为 for (p = a + 1; p<a + 10; p++) 		if (*p > *max) max = p; output()函数中有一处 for (p = a; p<p + 10; p++) 		printf("%d ", *p); 改为 for (p = a; p<a + 10; p++) 		printf("%d ", *p);

#include<stdio.h> void input(int *a); void solve(int *a); void output(int *a);  int main() {     int a[10];     input(a);     solve(a);     output(a);     return 0; } void input(int *a) {     int i;     printf("请输入十个数：");     for(i=0; i<10; i++)         scanf("%d", &a[i]); } void solve(int *a) {     int *max,*min,*p,temp;     max = min = a;//max和min都指向第一个数a[0]     for(p=a+1; a<a+10; p++)    //这里越界了         if(*p < *min) min  = p;     temp = a[0];     a[0] = *min;     *min = temp;     for(p=a+1; a<a+10; p++)    //这里也越界了         if(*p > *max) max = p;     temp = a[9];     a[9] = *max;     *max = temp;  } void output(int *a) {     int *p;     printf("新数列为：");     //for(p=a; p<p+10; p++)   //此处数组越界了     for(p=a; p<a+10; p++)         printf("%d",*p);     printf("\n"); }  供参考。  编译如果闪退，那是编译器的问题。如果运行崩了，那么是代码逻辑问题。感觉代码没问题，那是代码编写能力的问题。  没看懂你的solve是做什么的，没有修改，但是已经指出问题了。

养成良好的习惯很重要，所有的循环和if要用{}哪怕只有一句，因为你不知到什么时候要修改或添加,这种没有{}引起的BUG，调试程序你会崩溃的。

编译和运行都搞不清楚么？你这程序编译没问题，运行就有段错误

随便改了以下，没改solve逻辑，只是可运行 引用 楼主 zouzelan 的回复:#include<stdio.h> void input(int *a); void solve(int *a); void output(int *a); int main() { 	int a[10]; 	input(a);     solve(a); 	output(a);     return 0; } void input(int *a) {   int i;   printf("请输入十个数：");   for(i=0; i<10; i++) 	  scanf("%d",&a[i]);  } void solve(int *a) {   int *max,*min,*p,temp;   max = min = a;//max和min都指向第一个数a[0]    for(p=a+1; a<a+10; p++)  死循环 -> for(p=a+1; p<a+10; p++)      if(*p < *min) min  = p;    temp = a[0];    a[0] = *min;    *min = temp;     for(p=a+1; a<a+10; p++)  死循环 -> for(p=a+1; p<a+10; p++)        if(*p > *max) max = p;          temp = a[9];    a[9] = *max;    *max = temp;  } void output(int *a) { 	int *p; 	printf("新数列为：");   for(p=a; p<p+10; p++) -> for(p=a; p<a+10; p++)  	  printf("%d",*p);   printf("\n"); }


Question: 位运算代码过不掉

dc赋值2次 db没赋值

errno_t _itoa_s(int value, char *buffer, size_t sizeInCharacters, int radix); 这是函数原型。看一下你的实参个数是不是不对。


Question: 有手里有C两千行现成代码的吗?急求

找老赵，他长期VC6

哪有那么贵，不过也挺难搞的，所以要现成的嘛，老师故意挖坑，没办法啊，c谁没事干写两千行

两千行的程序能卖一千元


Question: #求助#用C语言设计学生信息管理系统

总监，输入输出好友度有什么具体要求，还请明示。 您太客气了，小任务20分给的有点见外了。能给任务那是给面子了，以后千万不要这么客气。 ... (过了一会，偷偷的百度了一下) https://blog.csdn.net/binhua__12/article/details/80030682 https://blog.csdn.net/PARKED/article/details/53339414 https://download.csdn.net/download/u010303610/6826905(要50积分) https://blog.csdn.net/huangqiang1363/article/details/41594203(源码直接copy就可以了) 还有特殊要求，你就说一下，我马上改。

看链接https://bbs.csdn.net/topics/392671156   有问题自己先搜一搜，别跟大爷似的


Question: c#


Question: 新手自学求问

看到那里不重要，goto你可以直接跳过不用看了，实际中基本用不到也最好不要用，回头再看代码你回晕的.或者你直接把for转成goto循环不就行了   void main() { int i,j; i=1; more: 	if(i<10) 	{ 		j=1; 			 again:     			   if(j<10) 			   { 						if(i<=j) 						{ 							printf("%d+%d=%-2d  ",i,j,i+j);   						} 						else 						{   							printf("        "); 						}   			   j++; 			   goto again; 			  }  	i++; 	printf("\r\n"); 	goto more; 	} 	 getchar(); 	return ; }

非必要用goto的情况下少用goto吧

引用 1 楼 gouyanfen 的回复：  main() { 	for(int i=1;i<10;i++) 	{ 		for(int j=1;j<10;j++) 		{ 			if(i<=j) 			{ 				printf("%d+%d=%-2d  ",i,j,i+j);  			} 			else 			{  				printf("        "); 			}  		} 		printf("\r\n");  	} 	 getchar(); 	return 0; }   用这个试试运行了是可以的，只是我还没看到for循环……当前只会goto循环,想不到怎么把这个输出空格语句插进去，要么就赋值那出错了

引用 5 楼 gouyanfen 的回复:  明白，知道哪里有毛病了，谢谢大佬！

引用 4 楼 绝版☞少年 的回复:非必要用goto的情况下少用goto吧  学习流程到就这，也没看到for,while，练习题出来了这个题目...


Question: 这个是怎么做出来的，有会的大佬吗

伸手党不说，拍照都拍不清楚

/************************************************************************* 	> File Name: facmn.c 	> Author: devilcheng 	> Mail:  	> Created Time: 2019年06月03日 星期一 *************************************************************************/  #include <stdio.h> #include <assert.h>  int fac(int m) {     assert(m >= 1);     if(m == 1)         return 1;     return m*fac(m-1); }  int Cmn(int m,int n) {     assert(m > n && n > 1);     return fac(m)/(fac(n)*(m-n)); }  int main() {     printf("%d\n",Cmn(5,2)); } 拿去拿去，本来还想给你截个图打点码的发现没必要

传说中的马赛克


Question: 新手求助

大佬又来出题了

#include <stdio.h> #include <stdlib.h> #include <time.h>  void fun(int s[],int n) {     int tmp, i;      srand(time(NULL));     for (i = 0; i < n; i++) {         if ((tmp = rand() % 99) < 10)             s[i] = tmp + 10;         else             s[i] = tmp;     } }  int main() {     int n,a[100],i;     scanf("%d",&n);     fun(a,n);      for(i=0;i<n;i++)         printf("%-4d",a[i]);     printf("\n");      return 0; } 供参考～

百度搜下rand()一下子就出来了


Question: 有没有大佬会这个的，帮一下

大佬又来出题了


Question: c的文件操作

引用 2 楼 自信男孩的回复:#include <iostream> #include <cstdio> #include <cstdlib> using namespace std; char sID[20] = "zhb_gcsj_data1.txt"; typedef struct GongZi {     long int lNum ;//工号     char sName[32];//姓名     long long int llCard;//银行卡号     int iMonth;//发工资的月份     double dYFgz;//应发工资     double dShuiDian;//水电费     double dShuiJin;//税金     char sGroup[32];//部门     double dSFgz;//实发工资     char sPS[32];//备注     bool operator < (const GongZi &x)const     {         return x.llCard>llCard;//set容器里默认按照卡号由小到大排序     } }employee; void Add() {     int iNum;     employee *p;     FILE *fp;     if((fp = fopen(sID,"a+")) == NULL){             cout << "error!" << endl;             exit(1);         }     cout << "请输入您准备添加的职工的个数:";     cin >> iNum;     p = (employee *)malloc(iNum * sizeof(employee));     for(int i = 0;i < iNum;i++){         cout << "请依次输入第" << i+1 << "位职工的信息" << endl;         cout << "请输入工号:";         cin >> p[i].lNum;         cout << "请输入姓名:";         scanf("%s",p[i].sName);         cout << "请输入银行卡号:";         cin >> p[i].llCard;         cout << "请输入发放工资的月份:";         cin >> p[i].iMonth;         cout << "请输入应发放工资的数额:";         cin >> p[i].dYFgz;         cout << "请输入应支付的水电费:";         cin >> p[i].dShuiDian;         cout << "请输入应缴纳的税金:";         cin >> p[i].dShuiJin;         cout << "请输入该员工的部门:";         scanf("%s",p[i].sGroup);         p[i].dSFgz = p[i].dYFgz - p[i].dShuiDian - p[i].dShuiJin;         cout << "请输入有关该员工的备注:";         scanf("%s",p[i].sPS);         fprintf(fp,"%ld %s %lld %d %lf %lf %lf %s %lf %s\n",p[i].lNum,p[i].sName,p[i].llCard,p[i].iMonth,                 p[i].dYFgz,p[i].dShuiDian,p[i].dShuiJin,p[i].sGroup,p[i].dSFgz,p[i].sPS);     }     free(p);     fclose(fp); } void Operate() {     int iN, ret;     employee p;     FILE *fp;     if((fp=fopen(sID,"r+"))==NULL){         cout << "error!" << endl;         exit(1);     }     ret = fscanf(fp,"%ld %s %lld %d %lf %lf %lf %s %lf %s\n",             &p.lNum,p.sName,&p.llCard,&p.iMonth,&p.dYFgz,&p.dShuiDian,&p.dShuiJin,p.sGroup,&p.dSFgz,p.sPS);     printf("ret = %d\n", ret);     while (ret == 10  && ret != EOF) {         cout << p.lNum << "\t" << p.sName << "\t" << p.llCard << "\t" << p.iMonth << "\t"         << p.dYFgz << "\t" << p.dShuiDian << "\t" << p.dShuiJin << "\t" << p.sGroup         << "\t" << p.dSFgz << "\t" << p.sPS<<endl;         ret = fscanf(fp,"%ld %s %lld %d %lf %lf %lf %s %lf %s\n",                 &p.lNum,p.sName,&p.llCard,&p.iMonth,&p.dYFgz,&p.dShuiDian,&p.dShuiJin,p.sGroup,&p.dSFgz,p.sPS);     }     fclose(fp); } int main() {     Add();     Operate();     return 0; }   供参考。 不用用,逗号，并且使用fscanf/fprintf来读取文件，如果用逗号，加以用fgets/strtok。因为逗号不能区分%s和后面的类型数据。 我将你修改的代码加入我的代码中实验发现字符串还是没法显示 但是只是用你提供这个却又可以读入字符串  之前我也用的是空格分隔 结果一直读不出来 我才改用的逗号分隔

仅供参考：//NAME: essaie bla bla //DIMENSION: 8 //DATA //1  14  15 //2  11  10 //3  6   4 //4  7   13 //5  9   21 //6  19  3 //7  1   5 //8  8   8 //EOF // // 文本文件中可能还含有其他内容，但是需要用到的内容即以上  //比如data.txt: //NAME: essaie bla bla //其它内容 //DIMENSION: 8 //其它内容 //DATA //其它内容 //1  14  15 //其它内容 //2  11  10 //其它内容 //3  6   4 //其它内容 //4  7   13 //其它内容 //5  9   21 //其它内容 //6  19  3 //其它内容 //7  1   5 //其它内容 //8  8   8 //其它内容 //EOF  // 目标是要获取NAME后字串，DIMENSION后数值，以及DATA以下的数值 // 其中NAME就是随便个字句，DIMENSION是城市数量，DATA以下是城市编号，X坐标，Y坐标 // 所有的这些将赋值给一个事先定义好的结构 #include <stdio.h> #include <string.h> #define MAXCPL   80   //每行最大字符数 #define MAXCITY  100  //每组数据中DATA最多项数，DIMENSION的最大值 #define MAXNAMEL 32   //NAME最大长度 struct S {     char NAME[MAXNAMEL+1];     int  DIMENSION;     struct D {         int NO;         int X;         int Y;     } DATA[MAXCITY]; } s; FILE *f; int st,n,i; char ln[MAXCPL]; int main() {     f=fopen("data.txt","r");     if (NULL==f) {         printf("Can not open file data.txt!\n");         return 1;     }     st=0;     n=0;     while (1) {         if (NULL==fgets(ln,MAXCPL,f)) break;         if (st==0) {             if (1==sscanf(ln,"NAME: %31[^\n]",s.NAME)) st=1;         } else if (st==1) {             if (1==sscanf(ln,"DIMENSION: %d",&s.DIMENSION)) st=2;         } else if (st==2) {             if (0==strcmp(ln,"DATA\n")) st=3;         } else if (st==3) {             if (3==sscanf(ln,"%d%d%d",&s.DATA[n].NO,&s.DATA[n].X,&s.DATA[n].Y)) {                 n++;                 if (n>=MAXCITY || n>=s.DIMENSION) break;             }         }     }     fclose(f);     printf("s.NAME=[%s]\n",s.NAME);     printf("s.DIMENSION=%d\n",s.DIMENSION);     for (i=0;i<n;i++) {         printf("s.DATA[%d].NO,X,Y=%d,%d,%d\n",i,s.DATA[i].NO,s.DATA[i].X,s.DATA[i].Y);     }     return 0; } //s.NAME=[essaie bla bla] //s.DIMENSION=8 //s.DATA[0].NO,X,Y=1,14,15 //s.DATA[1].NO,X,Y=2,11,10 //s.DATA[2].NO,X,Y=3,6,4 //s.DATA[3].NO,X,Y=4,7,13 //s.DATA[4].NO,X,Y=5,9,21 //s.DATA[5].NO,X,Y=6,19,3 //s.DATA[6].NO,X,Y=7,1,5 //s.DATA[7].NO,X,Y=8,8,8    乍看起来c++的cin、cout、ifstream、ofstream、istringstream、ostringstream在输入、输出上比c的scanf、printf、fscanf、fprintf、fread、fwrite、sscanf、sprintf简单，不用格式控制符！ 但是不用格式控制符，输入输出恰好是你期望的格式的时候好说；等到输入输出不是你期望的格式的时候，你就会觉得还是用格式控制符更方便、更靠谱。 摒弃cin、cout、ifstream、ofstream、istringstream、ostringstream！ 使用scanf、printf、fscanf、fprintf、fread、fwrite、sscanf、sprintf。

不好意思  运行结果是这张图片

我将你修改的代码加入我的代码中实验发现字符串还是没法显示  之前我也用的是空格分隔 结果一直读不出来 我才改用的逗号分隔


Question: 急！c语言！

百度文库……那怎么弄啊

clrscr、gotoxy这些好象是dos下面的函数吧，楼主哪抄的程序？


Question: 没有设置定时器，为什么还是不断收到WM_TIMER ？

引用 4 楼 Intel0011 的回复:[quote=引用 3 楼 zgl7903 的回复:] 这个应该是有BUTTON控件为了实现悬停发光等效果启动的定时器吧 可以换其他控件试试看 和控件没有关系，我的测试结果是 在Win10下，如果使用DispatchMessage(&msg);分发消息，则会收到三条WM_TIMER消息，如： GetMessage  ---> 0113 ID=23559 GetMessage  ---> 0113 ID=23560 GetMessage  ---> 0113 ID=1 如果使用 {                typedef LRESULT (CALLBACK *WNDPROC)(HWND, UINT, WPARAM, LPARAM);                WNDPROC lpfnWndProc = (WNDPROC)GetWindowLong(msg.hwnd, GWL_WNDPROC);                CallWindowProc(lpfnWndProc, msg.hwnd, msg.message, msg.wParam, msg.lParam); // 如果不移动窗口，将一直收到WM_TIMER消息 			   } 分发消息，则会一直收到WM_TIMER消息，如： GetMessage  ---> 0113 ID=23525 GetMessage  ---> 0113 ID=23526 GetMessage  ---> 0113 ID=23525 GetMessage  ---> 0113 ID=1 GetMessage  ---> 0113 ID=23525 GetMessage  ---> 0113 ID=23526 GetMessage  ---> 0113 ID=23525 ...... 在XP下，两种方式都只会收到一条WM_TIMER消息，如： GetMessage  ---> 0113 ID=1 不知道系统内部做了什么改变，以及为什么要这样做改变 这里的测试代码如下，各位可以测试看看，欢迎回馈 //* #define UNICODE #define _UNICODE //*/ #include <Windows.h> #include <tchar.h> #include <stdio.h>  #pragma comment(lib, "gdi32.lib") #pragma comment(lib, "user32.lib")  #pragma comment(linker, "/subsystem:console,5.1.2600")  LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);  //int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR szCmdLine, int iCmdShow) int main(void) {    static TCHAR szAppName[] = TEXT("HelloWin");    HWND         hwnd;    MSG          msg;    WNDCLASS     wndclass;           RtlZeroMemory(&wndclass, sizeof(wndclass));    wndclass.style         = CS_HREDRAW | CS_VREDRAW;    wndclass.lpfnWndProc   = WndProc;    wndclass.hInstance     = GetModuleHandle(NULL);    wndclass.hIcon         = LoadIcon(NULL, TEXT("#32512"));    wndclass.hCursor       = LoadCursor(NULL, IDC_ARROW);    wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);    wndclass.lpszMenuName  = NULL;    wndclass.lpszClassName = szAppName;     if (!RegisterClass(&wndclass))    {       MessageBox(NULL, TEXT("This program requires Windows NT series!"), szAppName, MB_ICONERROR);       return -1;    }          hwnd = CreateWindowEx(WS_EX_APPWINDOW,                          szAppName,                  // window class name                          TEXT("The Hello Program"),  // window caption                          WS_OVERLAPPEDWINDOW,        // window style                          500,//CW_USEDEFAULT,              // initial x position                          200,//CW_USEDEFAULT,              // initial y position                          320,//CW_USEDEFAULT,              // initial x size                          320,//CW_USEDEFAULT,              // initial y size                          NULL,                       // parent window handle                          NULL,                       // window menu handle                          GetModuleHandle(NULL),                  // program instance handle                          NULL);                      // creation parameters     ShowWindow(hwnd, SW_SHOW);    UpdateWindow(hwnd);        {       BOOL bRet;       while ((bRet = GetMessage(&msg, NULL, 0, 0)) != 0)       {          if (msg.message == WM_TIMER) printf("GetMessage  ---> %04X ID=%u\n", msg.message, msg.wParam);          if (bRet == -1)          {             MessageBox(NULL, TEXT("GetMessage Error."), TEXT("Message"), MB_ICONERROR);             return -1;          }          else          {             TranslateMessage(&msg);             #if 01             DispatchMessage(&msg);             #else             {                typedef LRESULT (CALLBACK *WNDPROC)(HWND, UINT, WPARAM, LPARAM);                WNDPROC lpfnWndProc = (WNDPROC)GetWindowLong(msg.hwnd, GWL_WNDPROC);                CallWindowProc(lpfnWndProc, msg.hwnd, msg.message, msg.wParam, msg.lParam); // 如果不移动窗口，将一直收到WM_TIMER消息 			   } 			   #endif          }       }    }     UnregisterClass(szAppName, GetModuleHandle(NULL));    return msg.wParam; }  LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {    //printf("WndProc     ---> %04X\n", message);    switch (message)    {       case WM_DESTROY:          PostQuitMessage(0);          return 0;    }    return DefWindowProc(hwnd, message, wParam, lParam); } [/quote] 老哥，关于这个神秘的WM_TIMER，我最近有点进展，首先我发现这个WM_TIMER不是一直发的，发了十几个就停了，只是因为输出的内容都一样所以一直没发现（不直到是不是后来测试的时候和之前效果不一样了），它在鼠标右移出窗口后会发十几个WM_TIMER消息，但左移、上移不会发，下移不记得了，貌似会；更神奇的事发生了，我最近测试了SetTimer，之后再测试以前的代码的时候，发现效果竟然变了，这个WM_TIMER只发了几次就没发了，再也没像以前那样了，我新建代码文件重新测试，发现效果还是这样。。。你说这个会不会跟SetTimer有关？

引用 13 楼 早打大打打核战争 的回复:拖动的时候没有WM_TIMER发来很正常，准确地说，不是没有发来，而是GetMessage没提交它，WM_TIMER是低优先级消息，只有消息队列中没有高优先级消息的时候才会post低优先级消息 你的意思是这个WM_TIMER是由GetMessage发出来的？确定吗？

引用 4 楼 Intel0011 的回复:[quote=引用 3 楼 zgl7903 的回复:] 这个应该是有BUTTON控件为了实现悬停发光等效果启动的定时器吧 可以换其他控件试试看 和控件没有关系，我的测试结果是 在Win10下，如果使用DispatchMessage(&msg);分发消息，则会收到三条WM_TIMER消息，如： GetMessage  ---> 0113 ID=23559 GetMessage  ---> 0113 ID=23560 GetMessage  ---> 0113 ID=1 如果使用 {                typedef LRESULT (CALLBACK *WNDPROC)(HWND, UINT, WPARAM, LPARAM);                WNDPROC lpfnWndProc = (WNDPROC)GetWindowLong(msg.hwnd, GWL_WNDPROC);                CallWindowProc(lpfnWndProc, msg.hwnd, msg.message, msg.wParam, msg.lParam); // 如果不移动窗口，将一直收到WM_TIMER消息 			   } 分发消息，则会一直收到WM_TIMER消息，如： GetMessage  ---> 0113 ID=23525 GetMessage  ---> 0113 ID=23526 GetMessage  ---> 0113 ID=23525 GetMessage  ---> 0113 ID=1 GetMessage  ---> 0113 ID=23525 GetMessage  ---> 0113 ID=23526 GetMessage  ---> 0113 ID=23525 ...... 在XP下，两种方式都只会收到一条WM_TIMER消息，如： GetMessage  ---> 0113 ID=1 不知道系统内部做了什么改变，以及为什么要这样做改变 这里的测试代码如下，各位可以测试看看，欢迎回馈 //* #define UNICODE #define _UNICODE //*/ #include <Windows.h> #include <tchar.h> #include <stdio.h>  #pragma comment(lib, "gdi32.lib") #pragma comment(lib, "user32.lib")  #pragma comment(linker, "/subsystem:console,5.1.2600")  LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);  //int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR szCmdLine, int iCmdShow) int main(void) {    static TCHAR szAppName[] = TEXT("HelloWin");    HWND         hwnd;    MSG          msg;    WNDCLASS     wndclass;           RtlZeroMemory(&wndclass, sizeof(wndclass));    wndclass.style         = CS_HREDRAW | CS_VREDRAW;    wndclass.lpfnWndProc   = WndProc;    wndclass.hInstance     = GetModuleHandle(NULL);    wndclass.hIcon         = LoadIcon(NULL, TEXT("#32512"));    wndclass.hCursor       = LoadCursor(NULL, IDC_ARROW);    wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);    wndclass.lpszMenuName  = NULL;    wndclass.lpszClassName = szAppName;     if (!RegisterClass(&wndclass))    {       MessageBox(NULL, TEXT("This program requires Windows NT series!"), szAppName, MB_ICONERROR);       return -1;    }          hwnd = CreateWindowEx(WS_EX_APPWINDOW,                          szAppName,                  // window class name                          TEXT("The Hello Program"),  // window caption                          WS_OVERLAPPEDWINDOW,        // window style                          500,//CW_USEDEFAULT,              // initial x position                          200,//CW_USEDEFAULT,              // initial y position                          320,//CW_USEDEFAULT,              // initial x size                          320,//CW_USEDEFAULT,              // initial y size                          NULL,                       // parent window handle                          NULL,                       // window menu handle                          GetModuleHandle(NULL),                  // program instance handle                          NULL);                      // creation parameters     ShowWindow(hwnd, SW_SHOW);    UpdateWindow(hwnd);        {       BOOL bRet;       while ((bRet = GetMessage(&msg, NULL, 0, 0)) != 0)       {          if (msg.message == WM_TIMER) printf("GetMessage  ---> %04X ID=%u\n", msg.message, msg.wParam);          if (bRet == -1)          {             MessageBox(NULL, TEXT("GetMessage Error."), TEXT("Message"), MB_ICONERROR);             return -1;          }          else          {             TranslateMessage(&msg);             #if 01             DispatchMessage(&msg);             #else             {                typedef LRESULT (CALLBACK *WNDPROC)(HWND, UINT, WPARAM, LPARAM);                WNDPROC lpfnWndProc = (WNDPROC)GetWindowLong(msg.hwnd, GWL_WNDPROC);                CallWindowProc(lpfnWndProc, msg.hwnd, msg.message, msg.wParam, msg.lParam); // 如果不移动窗口，将一直收到WM_TIMER消息 			   } 			   #endif          }       }    }     UnregisterClass(szAppName, GetModuleHandle(NULL));    return msg.wParam; }  LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {    //printf("WndProc     ---> %04X\n", message);    switch (message)    {       case WM_DESTROY:          PostQuitMessage(0);          return 0;    }    return DefWindowProc(hwnd, message, wParam, lParam); } [/quote] 的确是拖动的时候没有WM_TIMER发来，你是试出来的还是？ 你是觉得这个WM_TIMER是分发消息或者调用窗口过程产生的？

仅供参考： Message and Message Queue Functions The following functions are used with messages and message queues.        BroadcastSystemMessage   DispatchMessage   GetInputState   GetMessage   GetMessageExtraInfo   GetMessagePos   GetMessageTime   GetQueueStatus   InSendMessage   InSendMessageEx   PeekMessage   PostMessage   PostQuitMessage   PostThreadMessage   RegisterWindowMessage   ReplyMessage   SendAsyncProc   SendMessage   SendMessageCallback   SendMessageTimeout   SendNotifyMessage   SetMessageExtraInfo   TranslateMessage   WaitMessage     Obsolete Functions      PostAppMessage   SetMessageQueue

引用 9 楼 早打大打打核战争 的回复:线程的所有窗口都共享消息队列，用户代码没有处理的消息，最后都到DefWindowProc那里去了(如果至少一个窗口过程调用了它)，“而且不创建窗口，也不会有该WM_TIMER”这很正常，因为windows不会为线程自动创建消息队列，需要该线程创建第一个窗口才有。 这个消息并没有到窗口过程中啊，窗口过程中检测不到，而且消息循环中指定接收某窗口的消息时也不会出现，只有当GetMessage指定窗口为NULL才会接收到，应该能说明是发给线程的。

引用 3 楼 zgl7903 的回复:这个应该是有BUTTON控件为了实现悬停发光等效果启动的定时器吧 可以换其他控件试试看 和控件没有关系，我的测试结果是 在Win10下，如果使用DispatchMessage(&msg);分发消息，则会收到三条WM_TIMER消息，如： GetMessage  ---> 0113 ID=23559 GetMessage  ---> 0113 ID=23560 GetMessage  ---> 0113 ID=1 如果使用 {                typedef LRESULT (CALLBACK *WNDPROC)(HWND, UINT, WPARAM, LPARAM);                WNDPROC lpfnWndProc = (WNDPROC)GetWindowLong(msg.hwnd, GWL_WNDPROC);                CallWindowProc(lpfnWndProc, msg.hwnd, msg.message, msg.wParam, msg.lParam); // 如果不移动窗口，将一直收到WM_TIMER消息 			   } 分发消息，则会一直收到WM_TIMER消息，如： GetMessage  ---> 0113 ID=23525 GetMessage  ---> 0113 ID=23526 GetMessage  ---> 0113 ID=23525 GetMessage  ---> 0113 ID=1 GetMessage  ---> 0113 ID=23525 GetMessage  ---> 0113 ID=23526 GetMessage  ---> 0113 ID=23525 ...... 在XP下，两种方式都只会收到一条WM_TIMER消息，如： GetMessage  ---> 0113 ID=1 不知道系统内部做了什么改变，以及为什么要这样做改变 这里的测试代码如下，各位可以测试看看，欢迎回馈 //* #define UNICODE #define _UNICODE //*/ #include <Windows.h> #include <tchar.h> #include <stdio.h>  #pragma comment(lib, "gdi32.lib") #pragma comment(lib, "user32.lib")  #pragma comment(linker, "/subsystem:console,5.1.2600")  LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);  //int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR szCmdLine, int iCmdShow) int main(void) {    static TCHAR szAppName[] = TEXT("HelloWin");    HWND         hwnd;    MSG          msg;    WNDCLASS     wndclass;           RtlZeroMemory(&wndclass, sizeof(wndclass));    wndclass.style         = CS_HREDRAW | CS_VREDRAW;    wndclass.lpfnWndProc   = WndProc;    wndclass.hInstance     = GetModuleHandle(NULL);    wndclass.hIcon         = LoadIcon(NULL, TEXT("#32512"));    wndclass.hCursor       = LoadCursor(NULL, IDC_ARROW);    wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);    wndclass.lpszMenuName  = NULL;    wndclass.lpszClassName = szAppName;     if (!RegisterClass(&wndclass))    {       MessageBox(NULL, TEXT("This program requires Windows NT series!"), szAppName, MB_ICONERROR);       return -1;    }          hwnd = CreateWindowEx(WS_EX_APPWINDOW,                          szAppName,                  // window class name                          TEXT("The Hello Program"),  // window caption                          WS_OVERLAPPEDWINDOW,        // window style                          500,//CW_USEDEFAULT,              // initial x position                          200,//CW_USEDEFAULT,              // initial y position                          320,//CW_USEDEFAULT,              // initial x size                          320,//CW_USEDEFAULT,              // initial y size                          NULL,                       // parent window handle                          NULL,                       // window menu handle                          GetModuleHandle(NULL),                  // program instance handle                          NULL);                      // creation parameters     ShowWindow(hwnd, SW_SHOW);    UpdateWindow(hwnd);        {       BOOL bRet;       while ((bRet = GetMessage(&msg, NULL, 0, 0)) != 0)       {          if (msg.message == WM_TIMER) printf("GetMessage  ---> %04X ID=%u\n", msg.message, msg.wParam);          if (bRet == -1)          {             MessageBox(NULL, TEXT("GetMessage Error."), TEXT("Message"), MB_ICONERROR);             return -1;          }          else          {             TranslateMessage(&msg);             #if 01             DispatchMessage(&msg);             #else             {                typedef LRESULT (CALLBACK *WNDPROC)(HWND, UINT, WPARAM, LPARAM);                WNDPROC lpfnWndProc = (WNDPROC)GetWindowLong(msg.hwnd, GWL_WNDPROC);                CallWindowProc(lpfnWndProc, msg.hwnd, msg.message, msg.wParam, msg.lParam); // 如果不移动窗口，将一直收到WM_TIMER消息 			   } 			   #endif          }       }    }     UnregisterClass(szAppName, GetModuleHandle(NULL));    return msg.wParam; }  LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {    //printf("WndProc     ---> %04X\n", message);    switch (message)    {       case WM_DESTROY:          PostQuitMessage(0);          return 0;    }    return DefWindowProc(hwnd, message, wParam, lParam); }

怀疑是windows里会不会有一些进程会对所有进程发送TIMER消息

学会使用Spy++

引用 7 楼 早打大打打核战争 的回复:这个应该是给DefWindowProc用的吧，类似某种keep alive信号，如果应用程序较长时间卡在某段代码，消息循环不能顺畅运转，DefWindowProc没有被调用，Windows就认为该程序运行异常了，弹出应用程序无响应之类的提示 用自注册窗口测试，这个不是发给窗口的，是发给线程的，窗口过程中根本检测不到，GetMessage如果只接收该窗口消息，那么也接收不到这个WM_TIMER，说明这个消息是发给线程的（不可能是发给控制台的吧，发给控制台线程应该接收不到，而且不创建窗口，也不会有该WM_TIMER，说明应该不是发给控制台的）

引用 1 楼 赵4老师 的回复:学会使用Spy++ 我这里用的是控制台，消息是发给线程的，我只能取控制台，但spy++检测控制台为特殊窗口，查不了。 而且我想了下，如果创建主窗口，spy++仍然只能检测发到主窗口的消息，而这个是发给线程的消息呀

引用 3 楼 zgl7903 的回复:这个应该是有BUTTON控件为了实现悬停发光等效果启动的定时器吧 可以换其他控件试试看 自己注册的窗口也是一样的，而且这个定时器不是发给窗口的，是发给线程的


Question: 菜鸟求助

很简单 abc 如果a<b 则a=b 把b的值赋给a； 同理a<c 同理b<c

字丑点了，


Question: c语言赋值

～ （1）int型数组a中，第4个元素是4，那么也就是说 a[3] 是 4。所以，根据下面的四个选项来看，现在要确定的就是到底哪个选项表示的下标是整数 3 。 （2）选项A，变量 g 未初始化，其值不可知，所以 g-c 到底等于多少是不确定的，因此排除。 （3）选项B，下标是4，排除。 （4）选项C，字符 'd' - 'c' 的结果是整数 1 。因为这里是使用它们的ASCII码值来做减法运算。 （5）选项D，字符 'd' - c ，实际上是 字符 'd' - 'a' ，因为变量 c 的值是字符 'a' ，结果是整数 3 。 因此答案是 D 。 如有帮助，烦请及时 结贴、给分！ ：-） ～


Question: 求解c语言编程题

楼上的if 语句里面赋值反掉了

#include<stdio.h> int main() {     float a[4] = {3,6,1.9,4};     int i,j,k;     float temp;     for(i=0;i<4;i++) 		for(j=1;j<4;j++)           {                 if(a[i] > a[j])                 {                         temp=a[i] ;                          a[i] = a[j];                        a[j]=  temp;                   }              }     printf("排序后的数组为:\n");     for(k =0;k<4;k++)     {           printf("%f\t",a[k]);     }     return 0; }//没有用函数 你稍微改一下

谢谢各位的指导呀 我是c语言的初学者

#include<stdio.h> int main(void) {     int a[5] = {3,6,1,9,4};     int i,j,k;     int temp;     for(i=0;j=1;i<5;j<5;j++;i++)           {                 if(a[i] > a[j])                 {                        a[i] = temp;                        temp = a[j];                         a[j] = a[i];                  }                                  }     printf("排序后的数组为:\n");     for(k =0;k<5;k++)     {           printf("%d\t",a[k]);     }     return 0; }  我是这样想的，不知道对不对，纯手打，其实选择法和冒泡排序原理是差不多的，复杂度也是相同的！

可以先学习一下排序算法 sort函数排序 https://blog.csdn.net/weixin_43956598/article/details/90241551 冒泡排序 https://blog.csdn.net/weixin_43956598/article/details/90176251 选择排序 https://blog.csdn.net/weixin_43956598/article/details/90178197 插入排序 https://blog.csdn.net/weixin_43956598/article/details/90181567 快速排序 https://blog.csdn.net/weixin_43956598/article/details/90215135 希尔排序 https://blog.csdn.net/weixin_43956598/articledetails/90234480 堆排序https://blog.csdn.net/weixin_43956598/article/details/90343547

建议搜一下冒泡或者选择排序，都是一些基本的排序方法


Question: 编写一个函数实现数组排序，再编写一个函数实现数组查找，然后在主程序中输入一个无序数组，先调用排序函数，再调用查找函数查找指定的值。

直接贴代码，比贴图片更好的帮你解决问题

引用 1 楼 自信男孩的回复:直接贴代码，比贴图片更好的帮你解决问题 复制的代码给放楼下了

#include<stdio.h> #define N 10 int rank (int a[], int n) { 	int i,j,temp; 	for(i=0;i<n;i++) 	{ 		for(j=0;j<n-i;j++) 		if(a[j]>a[j+1]) 		{ 			temp=a[j]; 			a[j]=a[j+1]; 			a[j+1]=temp; 		 }  	}  }   int search(int a[],int n)  {  	int i,x,top,bot,mid;  	for(i=0;i<n;i++)  	top=0;bot=n-1;  	do  	{  		mid=(top+bot)/2;  		if(a[mid]==x) break;  		else if(a[mid]<x) top=mid+1;  		else bot=mid+1; 	 }while(bot<=bot); 	 if(bot<top) 	 printf("%d:no found\n",x); 	 else 	 printf("Success! a[%d] is %d\n",mid,x);  }  int main()  {  	int rank (int a[], int n);  	int search(int a[],int n);  	int date[N],i,x;  	printf("Date:");  	for(i=0;i<N;i++)  	{  		scanf("%d",&date[N]); 	 } 	 printf("x:"); 	 scanf("%d",&x); 	 printf("Result:%d",search(date[N],int n));  	return 0;  }


Question: C语言c2059错误，求大神

const char *meun_search[] = 	{ 		{"|            |\n"}, 	{"|1.按编号查询|\n"}, 	{"|2.按姓名查询|\n"}, 	{"|3.按年龄查询|\n"}, 	{"|4.按电话查询|\n"}, 	{"|            |\n"}, 	};

偶遇到类似问题都是用 “每次用/*...*/注释掉不同部分再重新编译，直到定位到具体语法出错的位置。” 的方法解决的。

最后一个括号后面加分号

最后没有加分号

分号应该放在大括号之后。

最后一个 } 后添加 ；

最后一个括号出现错误


Question: 萌新求助啊！！

引用 4 楼 user-1 的回复:引用 3 楼 happycandyfly 的回复:能问一下，为什么加上_s就不会出错了呢？是这个c和c++不一样吗？？  引用 2 楼 user-1 的回复:用scanf_s代替scanf这是所谓的安全版本，包括什么strcpy_s等等  非常谢谢你大哥！！

在scanf后面加上_s，程序就能正常运行，不加的话，就要出错，这是怎么原因啊？？


Question: 下面这段程序c语言转换为java

这是一段ntripcaster程序（通信系统经常采用的，通信协议使用ntrip，类似于http），源程序采用c写的，实在看不懂，哪位大神帮翻译成java语言


Question: c语言数据结构问题 两个多项式相加

引用 2 楼 自信男孩 的回复:#include<stdio.h> #include<stdlib.h>  typedef struct DXS {     int a;//系数     int b;//指数     struct DXS *next; }DXS;  void JL(DXS *head) {     DXS *p,*q;     q = head;     printf("请输入多项式中各项的系数和指数：（输入0停止输入）");     while(1)     {         p = (DXS *)malloc(sizeof(DXS));         if (!p)             return;         scanf("%d", &p->a);         if(p->a == 0)         {             free(p);             break;         }         scanf("%d", &p->b);         q->next = p;         p->next = NULL;         q = p;     } }  void show_dxs(DXS *phead) {     DXS *p = phead->next;      while (p->next) {         printf("(%dx^%d) + ", p->a, p->b);         p = p->next;     }     printf("(%dx^%d)\n", p->a, p->b); }  void ADD(DXS *D1,DXS *D2) { #if 1     DXS *p,*q;      p = D1->next;       while (p) {         q = D2->next;         while (q) {             if (p->b == q->b) {                 p->a += q->a;             }             q = q->next;         }         p = p->next;     } #else     DXS *p,*q,*temp;      while(p)     {         p = p->next;         q=D2;         while(q)         {             temp=q;             q=q->next;             if(p->b==q->b)             {                 p->a = (p->a)+(q->a);                 temp = q->next;                 temp = q;                 q->next=NULL;                 free(temp);                 break;             }         }     }     p=D1;     q=D2->next;     while(p->next!=NULL)         p=p->next;     p->next=q;     free(D2); #endif }  void free_list(DXS *phead) {     DXS *p = phead->next, *q;      while (p) {         q = p->next;         free(p);         p = q;     } }   int main() {     DXS *D1,*D2;     //DXS *p;     //DXS *q,*temp;     D1 = (DXS *)malloc(sizeof(DXS));     if (!D1)         return -1;     D2 = (DXS *)malloc(sizeof(DXS));     if (!D2) {         free(D1);         return -1;     }     JL(D1);     show_dxs(D1);     JL(D2);     show_dxs(D2);      ADD(D1, D2);     show_dxs(D1);     /*     p = D1->next;     while(p)     {         printf("(%dx^%d)+",p->a,p->b);         p=p->next;     }     */     free_list(D1);     free(D1);     free_list(D2);     free(D2);      return 0; }   供参考～  你这个不能保证q、p指数项不同的合并啊  比如q是x^2 p是x^3就不行嘛。。。。

仅供参考：//链表实现一元多项式的加法减法乘法 #include <stdio.h> #include <stdlib.h> typedef struct node {     float coef;   //系数     int expn;     //指数     struct node *next; } PolyNode;      //多项式节点 polynomial node typedef PolyNode* Polynomial; Polynomial createPolynomial() {  //创建多项式     PolyNode *p, *q, *head = (PolyNode *)malloc(sizeof(PolyNode));   //头节点     head->next = NULL;     float coef;     int expn;     printf("输入该多项式每一项的系数和指数，每项一行，输入0 0结束！\n");     while (scanf("%f %d", &coef, &expn) && coef) {   // 默认，按指数递减排列         if (head->next) {             p = head;             while (p->next && expn < p->next->expn)                 p = p->next;             if (p->next) {                 if (expn == p->next->expn) { //有相同指数的直接把系数加到原多项式                     p->next->coef += coef;                     if (p->next->coef > -0.000001 && p->next->coef < 0.000001) { //若是相加后系数为0，则舍弃该节点                         q = p->next;                         p->next = q->next;                         free(q);                     }                 } else {                     q = (PolyNode*)malloc(sizeof(PolyNode));                     q->coef = coef;                     q->expn = expn;                     q->next = p->next;                     p->next = q;                 }             } else {                 p->next = (PolyNode*)malloc(sizeof(PolyNode));                 p = p->next;                 p->coef = coef;                 p->expn = expn;                 p->next = NULL;             }         } else {             head->next = (PolyNode*)malloc(sizeof(PolyNode));             head->next->coef = coef;             head->next->expn = expn;             head->next->next = NULL;         }     }     return head; } Polynomial multiply(Polynomial poly, float coef, int expn) {  //多项式与指定单项式相乘，该单项式为 coefx^expn     PolyNode *p, *q, *Poly = (PolyNode*)malloc(sizeof(PolyNode));     p = Poly;     q = poly->next;     while (q) {         p->next = (PolyNode*)malloc(sizeof(PolyNode));         p = p->next;         p->coef = (q->coef*coef);         p->expn = (q->expn + expn);         q = q->next;     }     p->next = NULL;     return Poly; } void add(Polynomial poly1, Polynomial poly2) {  //把 poly2 加到 poly1 上     PolyNode *p, *q, *r;     r = poly1;     p = poly1->next;  //指向第一个节点     q = poly2->next;     poly2->next = NULL;     while (p && q) {         if (p->expn > q->expn) {             r->next = p;             p = p->next;             r = r->next;         } else if (p->expn < q->expn) {             r->next = q;             q = q->next;             r = r->next;         } else {             PolyNode *t;             p->coef += q->coef;             if (!(p->coef > -0.000001 && p->coef < 0.000001)) //系数不为0             {                 r->next = p;                 r = r->next;                 p = p->next;             } else {                 t = p;                 p = p->next;                 free(t);             }             t = q;             q = q->next;             free(t);         }     }     if (p)         r->next = p;     if (q)         r->next = q; } Polynomial polySubtract(Polynomial poly1, Polynomial poly2) {  //多项式减法 poly1-poly2形成一个新的多项式     //把poly2的系数取相反数，形成一个新的多项式     Polynomial poly = (PolyNode*)malloc(sizeof(PolyNode)); //构造头节点     PolyNode *p, *q;     p = poly;     q = poly2->next;     while (q) {         p->next = (PolyNode*)malloc(sizeof(PolyNode));         p = p->next;         p->coef = -(q->coef);  //系数取反         p->expn = q->expn;         q = q->next;     }     p->next = NULL;     add(poly, poly1);  //利用加法     return poly; } Polynomial polyAdd(Polynomial poly1, Polynomial poly2) { //多项式相加 poly1+poly2形成一个新的多项式     Polynomial poly = (PolyNode*)malloc(sizeof(PolyNode));  //和多项式的头节点     poly->next = NULL;     PolyNode *p, *q, *r;     r = poly;     p = poly1->next;     q = poly2->next;     while (p&&q) {         if (p->expn > q->expn) {             r->next = (PolyNode*)malloc(sizeof(PolyNode));             r = r->next;             r->coef = p->coef;             r->expn = p->expn;             p = p->next;         } else if (p->expn < q->expn) {             r->next = (PolyNode*)malloc(sizeof(PolyNode));             r = r->next;             r->coef = q->coef;             r->expn = q->expn;             q = q->next;         } else {             float m = p->coef + q->coef;             if (!(m > -0.000001 && m < 0.000001)) {                 r->next = (PolyNode*)malloc(sizeof(PolyNode));                 r = r->next;                 r->coef = m;                 r->expn = p->expn;             }             q = q->next;             p = p->next;         }     }     while (p) {         r->next = (PolyNode*)malloc(sizeof(PolyNode));         r = r->next;         r->coef = p->coef;         r->expn = p->expn;         p = p->next;     }     while (q) {         r->next = (PolyNode*)malloc(sizeof(PolyNode));         r = r->next;         r->coef = q->coef;         r->expn = q->expn;         q = q->next;     }     r->next = NULL;     return poly; } Polynomial polyMultiply(Polynomial poly1, Polynomial poly2) {  //多项式相乘     Polynomial poly = (PolyNode*)malloc(sizeof(PolyNode));  //创建多项式和的头节点     poly->next = NULL;     PolyNode *p;     p = poly2->next;     while (p) {         add(poly, multiply(poly1, p->coef, p->expn));         p = p->next;     }     return poly; } void printPoly(Polynomial poly) {  //打印多项式     if (poly && poly->next) {         PolyNode *p = poly->next;  //p指向第一个节点         while (p->next) {             printf("%gx^%d", p->coef, p->expn);             p = p->next;             if (p && (p->coef > 0))                 printf("+");         }         if (p->expn == 0)             printf("%g", p->coef);   //打印常数项         else             printf("%gx^%d", p->coef, p->expn);         printf("\n");     } } void freePoly(Polynomial poly) {  //释放内存     if (poly && poly->next) {         PolyNode *p, *q;         p = poly;         while (p) {             q = p->next;             free(p);             p = q;         }     }     poly = NULL; } int main() {     printf("用链表实现多项式的加减法\n");     Polynomial poly1, poly2, poly3;     printf("创建多项式一\n");     poly1 = createPolynomial();     printf("多项式一：\n");     printPoly(poly1);     printf("创建多项式二\n");     poly2 = createPolynomial();     printf("多项式二：\n");     printPoly(poly2);     printf("两多项式相加，和为：\n");     poly3 = polyAdd(poly1, poly2);     printPoly(poly3);     freePoly(poly3);     printf("两个多项式相乘，积为：\n");     poly3 = polyMultiply(poly1, poly2);     printPoly(poly3);     freePoly(poly3);     printf("两多项式相减，差为：\n");     poly3 = polySubtract(poly1, poly2);     printPoly(poly3);     freePoly(poly1);     freePoly(poly2);     freePoly(poly3);     system("pause");     return 0; }


Question: 咋回事？

说白了这题目是否goto lable没有啥区别 lable只是个标记，里面的语句还是会继续执行下去

lable有两种路径运行到这儿，goto lable可能更快运行到这，goto和lable之间的代码不执行了，直接跳转到lable的代码行。如果goto 不执行，那么按照顺序也会执行，此时lable就没有用了。 更简单的说，lable是为了goto更好的跳转到哪里的标志。

if不再执行，但是会执行label里面的

楼上是正确答案

goto label;不执行 但label:printf("%d",a);永远都执行

lable只是个标签，不影响后面代码的执行。 不然，如果在lable后面敲个空格呢，那怎么算：  #include <stdio.h> int main() {     int a=1;     if(a==0)        goto label;     label:     printf("%d",a);     printf("Yes"); }


Question: x应该是4呀

#define是宏替换，意思就是直接替换不管你写的什么 #define square(x)(x*x)  是个宏函数，意思是，只要你用square( )，写进括号里的东西都会被当成x，然后替换成( x*x ) 你使用的是square( y+1 )，替换成 (y+1*y+1)，也就是 (y+y+1)，也就是 (3)

引用 3 楼 weixin_45007129 的回复:经过观察发现，楼主要么是散分的脚本，要么是闲得蛋疼故意说错误答案来钓鱼的，要么就是来练习发帖打字的，总而言之绝对不是学C语言的。 问了那么多烂题目了，从来没有自己在编译器里敲过一个字母的代码，还天天为什么为什么，好像觉得自己是编译器，题目答案都是错的似的！ 今后再遇到重复的情况直接举报了！  别这样，我看你的回复后特意去看了楼主的帖子，发现这些题目都是不错的题目，对于初学者容易搞错的地方。不管楼主是什么动机，对于初学者都有益的

这可不是函数调用！

square(y+1)不是(y+1)*(y+1)  square(y+1)是y+1*y+1  不要自己随便加()

引用 7 楼 赵4老师 的回复:理解和讨论之前请先学会如何观察！  VC编译选项加/EP /P（项目、属性、配置属性、C/C++、预处理器、预处理到文件：是，预处理取消显示行号：是），重新编译，查看宏展开后对应的.i文件。gcc加-E http://bbs.csdn.net/topics/391003898 收藏


Question: 运行5保存到文件中时，报错，请各位大佬帮忙看看；

引用 10 楼 自信男孩的回复:#include<stdio.h> #include<stdlib.h> #include<string.h>  #pragma warning(disable:4996)  //management     管理、人员管理系统；  #if 0     1、初始化数据库，此时的数据库是文件；(initData2File) 2、读数据库，生成内存数据模型；(createListFromFile)     3、增、查、改、删、排序；     4、更新数据库；       saveList2File(保存链表文件)             destroyListStu（删除链表） #endif      typedef struct student {     char name[30];     //姓名     char sex;     //性别     int age;         //年龄     int score;     //成绩 }Stu;  typedef struct stuNode {     Stu data;     struct stuNode *next; }StuNode;  void initData2File(const char *); StuNode *createListFromFile(const char *filePash);          //创建链表，把数据传进来 void traverseStulist(StuNode *head);  void addListStu(StuNode *phead);              //增 StuNode *searchListStu(StuNode *head);       //查 void deleteListStu(StuNode *head);            //删除 void sortListStu(StuNode *head);              //排序（按成绩排序） int lenList(StuNode *head);                   //求链表长度 void saveList2File(StuNode *head, const char *filePath); void destroyListStu(StuNode *head);  int main() {     initData2File("student.data");      StuNode *head = createListFromFile("student.data");      traverseStulist(head);     while (1)     {         system("cls");         traverseStulist(head);          printf("1->add\t 2->search 3->delete 4->sort 5->exit\n");         printf("请输入序号：");         int dix;         scanf("%d", &dix);         StuNode *Phead;         switch (dix)         {             case 1:                 addListStu(head);                 break;             case 2:                 if ((Phead = searchListStu(head)))                 {                     printf("您要查找的人的信息在本数据库中：\n");                     printf("name\t\t\tsex\t\tage\t\tscore\n");                     printf("%-10s\t\t%c\t\t%d\t\t%d\n",                             Phead->data.name, Phead->data.sex, Phead->data.age, Phead->data.score);                     printf("------------------------------\n\n");                 }                 else                     printf("查无此人！\n");                 break;             case 3:                 deleteListStu(head);                 break;             case 4:                 sortListStu(head);                 break;             case 5:                 saveList2File(head,"student.data");                 destroyListStu(head);                 return 0;             default:                 printf("您输入错误！\n");         }     }      return 0; }  void initData2File(const char *file_path)         //1、初始化数据库，此时的数据库是文件； {     Stu s[4] =     {         {"sunwukong",'x',500,90},         {"wuneng",'x',800,59 },         {"wujing",'m',700,80},         {"tangseng",'m',24,100}     };      FILE *pf = fopen(file_path, "w+");     if (NULL == pf)         exit(-1);     fwrite((char *)s, sizeof(s), 1, pf);     fclose(pf);     //关闭文件 }  StuNode *createListFromFile(const char *filePash)    //2、读数据库，生成内存数据模型；(createListFromFile)把文件传进来 {     FILE *pf = fopen(filePash, "r+");     if (pf == NULL)         exit(-1);     StuNode *head = (StuNode *)malloc(sizeof(StuNode));  // 创建头结点     if (NULL == head)         exit(-1);     head->next = NULL;     StuNode *cur = (StuNode *)malloc(sizeof(StuNode));     if (!cur)         exit(-1);     while (fread((void *)&cur->data, sizeof(Stu), 1, pf))     {         cur->next = head->next;         head->next = cur;          cur = (StuNode *)malloc(sizeof(StuNode));         if (!cur)             exit(-1);     }     free(cur);     //free(pf);     fclose(pf);      return head; }  void traverseStulist(StuNode * head) {     StuNode *p = head;      while (p) {         printf("%-10s\t\t%c\t\t%d\t\t%d\n", p->data.name, p->data.sex, p->data.age, p->data.score);         p = p->next;     }     /*     head = head->next;     printf("name\t\t\tsex\t\tage\t\tscore\n");     while (head)     {         printf("%-10s\t\t%c\t\t%d\t\t%d\n", head->data.name, head->data.sex, head->data.age, head->data.score);         head = head->next;     }     */ }  void addListStu(StuNode * head)        //增加数据 {     StuNode *cur = (StuNode*)malloc(sizeof(StuNode));     if (NULL == cur)         exit(-1);     cur->next = NULL;      system("cls");      printf("name :");     scanf("%s", cur->data.name);     getchar();      printf("sex   :");     scanf("%c", &cur->data.sex);      printf("age   :");     scanf("%d", &cur->data.age);      printf("score :");     scanf("%d", &cur->data.score);     getchar();      cur->next = head->next;     head->next = cur;      cur = (StuNode*)malloc(sizeof(StuNode)); }  StuNode *searchListStu(StuNode * head)        //查 {     StuNode *p = head->next;     char Name[20];     scanf("%s", Name);      while (p) {         if (strcmp(Name, p->data.name) == 0)             return p;         p = p->next;     }      return NULL;     /*     printf("请输入您要查找的人名：");     char Name[20];     scanf("%s", Name);     head = head->next;     while (head)     {         if (strcmp(Name, head->data.name) == 0)             break;         else             head = head->next;     }     */     return head; }  void deleteListStu(StuNode * head) {     StuNode *pcur, *prev;     StuNode *Dhead = searchListStu(head);     int Index;      if (!Dhead) {         printf("查无此人！\n");         return;     }      //if (Dhead)     //{         printf("您要查找的人的信息在本数据库中：\n");         printf("name\t\t\tsex\t\tage\t\tscore\n");         printf("%-10s\t\t%c\t\t%d\t\t%d\n",                 Dhead->data.name, Dhead->data.sex, Dhead->data.age, Dhead->data.score);         printf("------------------------------\n\n");         printf("继续删除请按 1 ，取消请按 2 ：");         scanf("%d", &Index);          while (1)         {             if (Index == 1)             {                 prev = head;                 pcur = head->next;                  while (pcur != Dhead) {                     prev = prev->next;                     pcur = pcur->next;                 }                 if (pcur == Dhead) {                     prev->next = pcur->next;                     free(pcur);                     break;                 }                  /*                 //head = head->next;                 while (Dhead != head->next)                 {                     head = head->next;                 }                 cur = Dhead;                 head->next = Dhead->next;                 free(Dhead);                 return;                 */             }             else if (Index == 2)                 break;             else             {                 printf("您输入有误！请重新输入！\n");                 printf("继续删除请按 1 ，取消请按 2 ：");                 scanf("%d", &Index);                 continue;             }         }     //}      //else      //   printf("查无此人！\n"); }  int lenList(StuNode * head) {     int len = 0;     StuNode *p = head->next;      while (p) {         len++;         p = p->next;     }     /*     head = head->next;     while (head)     {         len++;         head = head->next;     }     */      return len; }  void sortListStu(StuNode * head) {     StuNode *cur;     StuNode *p;     StuNode *q;     //StuNode *t;      int len = lenList(head);     for (int i = 0; i < len - 1; i++)     {         cur = head;         p = cur->next;         q = p->next;         for (int j = 0; j < len - 1- i; j++)         {             if (p->data.score > q->data.score)             {                 cur->next = q;                 p->next = q->next;                 q->next = p;                  cur = q;                 q = p->next;                 continue;                  //t = q;                 //q = p;                 //p = t;             }             cur = cur->next;             p = cur->next;             q = p->next;         }     } }  void saveList2File(StuNode * head, const char *filePath)       //保存到文件中 {     StuNode *p = head->next;     FILE *pfw = fopen(filePath, "w+");     if (NULL == pfw)         exit(-1);      while (p) {         fwrite((void *)&p->data, sizeof(Stu), 1, pfw);         p = p->next;     }     /*     while (head)     {         fwrite((void *)&head->data, sizeof(Stu), 1, pfw);         head = head->next;     }     */     fclose(pfw); }  void destroyListStu(StuNode * head)     //销毁链表 {     StuNode *cur;     while (head)     {         cur = head;         head = head->next;         free(cur);     } } 供参考，有问题再提出来。 vx:pq08240219

引用 10 楼 自信男孩的回复:#include<stdio.h> #include<stdlib.h> #include<string.h>  #pragma warning(disable:4996)  //management     管理、人员管理系统；  #if 0     1、初始化数据库，此时的数据库是文件；(initData2File) 2、读数据库，生成内存数据模型；(createListFromFile)     3、增、查、改、删、排序；     4、更新数据库；       saveList2File(保存链表文件)             destroyListStu（删除链表） #endif      typedef struct student {     char name[30];     //姓名     char sex;     //性别     int age;         //年龄     int score;     //成绩 }Stu;  typedef struct stuNode {     Stu data;     struct stuNode *next; }StuNode;  void initData2File(const char *); StuNode *createListFromFile(const char *filePash);          //创建链表，把数据传进来 void traverseStulist(StuNode *head);  void addListStu(StuNode *phead);              //增 StuNode *searchListStu(StuNode *head);       //查 void deleteListStu(StuNode *head);            //删除 void sortListStu(StuNode *head);              //排序（按成绩排序） int lenList(StuNode *head);                   //求链表长度 void saveList2File(StuNode *head, const char *filePath); void destroyListStu(StuNode *head);  int main() {     initData2File("student.data");      StuNode *head = createListFromFile("student.data");      traverseStulist(head);     while (1)     {         system("cls");         traverseStulist(head);          printf("1->add\t 2->search 3->delete 4->sort 5->exit\n");         printf("请输入序号：");         int dix;         scanf("%d", &dix);         StuNode *Phead;         switch (dix)         {             case 1:                 addListStu(head);                 break;             case 2:                 if ((Phead = searchListStu(head)))                 {                     printf("您要查找的人的信息在本数据库中：\n");                     printf("name\t\t\tsex\t\tage\t\tscore\n");                     printf("%-10s\t\t%c\t\t%d\t\t%d\n",                             Phead->data.name, Phead->data.sex, Phead->data.age, Phead->data.score);                     printf("------------------------------\n\n");                 }                 else                     printf("查无此人！\n");                 break;             case 3:                 deleteListStu(head);                 break;             case 4:                 sortListStu(head);                 break;             case 5:                 saveList2File(head,"student.data");                 destroyListStu(head);                 return 0;             default:                 printf("您输入错误！\n");         }     }      return 0; }  void initData2File(const char *file_path)         //1、初始化数据库，此时的数据库是文件； {     Stu s[4] =     {         {"sunwukong",'x',500,90},         {"wuneng",'x',800,59 },         {"wujing",'m',700,80},         {"tangseng",'m',24,100}     };      FILE *pf = fopen(file_path, "w+");     if (NULL == pf)         exit(-1);     fwrite((char *)s, sizeof(s), 1, pf);     fclose(pf);     //关闭文件 }  StuNode *createListFromFile(const char *filePash)    //2、读数据库，生成内存数据模型；(createListFromFile)把文件传进来 {     FILE *pf = fopen(filePash, "r+");     if (pf == NULL)         exit(-1);     StuNode *head = (StuNode *)malloc(sizeof(StuNode));  // 创建头结点     if (NULL == head)         exit(-1);     head->next = NULL;     StuNode *cur = (StuNode *)malloc(sizeof(StuNode));     if (!cur)         exit(-1);     while (fread((void *)&cur->data, sizeof(Stu), 1, pf))     {         cur->next = head->next;         head->next = cur;          cur = (StuNode *)malloc(sizeof(StuNode));         if (!cur)             exit(-1);     }     free(cur);     //free(pf);     fclose(pf);      return head; }  void traverseStulist(StuNode * head) {     StuNode *p = head;      while (p) {         printf("%-10s\t\t%c\t\t%d\t\t%d\n", p->data.name, p->data.sex, p->data.age, p->data.score);         p = p->next;     }     /*     head = head->next;     printf("name\t\t\tsex\t\tage\t\tscore\n");     while (head)     {         printf("%-10s\t\t%c\t\t%d\t\t%d\n", head->data.name, head->data.sex, head->data.age, head->data.score);         head = head->next;     }     */ }  void addListStu(StuNode * head)        //增加数据 {     StuNode *cur = (StuNode*)malloc(sizeof(StuNode));     if (NULL == cur)         exit(-1);     cur->next = NULL;      system("cls");      printf("name :");     scanf("%s", cur->data.name);     getchar();      printf("sex   :");     scanf("%c", &cur->data.sex);      printf("age   :");     scanf("%d", &cur->data.age);      printf("score :");     scanf("%d", &cur->data.score);     getchar();      cur->next = head->next;     head->next = cur;      cur = (StuNode*)malloc(sizeof(StuNode)); }  StuNode *searchListStu(StuNode * head)        //查 {     StuNode *p = head->next;     char Name[20];     scanf("%s", Name);      while (p) {         if (strcmp(Name, p->data.name) == 0)             return p;         p = p->next;     }      return NULL;     /*     printf("请输入您要查找的人名：");     char Name[20];     scanf("%s", Name);     head = head->next;     while (head)     {         if (strcmp(Name, head->data.name) == 0)             break;         else             head = head->next;     }     */     return head; }  void deleteListStu(StuNode * head) {     StuNode *pcur, *prev;     StuNode *Dhead = searchListStu(head);     int Index;      if (!Dhead) {         printf("查无此人！\n");         return;     }      //if (Dhead)     //{         printf("您要查找的人的信息在本数据库中：\n");         printf("name\t\t\tsex\t\tage\t\tscore\n");         printf("%-10s\t\t%c\t\t%d\t\t%d\n",                 Dhead->data.name, Dhead->data.sex, Dhead->data.age, Dhead->data.score);         printf("------------------------------\n\n");         printf("继续删除请按 1 ，取消请按 2 ：");         scanf("%d", &Index);          while (1)         {             if (Index == 1)             {                 prev = head;                 pcur = head->next;                  while (pcur != Dhead) {                     prev = prev->next;                     pcur = pcur->next;                 }                 if (pcur == Dhead) {                     prev->next = pcur->next;                     free(pcur);                     break;                 }                  /*                 //head = head->next;                 while (Dhead != head->next)                 {                     head = head->next;                 }                 cur = Dhead;                 head->next = Dhead->next;                 free(Dhead);                 return;                 */             }             else if (Index == 2)                 break;             else             {                 printf("您输入有误！请重新输入！\n");                 printf("继续删除请按 1 ，取消请按 2 ：");                 scanf("%d", &Index);                 continue;             }         }     //}      //else      //   printf("查无此人！\n"); }  int lenList(StuNode * head) {     int len = 0;     StuNode *p = head->next;      while (p) {         len++;         p = p->next;     }     /*     head = head->next;     while (head)     {         len++;         head = head->next;     }     */      return len; }  void sortListStu(StuNode * head) {     StuNode *cur;     StuNode *p;     StuNode *q;     //StuNode *t;      int len = lenList(head);     for (int i = 0; i < len - 1; i++)     {         cur = head;         p = cur->next;         q = p->next;         for (int j = 0; j < len - 1- i; j++)         {             if (p->data.score > q->data.score)             {                 cur->next = q;                 p->next = q->next;                 q->next = p;                  cur = q;                 q = p->next;                 continue;                  //t = q;                 //q = p;                 //p = t;             }             cur = cur->next;             p = cur->next;             q = p->next;         }     } }  void saveList2File(StuNode * head, const char *filePath)       //保存到文件中 {     StuNode *p = head->next;     FILE *pfw = fopen(filePath, "w+");     if (NULL == pfw)         exit(-1);      while (p) {         fwrite((void *)&p->data, sizeof(Stu), 1, pfw);         p = p->next;     }     /*     while (head)     {         fwrite((void *)&head->data, sizeof(Stu), 1, pfw);         head = head->next;     }     */     fclose(pfw); }  void destroyListStu(StuNode * head)     //销毁链表 {     StuNode *cur;     while (head)     {         cur = head;         head = head->next;         free(cur);     } } 供参考，有问题再提出来。 能加个好友，私聊吗？有些问题想请教一下😌

引用 10 楼 自信男孩的回复:#include<stdio.h> #include<stdlib.h> #include<string.h>  #pragma warning(disable:4996)  //management     管理、人员管理系统；  #if 0     1、初始化数据库，此时的数据库是文件；(initData2File) 2、读数据库，生成内存数据模型；(createListFromFile)     3、增、查、改、删、排序；     4、更新数据库；       saveList2File(保存链表文件)             destroyListStu（删除链表） #endif      typedef struct student {     char name[30];     //姓名     char sex;     //性别     int age;         //年龄     int score;     //成绩 }Stu;  typedef struct stuNode {     Stu data;     struct stuNode *next; }StuNode;  void initData2File(const char *); StuNode *createListFromFile(const char *filePash);          //创建链表，把数据传进来 void traverseStulist(StuNode *head);  void addListStu(StuNode *phead);              //增 StuNode *searchListStu(StuNode *head);       //查 void deleteListStu(StuNode *head);            //删除 void sortListStu(StuNode *head);              //排序（按成绩排序） int lenList(StuNode *head);                   //求链表长度 void saveList2File(StuNode *head, const char *filePath); void destroyListStu(StuNode *head);  int main() {     initData2File("student.data");      StuNode *head = createListFromFile("student.data");      traverseStulist(head);     while (1)     {         system("cls");         traverseStulist(head);          printf("1->add\t 2->search 3->delete 4->sort 5->exit\n");         printf("请输入序号：");         int dix;         scanf("%d", &dix);         StuNode *Phead;         switch (dix)         {             case 1:                 addListStu(head);                 break;             case 2:                 if ((Phead = searchListStu(head)))                 {                     printf("您要查找的人的信息在本数据库中：\n");                     printf("name\t\t\tsex\t\tage\t\tscore\n");                     printf("%-10s\t\t%c\t\t%d\t\t%d\n",                             Phead->data.name, Phead->data.sex, Phead->data.age, Phead->data.score);                     printf("------------------------------\n\n");                 }                 else                     printf("查无此人！\n");                 break;             case 3:                 deleteListStu(head);                 break;             case 4:                 sortListStu(head);                 break;             case 5:                 saveList2File(head,"student.data");                 destroyListStu(head);                 return 0;             default:                 printf("您输入错误！\n");         }     }      return 0; }  void initData2File(const char *file_path)         //1、初始化数据库，此时的数据库是文件； {     Stu s[4] =     {         {"sunwukong",'x',500,90},         {"wuneng",'x',800,59 },         {"wujing",'m',700,80},         {"tangseng",'m',24,100}     };      FILE *pf = fopen(file_path, "w+");     if (NULL == pf)         exit(-1);     fwrite((char *)s, sizeof(s), 1, pf);     fclose(pf);     //关闭文件 }  StuNode *createListFromFile(const char *filePash)    //2、读数据库，生成内存数据模型；(createListFromFile)把文件传进来 {     FILE *pf = fopen(filePash, "r+");     if (pf == NULL)         exit(-1);     StuNode *head = (StuNode *)malloc(sizeof(StuNode));  // 创建头结点     if (NULL == head)         exit(-1);     head->next = NULL;     StuNode *cur = (StuNode *)malloc(sizeof(StuNode));     if (!cur)         exit(-1);     while (fread((void *)&cur->data, sizeof(Stu), 1, pf))     {         cur->next = head->next;         head->next = cur;          cur = (StuNode *)malloc(sizeof(StuNode));         if (!cur)             exit(-1);     }     free(cur);     //free(pf);     fclose(pf);      return head; }  void traverseStulist(StuNode * head) {     StuNode *p = head;      while (p) {         printf("%-10s\t\t%c\t\t%d\t\t%d\n", p->data.name, p->data.sex, p->data.age, p->data.score);         p = p->next;     }     /*     head = head->next;     printf("name\t\t\tsex\t\tage\t\tscore\n");     while (head)     {         printf("%-10s\t\t%c\t\t%d\t\t%d\n", head->data.name, head->data.sex, head->data.age, head->data.score);         head = head->next;     }     */ }  void addListStu(StuNode * head)        //增加数据 {     StuNode *cur = (StuNode*)malloc(sizeof(StuNode));     if (NULL == cur)         exit(-1);     cur->next = NULL;      system("cls");      printf("name :");     scanf("%s", cur->data.name);     getchar();      printf("sex   :");     scanf("%c", &cur->data.sex);      printf("age   :");     scanf("%d", &cur->data.age);      printf("score :");     scanf("%d", &cur->data.score);     getchar();      cur->next = head->next;     head->next = cur;      cur = (StuNode*)malloc(sizeof(StuNode)); }  StuNode *searchListStu(StuNode * head)        //查 {     StuNode *p = head->next;     char Name[20];     scanf("%s", Name);      while (p) {         if (strcmp(Name, p->data.name) == 0)             return p;         p = p->next;     }      return NULL;     /*     printf("请输入您要查找的人名：");     char Name[20];     scanf("%s", Name);     head = head->next;     while (head)     {         if (strcmp(Name, head->data.name) == 0)             break;         else             head = head->next;     }     */     return head; }  void deleteListStu(StuNode * head) {     StuNode *pcur, *prev;     StuNode *Dhead = searchListStu(head);     int Index;      if (!Dhead) {         printf("查无此人！\n");         return;     }      //if (Dhead)     //{         printf("您要查找的人的信息在本数据库中：\n");         printf("name\t\t\tsex\t\tage\t\tscore\n");         printf("%-10s\t\t%c\t\t%d\t\t%d\n",                 Dhead->data.name, Dhead->data.sex, Dhead->data.age, Dhead->data.score);         printf("------------------------------\n\n");         printf("继续删除请按 1 ，取消请按 2 ：");         scanf("%d", &Index);          while (1)         {             if (Index == 1)             {                 prev = head;                 pcur = head->next;                  while (pcur != Dhead) {                     prev = prev->next;                     pcur = pcur->next;                 }                 if (pcur == Dhead) {                     prev->next = pcur->next;                     free(pcur);                     break;                 }                  /*                 //head = head->next;                 while (Dhead != head->next)                 {                     head = head->next;                 }                 cur = Dhead;                 head->next = Dhead->next;                 free(Dhead);                 return;                 */             }             else if (Index == 2)                 break;             else             {                 printf("您输入有误！请重新输入！\n");                 printf("继续删除请按 1 ，取消请按 2 ：");                 scanf("%d", &Index);                 continue;             }         }     //}      //else      //   printf("查无此人！\n"); }  int lenList(StuNode * head) {     int len = 0;     StuNode *p = head->next;      while (p) {         len++;         p = p->next;     }     /*     head = head->next;     while (head)     {         len++;         head = head->next;     }     */      return len; }  void sortListStu(StuNode * head) {     StuNode *cur;     StuNode *p;     StuNode *q;     //StuNode *t;      int len = lenList(head);     for (int i = 0; i < len - 1; i++)     {         cur = head;         p = cur->next;         q = p->next;         for (int j = 0; j < len - 1- i; j++)         {             if (p->data.score > q->data.score)             {                 cur->next = q;                 p->next = q->next;                 q->next = p;                  cur = q;                 q = p->next;                 continue;                  //t = q;                 //q = p;                 //p = t;             }             cur = cur->next;             p = cur->next;             q = p->next;         }     } }  void saveList2File(StuNode * head, const char *filePath)       //保存到文件中 {     StuNode *p = head->next;     FILE *pfw = fopen(filePath, "w+");     if (NULL == pfw)         exit(-1);      while (p) {         fwrite((void *)&p->data, sizeof(Stu), 1, pfw);         p = p->next;     }     /*     while (head)     {         fwrite((void *)&head->data, sizeof(Stu), 1, pfw);         head = head->next;     }     */     fclose(pfw); }  void destroyListStu(StuNode * head)     //销毁链表 {     StuNode *cur;     while (head)     {         cur = head;         head = head->next;         free(cur);     } } 供参考，有问题再提出来。 感谢！困扰多天地问题得已解决，非常感谢！😃

引用 6 楼 ping527963401 的回复:[quote=引用 4 楼 赵4老师的回复:]崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。 弄了好长时间了，没查出来哪错了，感觉心里总不对劲[/quote] 程序启动、直接按5，没有触发断点

引用 7 楼 赵4老师的回复:数据结构对单链表进行数据排序 http://bbs.csdn.net/topics/392201633 #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; }  调试了好多次，总是在void saveList2File(StuNode * head, char *filePath)       //保存到文件中           里面报错，但就是不知道具体是哪一个，这里面就那几句，都一一对应好多次了，实在不知道错哪里了😂   能加个扣扣吗？527963401

我也怀疑是内存越界，但查不出来是哪？都好几个小时了，能帮我看看具体是哪出问题了吗？感谢

断点说明你的链表操作有内存越界

增，查，删，排序，都没问题，运行5，保存到文件中就出错，说是引发了一个断点，到文件中查看，也什么都没有，各位大佬帮我看看哪儿出错了，感谢！

引用 4 楼 赵4老师的回复:崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。 弄了好长时间了，没查出来哪错了，感觉心里总不对劲

引用 4 楼 赵4老师的回复:崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。 我用的是VS2017，现在自学阶段，没有系统的学过这个软件，能告诉我具体怎么操作吗？感谢


Question: c语言将已排序的学生成绩文件进行插入处理。插入一个学生的3门课程成绩，程序先计算新插入学生的平均成绩，然后将它按成绩高低顺序插入，插入后建立一个新文件。

aaaaas


Question: 为什么只有n=1的时候才输出其他都不行？

#include<stdio.h> #include<stdlib.h>  struct student {     int num;     char swt[10];     int c,oop,db;     //int avg;     float avg; }s;  struct student input() {     //struct student swt;      scanf("%d%s%d%d%d",&s.num,s.swt,&s.c,&s.oop,&s.db);     s.avg = (s.c+s.oop+s.db)/3.0;      return s; }  void sort(int n,struct student wt[]) {     struct student temp;     int i,j,index;      for(i=0;i<n;i++)     {         index=i;         for(j=i+1;j<n;j++)             if(wt[j].avg>wt[index].avg)             //{                 index = j;                 //index=j;                 //temp=wt[i];                 //wt[i]=wt[index];                 //wt[index]=temp;             //}         if (index != i) {                 temp=wt[i];                 wt[i]=wt[index];                 wt[index]=temp;         }         //s=wt[i];     } }  void output(int n,struct student *p) {     int i;      for(i=1;i<=n;i++,p++)     {         //p=&s;         printf("%-10d%-8s%-10d%-10d%-10d%.1f\n",(*p).num,(*p).swt,(*p).c,(*p).oop,(*p).db,(*p).avg);     } }    //void main() int main() {     int n,i;     struct student *p,s;     struct student swt[100];      printf("请输入学生人数：");     scanf("%d",&n);     //for(i=1;i<=n;i++)     for(i = 0; i < n; i++)     {         printf("第%d个学生：\n",i);         printf("\t\t学号 姓名 C语言 OOP 数据库\n");         swt[i] = input();         //p=&s;     }      //sort(n,&swt[i]);     sort(n, swt);     p = swt;     output(n,p);     system("pause"); }  你参考～

我试着改了以下，不知道是不是你期望的结果。 void output(int n, struct student *p)  {  	int i;  	for (i = 1; i <= n; i++, p++)  	{  		//p = &s;//-----------注释掉该行-------------  		printf("%-10d%-8s%-10d%-10d%-10d%-10d", (*p).num, (*p).swt, (*p).c, (*p).oop, (*p).db, (*p).avg);  	}  } 在main()函数中 	for (i = 1; i <= n; i++)  	{  		printf("第%d个学生：\n", i);  		printf("\t\t学号 姓名 C语言 OOP 数据库\n");  		swt[i-1] = input();//----------修改--------------  		p = swt;//----------------修改----------------  	} 以下是VS2015调试的结果

引用 1 楼 user-3的回复:在main函数里的输入的for循环里p指针每次都重新指向了另一个地址了 应该怎么改呢那么应该怎么改呢

在main函数里的输入的for循环里p指针每次都重新指向了另一个地址了


Question: 求助！！求助啊！！

你是不是用了预编译但是把预编译的头文件删了

引用 4 楼 happycandyfly 的回复:[quote=引用 3 楼 至尊宝、 的回复:] 你是不是用了预编译但是把预编译的头文件删了  好像是因为之前我安装了这个软件后，卸载留下了什么东西，然后我重新安装了一下，现在没事了。。[/quote]好吧

引用 3 楼 至尊宝、 的回复:你是不是用了预编译但是把预编译的头文件删了  好像是因为之前我安装了这个软件后，卸载留下了什么东西，然后我重新安装了一下，现在没事了。。

无图无真相，建议贴出软件问题的图片或代码

试了网上的所有方法还是没有解决问题。。


Question: c语言

char  tel[20]="12345678910";

std::vector<string> numbers; 完成。


Question: 请教C语言呐

引用 6 楼 吖如的回复:++SQR(k+1)   展开  ++k+1*k+1   =4+1*k+1=4+4+1=9 谢谢，明白了。。。。。。

#define 只是简单的文本替换

宏定义的时候带上（）是个好习惯

一定要先替换啊！++SQR(k+1) 展开是++k+1*k+1，然后根据优先级计算，先算++k，这时k的值已经发生改变了，变成4，然后再算后面，答案就是9了。

++SQR(k+1)   展开是  ++k+1*k+1   别加括号啊

VC编译选项加/EP /P（项目、属性、配置属性、C/C++、预处理器、预处理到文件：是，预处理取消显示行号：是），重新编译，查看宏展开后对应的.i文件。gcc加-E http://bbs.csdn.net/topics/391003898


Question: 一名小白请教关于统计函数和strlwr函数如何使用

你不会就直接发帖的吗？可以自己搜一下吗？ 相隔15个小时，问题的内容一字不差


Question: 请求解决一下有关链表的问题

引用 1 楼 user-2 的回复：alloc.h是过时的头文件，早就不用了。 代码小错误很多，自己比对下吧，主要是空指针和scanf使用的问题 void creat(struct stuinfo*head) {      struct stuinfo *p,*q;      int num;      char name[10];      char sex;      int age;      float cscore;      p=head;     q= head;      while (1)      {            printf ("输入学生信息（学号，名字，性别，年龄，计算机成绩）");            scanf ("%d %s %c %d %f",&num,name, &sex,&age,&cscore);            if (num==0)               break;            p=(struct stuinfo*)malloc(sizeof (struct stuinfo));            if (p==NULL)               break;            p->num=num;            strcpy (p->name,name);            p->sex=sex;            p->age=age;            p->cscore=cscore;            q->next=p;            q=p;      }      q->next=NULL;      }      void display(struct stuinfo*head)      {         struct stuinfo*p=head->next;         while (p!=NULL)         {         printf ("No.%5d\tname:%8s\t\n",p->num,p->name);         p=p->next;  }我刚刚比对改正了之后，就又出现了一个问题，死循环，一直输出printf里面的输入学生信息，这是为啥

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


Question: 哪个大佬教一下

第四个问题怎么把收入和支出的钱分开比较啊

引用 4 楼 qq_45169296的回复:[quote=引用 3 楼 user-1的回复:]C语言肯定是需要的，看你的题目要求貌似不能用SQL  题目要求是将账单转换成纯文本格式，也就是.txt文件，你现在要使用文件/标准IO对txt文件进行读写操作  **文件读写操作 open()函数打开一个文件； read()函数读文件；  根据读到的内容进行搜索  大概过程就是这样 问一下第三个任务怎么输入两个时间段啊，我只能输入一个时间段然后内容就出来了[/quote] 将每一条信息封装成结构体，对时间变量进行判断

将每一条信息封装成结构体，对时间变量进行判断

引用 3 楼 user-1的回复:C语言肯定是需要的，看你的题目要求貌似不能用SQL  题目要求是将账单转换成纯文本格式，也就是.txt文件，你现在要使用文件/标准IO对txt文件进行读写操作  **文件读写操作 open()函数打开一个文件； read()函数读文件；  根据读到的内容进行搜索  大概过程就是这样 问一下第三个任务怎么输入两个时间段啊，我只能输入一个时间段然后内容就出来了

还是要用C语言做，有没有大佬给个大概啊


Question: 求大佬修改（C语言）

你这里面问题有点多，你编译一下会发现，有一些函数你定义的时候跟使用的时候参数表不一样；还有一些用了中文字符


Question: 哪个大神有空教教我呗，用C语言基础处理

我用#CSDN#这个app发现了有技术含量的博客，小伙伴们求同去《C语言实现大小写字母转换》, 一起来围观吧 https://blog.csdn.net/aiwangtingyun/article/details/79564419


Question: n个元素的集合有多少种划分方法

int C(int n, int m) { 	if (m > n) 		return 0;  	else if (n == m || m == 0) 		return 1;  	else  		return C(n - 1, m) + C(n - 1, m - 1); }


Question: 万年历的部分程序不是太懂，有没有大佬给提点一下！

代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。  对复杂的表达式不懂，可以用一些临时变量，将其拆解成等效的多步简单表达式帮助理解。

有空读些高质量的代码吧


Question: 大神救救孩子吧

打断点呀，不会打断点就print中间结果呀

大兄弟，代码补贴出来懒得给你改哦。


Question: 为什么可以依次的的输出，不是定义了行指针变量了吗

引用 1 楼 user-3 的回复:数组的本质是指针偏移，从这点上说a[3][3]可以等价于a[9]，因此是可以用一维数组的方式访问二维数组 a[0][0] = a[0]   a[1][1] = a[4] a[2][2] = a[8] 这个应该解释的很清楚了。 数组定义就是在内存在分配数组类型的N个连续空间,比如一维数组int a[3];以32位为例,假定内存分配给你从0x10000地址开始，那么a[0]就是0x10000内存中的数字，a[1]就是0x10004内存中的数字,a[2]就是0x10008内存中的数字。 二唯数组展开int a[3][3];就是在0x1000c开始的地方继续一个a[3]。a[1][0]就是0x1000c内存中的数字。a[0][0]就是0x10000内存中的数字  不知道这样说你能明白不，自己纸上画个图应该不难理解

～ 解释如下图，  如有帮助，欢迎及时 结帖、给分！ ：-） ～

引用 1 楼 user-3的回复:数组的本质是指针偏移，从这点上说a[3][3]可以等价于a[9]，因此是可以用一维数组的方式访问二维数组 a[0][0] = a[0]   a[1][1] = a[4] a[2][2] = a[8] 还是没搞清楚，什么意思，没明白

引用 1 楼 user-3 的回复:数组的本质是指针偏移，从这点上说a[3][3]可以等价于a[9]，因此是可以用一维数组的方式访问二维数组 a[0][0] = a[0]   a[1][1] = a[4] a[2][2] = a[8] 如果是基于楼主提问的这段代码来说 a[3][3] 和 a[9] 的话，恐怕会让他忽视这样的下标已经越界了哟！


Question: 有没有什么好的办法？自己写的太繁琐，还缺少情况

十万到一百万内的素数已经写好了，差个判断。自己写的封装函数无法达到要求


Question: 如何读取文件中数据，跪求大佬帮忙

open（）函数打开一个文件 read（）函数读文件内容

仅供参考：//NAME: essaie bla bla //DIMENSION: 8 //DATA //1  14  15 //2  11  10 //3  6   4 //4  7   13 //5  9   21 //6  19  3 //7  1   5 //8  8   8 //EOF // // 文本文件中可能还含有其他内容，但是需要用到的内容即以上  //比如data.txt: //NAME: essaie bla bla //其它内容 //DIMENSION: 8 //其它内容 //DATA //其它内容 //1  14  15 //其它内容 //2  11  10 //其它内容 //3  6   4 //其它内容 //4  7   13 //其它内容 //5  9   21 //其它内容 //6  19  3 //其它内容 //7  1   5 //其它内容 //8  8   8 //其它内容 //EOF  // 目标是要获取NAME后字串，DIMENSION后数值，以及DATA以下的数值 // 其中NAME就是随便个字句，DIMENSION是城市数量，DATA以下是城市编号，X坐标，Y坐标 // 所有的这些将赋值给一个事先定义好的结构 #include <stdio.h> #include <string.h> #define MAXCPL   80   //每行最大字符数 #define MAXCITY  100  //每组数据中DATA最多项数，DIMENSION的最大值 #define MAXNAMEL 32   //NAME最大长度 struct S {     char NAME[MAXNAMEL+1];     int  DIMENSION;     struct D {         int NO;         int X;         int Y;     } DATA[MAXCITY]; } s; FILE *f; int st,n,i; char ln[MAXCPL]; int main() {     f=fopen("data.txt","r");     if (NULL==f) {         printf("Can not open file data.txt!\n");         return 1;     }     st=0;     n=0;     while (1) {         if (NULL==fgets(ln,MAXCPL,f)) break;         if (st==0) {             if (1==sscanf(ln,"NAME: %31[^\n]",s.NAME)) st=1;         } else if (st==1) {             if (1==sscanf(ln,"DIMENSION: %d",&s.DIMENSION)) st=2;         } else if (st==2) {             if (0==strcmp(ln,"DATA\n")) st=3;         } else if (st==3) {             if (3==sscanf(ln,"%d%d%d",&s.DATA[n].NO,&s.DATA[n].X,&s.DATA[n].Y)) {                 n++;                 if (n>=MAXCITY || n>=s.DIMENSION) break;             }         }     }     fclose(f);     printf("s.NAME=[%s]\n",s.NAME);     printf("s.DIMENSION=%d\n",s.DIMENSION);     for (i=0;i<n;i++) {         printf("s.DATA[%d].NO,X,Y=%d,%d,%d\n",i,s.DATA[i].NO,s.DATA[i].X,s.DATA[i].Y);     }     return 0; } //s.NAME=[essaie bla bla] //s.DIMENSION=8 //s.DATA[0].NO,X,Y=1,14,15 //s.DATA[1].NO,X,Y=2,11,10 //s.DATA[2].NO,X,Y=3,6,4 //s.DATA[3].NO,X,Y=4,7,13 //s.DATA[4].NO,X,Y=5,9,21 //s.DATA[5].NO,X,Y=6,19,3 //s.DATA[6].NO,X,Y=7,1,5 //s.DATA[7].NO,X,Y=8,8,8


Question: 在vc++2010中没有graphics.h头文件怎么办？有什么插件或办法解决

graphics.h是TC的头文件，VC不支持 但有人写了个兼容扩展包EasyX，你下载安装即可


Question: 解释一下第二个大的循环体转置的原理是什么

～ 矩阵转置的定义：将矩阵的行列互换得到的新矩阵称为转置矩阵。 ～ 上面的代码，就是输出矩阵里的值的时候，把行下标、列下标互换后输出，输出来的结果是转置后的矩阵的形式。 不过，二维数组本身的元素的排列是没有变的哦。 ～ 如有帮助，欢迎及时结帖、给分。：-） ～ 顺祝儿童节快乐！


Question: 请指教

main函数中： printf("继续输入吗？y/n:"); getchar();        //没必要存在，或者在你输入时小心点，会吃掉你输入的一个字符 scanf("%c", &yn);


Question: C语言问题

引用 2 楼 嘟嘟洒水车 的回复：第二维必须填上数字。 数组声明时只有最高维可以省略。那为什么第一张图的一维数组赋不了值

第二维必须填上数字。 数组声明时只有最高维可以省略。

char不能赋值字符串，要改成char数组


Question: c或python用欧拉方法或四阶龙格库塔模拟微分方程组的迭代


Question: 为什么没有输出呢？

%s是要输出一个以\0结尾的字符串，在使用时要用字符串的首地址，这里*str是取了一个1，%s会把1当成一个地址。而1是一个非法地址，所以就没有输出咯

楼主过要搞清楚 *str和str的区别哦 在线测试： https://code.y444.cn/gcc.html?share_id=bae40feceb3e3695fd291be6c16456ff  *str是取地址里面的值哦，如果不加*默认是字符串首地址。 printf函数占位符对应的应该是字符串的首地址，而不是字符串值。

我认为*str的值是1，然后printf("%s",*str);就变成printf("%s",1);打印内存地址为1开始的内存，肯定会报错，非法内存访问。


Question: C语言程序，希望大神帮忙看一下，写了之后就是运行不对（vc++2010）

引用 楼主 qq_45108790的回复:面向小学1~2年级学生，随机选择两个整数和加减法形成算式要求学生解答。  功能要求：   （1）电脑随机出10道题，每题10分，程序结束时显示学生得分；   （2）确保算式没有超出1~2年级的水平，只允许进行50以内的加减法，不允许两数之和或之差超出0~50的范围，负数更是不允许的；   （3）每道题学生有三次机会输入答案，当学生输入错误答案时，提醒学生重新输入，如果三次机会结束则输出正确答案；   （4）对于每道题，学生第一次输入正确答案得10分，第二次输入正确答案得7分，第三次输入正确答案得5分，否则不得分；   （5）总成绩90以上显示“SMART” ,80-90显示“GOOD”，70-80显示“OK”,60-70显示“PASS”，60以下“TRY AGAIN"  程序如下 #include<stdlib.h> #include<stdio.h> #include<conio.h> int main() {   int num=0,err=0;/*答题数，错误数*/   while(1)   {     int a=0,b=0,c=0,d=0,i=0,result,score,sum=0;     char sf[2]={'+','-'};/*出题*/    while(1)    {      a=rand()%51;      b=rand()%51;      d=rand()%2;     if(c>=0&&c<=50) break;     }    printf("%d%c%d=",a,sf[d],b);/*答案*/    printf("请输入计算结果：\n");    while(1)    {      scanf("%d",&result);      i++;      if(result==c)      {        printf("恭喜回答正确！\n");        break;      }      else if(i<3)      {        printf("回答错误，请重新回答：\n");      }       if(i==1)       {         score[num]=10;        }       else if(i==2)       {         score[num]=7;        }       else       {         score[num]=5;       }       break;     else     {       err++;       break;      }    }    num++;    if(num==10)    break;   }  sum=sum+score[num];  printf("你的成绩：%d",sum);  if(sum>90)  {    printf("SMART\n");  }  else if(sum>=80)  {    printf("GOOD\n");   }  else if(sum>=70)  {    printf("OK\n");   }  else if(sum>=60)  {    printf("PASS\n");   }  else  {    printf("TRY AGAIN\n");   } return 0; } 你if  else用的还不熟练，程序中好多逻辑错误，以及好多变量都定义成局部变量，数组定义成整形变量。我稍微对你的程序做了一些修改，有看不明白的可以问我

引用 楼主 qq_45108790的回复:面向小学1~2年级学生，随机选择两个整数和加减法形成算式要求学生解答。  功能要求：   （1）电脑随机出10道题，每题10分，程序结束时显示学生得分；   （2）确保算式没有超出1~2年级的水平，只允许进行50以内的加减法，不允许两数之和或之差超出0~50的范围，负数更是不允许的；   （3）每道题学生有三次机会输入答案，当学生输入错误答案时，提醒学生重新输入，如果三次机会结束则输出正确答案；   （4）对于每道题，学生第一次输入正确答案得10分，第二次输入正确答案得7分，第三次输入正确答案得5分，否则不得分；   （5）总成绩90以上显示“SMART” ,80-90显示“GOOD”，70-80显示“OK”,60-70显示“PASS”，60以下“TRY AGAIN"  程序如下 #include<stdlib.h> #include<stdio.h> #include<conio.h> int main() {   int num=0,err=0;/*答题数，错误数*/   while(1)   {     int a=0,b=0,c=0,d=0,i=0,result,score,sum=0;     char sf[2]={'+','-'};/*出题*/    while(1)    {      a=rand()%51;      b=rand()%51;      d=rand()%2;     if(c>=0&&c<=50) break;     }    printf("%d%c%d=",a,sf[d],b);/*答案*/    printf("请输入计算结果：\n");    while(1)    {      scanf("%d",&result);      i++;      if(result==c)      {        printf("恭喜回答正确！\n");        break;      }      else if(i<3)      {        printf("回答错误，请重新回答：\n");      }       if(i==1)       {         score[num]=10;        }       else if(i==2)       {         score[num]=7;        }       else       {         score[num]=5;       }       break;     else     {       err++;       break;      }    }    num++;    if(num==10)    break;   }  sum=sum+score[num];  printf("你的成绩：%d",sum);  if(sum>90)  {    printf("SMART\n");  }  else if(sum>=80)  {    printf("GOOD\n");   }  else if(sum>=70)  {    printf("OK\n");   }  else if(sum>=60)  {    printf("PASS\n");   }  else  {    printf("TRY AGAIN\n");   } return 0; } #define _CRT_SECURE_NO_WARNINGS #include<stdlib.h> #include<stdio.h> #include<conio.h> int main() { 	int num = 0;/*答题数*/ 	int  a = 0, b = 0, c = 0, d = 0, i = 0, result, sum = 0; 	int score[10] = { 0 }; 	while (1) 	{ 		char  sf[2] = { '+', '-' };/*出题*/ 		while (1) 		{ 			a = rand() % 51; 			b = rand() % 51; 			d = rand() % 2; 			if (d == 0)   //0代表加法 			{ 				c = a + b; 			} 			else   //不是0就说明是减法 			{ 				c = a - b; 			} 			if (c >= 0 && c <= 50)  break; 		} 				printf("%d%c%d=", a, sf[d], b);/*答案*/ 		printf("请输入计算结果：\n"); 		i = 0;   //把i清零  不然没计算一个新题i就会一直累加 		while (1) 		{  			scanf("%d", &result); 			i++; 			if (result == c) 			{ 				printf("恭喜回答正确！\n"); 				if (i == 1) 				{ 					score[num] = 10; 				} 				else  if (i == 2) 				{ 					score[num] = 7; 				} 				else 				{ 					score[num] = 5; 				} 				break;  			} 			else 			{ 				printf("回答错误，请重新回答：\n"); 				if (i == 3) 				{ 					printf("本题机会已经用完,开始下一题\n"); 					break; 				} 			}  		} 		sum += score[num]; 		num++; 		if (num == 10) 			break; 	} 	printf("你的成绩：%d", sum); 	if (sum>90) 	{ 		printf("SMART\n"); 	} 	else if (sum >= 80) 	{ 		printf("GOOD\n"); 	} 	else if (sum >= 70) 	{ 		printf("OK\n"); 	} 	else  if (sum >= 60) 	{ 		printf("PASS\n"); 	} 	else 	{ 		printf("TRY AGAIN\n"); 	} 	return 0; }

用switch 不可以？


Question: 求助

程序进入了 default 之后，没有遇到 break; 语句，程序就顺序执行后面的语句

引用 10 楼 weixin_45049670 的回复:如果按你说的顺序执行case语句，得到的k依次是5,10,30，最后的结果就是30。可是这题的答案55又是怎么出来的的呢？ case 1: 后面的语句不是有 【break; 】么？ 程序在 switch 里面 执行了 default : 和 break; 之间的两个  printf 就 跳出 switch 结构了啊！  看来你还是没理解上面的解释哦！ 多读几遍，多读几遍，先别着急想题目怎么回答，先把switch-case这个语法了解了再说。 ～

引用 12 楼 weixin_45049670 的回复:可以的老哥。意思是这个55是两次执行printf的结果对吧，每一次都是5。老哥加个QQ呗，说不定还有问题问你  俺不用QQ好多年了！ ：）

引用 5 楼 拥抱Linux的回复:！ （1）default 标签是可选的，可以放在 switch 语句体内任何位置。 如果没有 default 标签，并且没有任何 case 常量符合 switch 语句控制表达式的计算结果，那么 switch 语句体中的语句都不会执行。 在这种情况下，程序流会转而执行 switch 语句体后面的语句。 （2）C 语言的标签只用于标识程序流可能跳转到的目的地。这些标签本身对程序没有影响。因此，从 switch 跳转到第一个符合条件的 case 标签之后，程序会继续顺序执行，不受其他标签的影响。 ——也就是说，像你上面的代码，程序跳转到 default 标签之后，只要没有遇到 break; 语句， 那么后面的任何 case 标签 都不再影响程序的执行了，也就是说，只要没有遇到 break; 语句，后面的所有语句都会被顺序执行。 ——换一种方式来理解也可以： switch-case 结构， swtich后面圆括号里的量 只能够去 寻找 一次、一次、一次  标签 ，它的出发点是 switch ，终点是 符合条件的 case 标签 或者 default 。一旦 它找到了 符合条件的 case 标签 或者 default ， 程序就执行后面的代码。那么，现在 switch后面圆括号里的量 就结束了 它 去寻找 标签的使命了， 那么 只要没有遇到 break; 语句，后面的所有语句都会被顺序执行。 所以，上面的代码，程序进入了 default 之后，因为没有遇到 break; 语句，所以程序就顺序执行后面的语句了，而后面的标签对于程序而言是什么呢？什么都不是，你把那些标签理解成是不影响程序执行的注释都可以。 （3）如果在这个符合条件的 case 标签之后，其他 case 标签中的语句应该被忽略，就应该在所执行的最后一条语句后，加上 break 语句，使得程序流直接跳转到 switch 语句体的后面。 ！ 顺便提一句，C语言的switch-case是这样的语法规定，而其他有一些语言的switch-case与之相反，不需要break;语句就自动从符合条件的标签末尾跳出整个switch结构了，比如golang。 所以，这里的关键还是理解C的switch-case的运作过程，特别是不要认为有多少个case就会比较多少次，像上面的代码，default后面的case 标签都是被无视了的，而语句倒是都要执行。 ～ 如果按你说的顺序执行case语句，得到的k依次是5,10,30，最后的结果就是30。可是这题的答案55又是怎么出来的的呢？

引用 7 楼 嘟嘟洒水车的回复:default放最前被人看到怕不是要被骂死，这题一股浓浓的a+++++a的感觉。 55这个答案是怎么出来的啊

引用 11 楼 拥抱Linux的回复:[quote=引用 10 楼 weixin_45049670 的回复:] 如果按你说的顺序执行case语句，得到的k依次是5,10,30，最后的结果就是30。可是这题的答案55又是怎么出来的的呢？ case 1: 后面的语句不是有 【break; 】么？ 程序在 switch 里面 执行了 default : 和 break; 之间的两个  printf 就 跳出 switch 结构了啊！  看来你还是没理解上面的解释哦！ 多读几遍，多读几遍，先别着急想题目怎么回答，先把switch-case这个语法了解了再说。 ～[/quote] 可以的老哥。意思是这个55是两次执行printf的结果对吧，每一次都是5。老哥加个QQ呗，说不定还有问题问你

老哥给力呀，容我看看先，

引用 3 楼 weixin_45049670 的回复:[quote=引用 1 楼 轻箬笠的回复:]default必须放在最后，否则不会进其他选项 可是书上写的是default如果不放最后是否结束循环取决于default后是否有break呀，而且如果执行case 1，结果是5，答案是55。[/quote] 你default放在最前面，那不管switch的值是多少，都会进default，因为default没有break，所以顺序下来，先找到case 1，因为case 1有break，所以跳出switch。 你可以试试把case 1的break去掉，那样会继续执行case 2的部分，直到结束或者遇到break为止。 所以强调要添加break，不添加的话就按照顺序执行。

引用 1 楼 轻箬笠的回复:default必须放在最后，否则不会进其他选项 可是书上写的是default如果不放最后是否结束循环取决于default后是否有break呀，而且如果执行case 1，结果是5，答案是55。

你这题应该先执行default，然后进入case 1吧，然后case 1的break

default必须放在最后，否则不会进其他选项


Question: 菜鸟请教，为什么在控制台里一进入副菜单就瞬间回到了主菜单？（比如在没有数据的情况下点查询数据就只会在未有数据的菜单以下就回到主菜单了）

在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。 //请今后要用 char c; scanf("%c",&c); //时，都改为 char s[2]; char c; scanf("%1s",s); c=s[0]; //自动跳过一个或多个空格或Tab字符或回车换行，读取下一个字符。


Question: 新手提问mfc

CString strChoosed; m_mediaCombox.GetLBText(m_mediaCombox.GetCurSel(),strChoosed); https://blog.csdn.net/leighton_stars/article/details/10339761

假设你定义的变量是A，updata后直接AfxMessageBox(A);把报错那句话注释掉不需要了

引用 8 楼 CT8100的回复:[quote=引用 7 楼 qq_44966400 的回复:] [quote=引用 6 楼 CT8100的回复:]CComBoBox::对象你不要找错了，用的关联的cstring变量 我就是在类向导里combo那块加了一个对应控件变量，不对吗[/quote]你添加了cstring 关键变量，直接调用UpdateData(TRUE)就可以将填写的数据赋值到变量上， [/quote] 我用了update，但是还是报错，就是上面那个错

引用 7 楼 qq_44966400 的回复:[quote=引用 6 楼 CT8100的回复:]CComBoBox::对象你不要找错了，用的关联的cstring变量 我就是在类向导里combo那块加了一个对应控件变量，不对吗[/quote]你添加了cstring 关键变量，直接调用UpdateData(TRUE)就可以将填写的数据赋值到变量上，

引用 6 楼 CT8100的回复:CComBoBox::对象你不要找错了，用的关联的cstring变量 我就是在类向导里combo那块加了一个对应控件变量，不对吗

CComBoBox::对象你不要找错了，用的关联的cstring变量

引用 4 楼 user-3的回复:CComBoBox::GetCurSel()/GetLBText() 我也是这个写法，但是总是报错 'GetCurSel' is not a member of 'CString'

CComBoBox::GetCurSel()/GetLBText()

引用 1 楼 轻箬笠的回复:先获取第一个组合框和第二个组合框的值，然后根据值来确定公式，再获取第一个文本框的值，套入公式 我也是这个想法，但是因为是第一次做mfc，所以不清楚应该怎么获取组合框的值，能写一下代码吗


Question: 求各位大佬

最好自己想一下，不要伸手就要代码，下面的代码仅供参考。int isprime(int n);  int main() { 	printf("请输入m,n的值：\n"); 	int m, n; 	scanf("%d%d", &m, &n); 	if (m < 2 || n < 2) 	{ 		printf("输入无效！"); 		return 1; 	} 	printf("%d到%d之间的素数为：\n", m, n); 	for (int i = m; i <= n; i++) 	{ 		if (isprime(i)) 		{ 			printf("%d、", i); 		} 	} 	while (1); 	return 0; }  int isprime(int n) { 	if (n < 2) 	{ 		return 0; 	} 	for (int i = 2; i < n; i++) 	{ 		if (n%i == 0) 		{ 			return 0; 		} 	} 	return 1; }


Question: 求教：形参是自增变量的递归函数执行过程

“给定一个小点的输入，完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门！ 递归函数关注以下几个因素 ·退出条件 ·参数有哪些 ·返回值是什么 ·局部变量有哪些 ·全局变量有哪些 ·何时输出 ·会不会导致堆栈溢出  理解和讨论之前请先学会如何观察！  计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 多用小脑和手，少用大脑、眼睛和嘴，会更快地学会编程！ 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步Debug版对应汇编一行！ 单步Debug版对应汇编千行不如单步Release版对应汇编一行！ 不会单步Release版对应汇编？在你想单步Release版C/C++代码片断的前面临时加一句DebugBreak();重建所有，然后在IDE中运行。（一般人我不告诉他！）  VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时候。

a+1 *a=n%10+'0'这一句a的值不会变，但传入covert调用的值是a+1 ++a *a=n%10+'0'这一句a的值为a+1后的值，传入convert调用的值是a+1 a++ *a=n%10+'0'这一句a的值为a+1后的值，传入convert调用的值是a 引用 4 楼 淡抹兮吾生 的回复:[quote=引用 2 楼 user-2的回复:]改成void convert(char *a,int n) {     int i;     if((i=n/10)!=0) convert(a + 1,i);     *a=n%10+'0'; } a++导致后面的*a=n%10+'0';错位了 a+1, ++a, a++这三者做这个递归形参的区别是什么，我试了一下它们三个的结果都不一样[/quote]

引用 2 楼 user-2的回复:改成void convert(char *a,int n) {     int i;     if((i=n/10)!=0) convert(a + 1,i);     *a=n%10+'0'; } a++导致后面的*a=n%10+'0';错位了 a+1, ++a, a++这三者做这个递归形参的区别是什么，我试了一下它们三个的结果都不一样

突然发现图片好像不能放大，是这个程序 void convert(char *a,int n) {     int i;     if((i=n/10)!=0) convert(a++,i);     *a=n%10+'0'; } char str[10]= " "; main() {      int number;     scanf("%d",&number);     convert(str,number);     puts(str); }


Question: 新手求教一个IHTMLElement的click问题

暂时解决，放到对话框窗口过程中就不会出现异常了。

自定义的接口类型见这个帖子，代码太多，这里就不贴了，include"webpage.h"就可以了： https://bbs.pediy.com/thread-105702.htm  在WinMain中调用：  DialogBox(hInst,MAKEINTRESOURCE(IDD_QQLOGIN),0,DlgQQLoginProc);   DlgQQLoginProc定义如下，这其中的代码我只是依葫芦画瓢，可能有些是多余的，有些接口可能不需要自定义，暂时还没学到这一步哈，  BOOL WINAPI DlgQQLoginProc(HWND hDlg, UINT msg, WPARAM wp, LPARAM lp) { 	HWND hstatic; 	TCHAR szsite[]=TEXT("https://xui.ptlogin2.qq.com/cgi-bin/xlogin\?proxy_url=https%3A//qzs.qq.com/qzone/v6/portal/proxy.html&appid=549000912&s_url=https%3A%2F%2Fqzs.qzone.qq.com%2Fqzone%2Fv5%2Floginsucc.html%3Fpara%3Dizone"); 	IWebBrowser2 *webBrowser2; 	static IOleObject *browserObject; 	static IOleInPlaceFrameEx iOleInPlaceFrameEx; 	static _IOleClientSiteEx _iOleClientSiteEx; 	RECT rect; 	VARIANT myURL; 	OleInitialize(NULL); 	switch(msg) { 	case WM_INITDIALOG: 		hstatic=GetDlgItem(hDlg,IDC_WEB); 		iOleInPlaceFrameEx.frame.lpVtbl = &MyIOleInPlaceFrameTable; 		iOleInPlaceFrameEx.window=hstatic; 		_iOleClientSiteEx.client.lpVtbl = &MyIOleClientSiteTable; 		_iOleClientSiteEx.inplace.inplace.lpVtbl = &MyIOleInPlaceSiteTable; 		_iOleClientSiteEx.inplace.frame = &iOleInPlaceFrameEx; 		if(OleCreate(&CLSID_WebBrowser, &IID_IOleObject, OLERENDER_DRAW, 0, (IOleClientSite *)&_iOleClientSiteEx, &MyIStorage, (void**)&browserObject)) 			return TRUE;//失败 		browserObject->lpVtbl->SetHostNames(browserObject, TEXT("My Host 1"), 0); 		GetClientRect(hstatic, &rect);  		if (!OleSetContainedObject((struct IUnknown *)browserObject, TRUE) && 			!browserObject->lpVtbl->DoVerb(browserObject, OLEIVERB_SHOW, NULL, (IOleClientSite *)&_iOleClientSiteEx, -1, hstatic, &rect) && 			!browserObject->lpVtbl->QueryInterface(browserObject, &IID_IWebBrowser2, (void**)&webBrowser2)){ 				webBrowser2->lpVtbl->put_Left(webBrowser2, 0); 				webBrowser2->lpVtbl->put_Top(webBrowser2, 0); 				webBrowser2->lpVtbl->put_Width(webBrowser2, rect.right); 				webBrowser2->lpVtbl->put_Height(webBrowser2, rect.bottom); 				webBrowser2->lpVtbl->Release(webBrowser2);				 				VariantInit(&myURL);//打开网址 				myURL.vt = VT_BSTR; 				myURL.bstrVal = SysAllocString(szsite); 				webBrowser2->lpVtbl->Navigate2(webBrowser2, &myURL, 0, 0, 0, 0); 				VariantClear(&myURL); 				_beginthread(GetQQInfo,0,webBrowser2); 		} 		return TRUE; 	case WM_COMMAND: 		switch (LOWORD(wp)) { 		case IDC_BTN_GETWXPOS: 			return TRUE; 		} 		return FALSE; 	case WM_CLOSE: 		EndDialog(hDlg,wp); 		hDlgQQLogin=NULL; 		return TRUE; 	} 	return FALSE; }

最好把你自己封装的数据类型也发出来

我是不是应该发到VC的网络编程板块


Question: 求大神来下注释谢谢！

main() {   提示信息；   定义一个变量 num；   键盘输入 num的值（A、B、C、D中的一个）;   提示你输入的字符（ps：这个没写完）；   switch（输入的）   {     如果是A：输出85-100；     如果是B：输出70-84；     如果是C：输出60-69；     如果是D：输出<60；     其他：提示输入错误   } }

下不去手啊，不知道咋写注释

这么简单的代码还要注释？作业吗？

有人么 来帮忙下呀 新人不太会


Question: 急用

C语言电梯模拟程序


Question: 新人求助，关于获取窗口的代码问题


Question: 菜鸟请教

用重力加速度计算。字数

脑袋怎么算的或者说笔算怎么算？ 按着一样的来


Question: 二叉树的层次遍历，没有错误，为什么运行结果没有啊？？？

while(q->front!=q->rear)  因为q里面只有一个元素,所以front==rear,while条件不成立,直接就出去了