Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 想问一下这个程序有什么问题吗？

回复:
user: user-0
content: 引用 1 楼 拥抱Linux 的回复:（1）你把加密、解密的函数本体的名字写反了。 （2）变量n对应的输入函数scanf会留下一个回车符在输入缓冲区，这个回车符被下面的SS的gets函数吸收了，所以看起来像是程序跳过了SS的gets函数。 （3）反正编译器遇到gets会提示这个函数比较危险，所以俺一般都不用，而是用scanf，需要输入包含空格的字符串时也有办法。 下面是调整之后的代码，供参考：  #include <stdio.h>  void jiami(char a[100],int n); void jiemi(char a[100], int n);  int main(void) { 	char sr[100], SS[100]; 	int n, m; 	printf("你想加密的内容：\n"); 	scanf("%[^\n]",sr); 	printf("约定的密钥："); 	scanf("%d", &n); 	jiami(sr, n);  	getchar(); // 吸收上一个scanf最后留在输入缓冲区的回车符  	printf("你想解密的内容：\n"); 	scanf("%[^\n]",SS); 	printf("约定的密钥："); 	scanf("%d", &m); 	jiemi(SS, m); }  void jiemi(char a[100], int n) { 	int i = 0, j = 0; 	char b[100]; 	while (a[i] != '\0') { 		b[j] = a[i] - n; 		i++; 		j++; 	} 	b[j] = '\0'; 	printf("解密后："); 	puts(b); 	printf("\n\n"); 	//return 0; }  void jiami(char a[100], int n) { 	int i = 0, j = 0; 	char b[100]; 	while (a[i] != '\0') { 		b[j] = a[i] + n; 		i++; 		j++; 	} 	b[j] = '\0'; 	printf("加密后："); 	puts(b); 	printf("\n\n"); 	//return 0; }  运行截图：  谢谢大佬！

user: user-1
content: （1）你把加密、解密的函数本体的名字写反了。 （2）变量n对应的输入函数scanf会留下一个回车符在输入缓冲区，这个回车符被下面的SS的gets函数吸收了，所以看起来像是程序跳过了SS的gets函数。 （3）反正编译器遇到gets会提示这个函数比较危险，所以俺一般都不用，而是用scanf，需要输入包含空格的字符串时也有办法。 下面是调整之后的代码，供参考：  #include <stdio.h>  void jiami(char a[100],int n); void jiemi(char a[100], int n);  int main(void) { 	char sr[100], SS[100]; 	int n, m; 	printf("你想加密的内容：\n"); 	scanf("%[^\n]",sr); 	printf("约定的密钥："); 	scanf("%d", &n); 	jiami(sr, n);  	getchar(); // 吸收上一个scanf最后留在输入缓冲区的回车符  	printf("你想解密的内容：\n"); 	scanf("%[^\n]",SS); 	printf("约定的密钥："); 	scanf("%d", &m); 	jiemi(SS, m); }  void jiemi(char a[100], int n) { 	int i = 0, j = 0; 	char b[100]; 	while (a[i] != '\0') { 		b[j] = a[i] - n; 		i++; 		j++; 	} 	b[j] = '\0'; 	printf("解密后："); 	puts(b); 	printf("\n\n"); 	//return 0; }  void jiami(char a[100], int n) { 	int i = 0, j = 0; 	char b[100]; 	while (a[i] != '\0') { 		b[j] = a[i] + n; 		i++; 		j++; 	} 	b[j] = '\0'; 	printf("加密后："); 	puts(b); 	printf("\n\n"); 	//return 0; }  运行截图：
user-0 提问: 6.7作业 用字符数组实现删除字符串中的所有空格

回复:
user: user-1
content: #include<stdio.h> #include<string.h>  void fun(char *a) {     int i=0, j=0;     for (i = 0; i < strlen(a); i++) {         if (a[i] != ' ')             a[j++] = a[i];     }     a[j] = 0; }  int main() {     char a[] = "D x s 独   家  放  送";     fun(a);     printf("finally：\n%s",a);     getchar();     return 0; } 可以把代码再精简一些

user: user-0
content: #include<stdio.h> #include<string.h> void fun(char *a) { 	int i=0, j=0; 	for (i = 0; i < strlen(a); i++) { 		if (a[i] != ' ') { 			a[j++] = a[i];                		} 		else if(a[i]==' '){ 			continue; 		} 	} 	a[j] = '\0';                          //在数组最后面加上字符串结束符'\0' } int main() { 	char a[] = "D x s 独   家  放  送"; 	fun(a); 	printf("finally：\n%s",a); 	getchar(); 	return 0; }

user: user-2
content: #include <stdio.h> #include <string.h>  char* DeleteBlank(char* src) { 	int i = 0, len = 0; 	do { 		if (src[i] != ' ') 			src[len++] = src[i]; 	} while (src[i++] != '\0'); 	return src; } int main(){ 	char s[128] = { 0 }; 	scanf("%[^\n]", s); 	printf("%s\n", DeleteBlank(s)); 	return 0; }
user-0 提问: 如何提取字符串中IP并换成整数或十六进制

回复:
user: user-1
content: TCHAR String[] = TEXT("+QIACT: 1,1,1,\"10.32.183.184\""); 	IN_ADDR IpAddr = { 0 }; 	_stscanf_s(String, TEXT("%*[^\"]\"%d.%d.%d.%d"), &IpAddr.S_un.S_un_b.s_b1, &IpAddr.S_un.S_un_b.s_b2, &IpAddr.S_un.S_un_b.s_b3, &IpAddr.S_un.S_un_b.s_b4);

user: user-2
content: 主机IP地址可以用标准的点型字符串来表示，如“192.168.1.1”，也可以用一个四个字节的整数或IN_ADDR结构来表示。可以使用inet_addr()函数和inet_ntoa()函数来实现这两种格式的转换，也可以使用新版本的inet_ntop()函数和inet_pton()函数来进行转换。 请参考《VS2015中IP地址转换函数》  希望能够帮到你

user: user-3
content: 正则没必要吧！双引号及小数点足够了

user: user-4
content: 使用正则表达式进行匹配
user-0 提问: 向数组指针输入不确定长度的字符串

回复:
user: user-1
content: 我觉得应该+1，strlen不考虑\0，这样的话使用strcpy（不安全）都直接访问到指针外的地址了

user: user-0
content: 这个是运行结果：

user: user-2
content: 对于字符串的存储需要注意后面需要手动在末尾加一个'\0'表示结束，所以长度加1

user: user-3
content: %s得遇到'\0'才能停，那未被分配的内存内是'\0'

user: user-3
content: 长度应该+1，并在最后赋值'\0'，你这个printf %s能正常输出?

user: user-0

user: user-0
content: 引用 2 楼 Italink 的回复:我觉得应该+1，strlen不考虑\0，这样的话使用strcpy（不安全）都直接访问到指针外的地址了  是的，我也找到了相关的资料：  感谢你的及时回复！
user-0 提问: 大佬看看哪儿错了

回复:
user: user-1
content: 只要能顺利编译成exe就是没有错误的，如果说没达到你要的效果，那只能说设计有问题

user: user-2
content: 你这个跟去看医生时直接跟医生说‘我哪儿有问题’一样啊？
user-0 提问: 优先级与结合性的困惑

回复:
user: user-1
content: 楼上是正解。。

user: user-2
content: 优先级和结合性 不影响求值顺序 优先级高 不等于先求值 右结合 不等于右边先求值

user: user-3
content: 原 C/C++逻辑运算符 | | 和 && 的优先级误区——优先级决定运算顺序吗？ https://blog.csdn.net/qq_40946921/article/details/88323975

user: user-4
content: ～ 语句或者表达式是有执行顺序的，凡事都要一步一步地来，哪能同一时刻把几个表达式都给执行了呢？ 转一篇文章给你，自己看看吧，看不懂也没关系，相信编译器的结果比相信自己的猜测更有合理性。 【C语言】优先级，结合方向和执行顺序 https://www.jianshu.com/p/47433961c3f0
user-0 提问: 求大神指导

回复:
user: user-1
content: （1）变量有一个属性叫【生命周期】，也就是变量 从 “因为被定义而产生” 到 “因为被释放而消失” 的生命期。 （2）你的两个代码里的变量 j 的生命周期是不一样的。 （2-1）上面的代码里变量 j 的生命周期是 整个 main 函数的范围，也就是说 main 函数没有结束的话，变量 j 就存在。 （2-2）下面的代码里的变量 j 的生命周期是 循环体 while(i <= 9){} 的范围之内，也就是说 只要程序运行出了 循环体 while(i <= 9){} 的右花括号， 变量 j 就从内存中被释放而消失了，所以 每一次新的 while(i <= 9){} 的循环，变量 j 都是一个全新的变量了，它的名字还是 j ，但是已经不是前一次循环剩下的 j 了。 （3）更深入和详细的内容，你可以上网搜索C语言的变量的名字空间、生命周期 / 生存期 等进行了解。

user: user-2
content: 不懂说的啥
user-0 提问: c语言中指针函数程序

回复:
user: user-1
content: 猜数字的A和B的含义，你可能理解反了A前面的数字指的是有几个数你猜对了，而且位置也对了，B前面的数字指的是有几个数你猜对了，但是位置是个错的。 #include<stdio.h> #include<time.h> #include<stdlib.h> int main() { 	int stime, a, z, t, i, c, m, g, s, k, l[3], j; 	time_t ltime = time(NULL); 	stime = (unsigned int)ltime / 2; 	srand(stime); 	if ((rand() % 10000) >= 1000 && (rand() % 10000) <= 9999) 		z = rand() % 1000; 	printf("机器入三位数***\n"); 	printf("\n"); 	for (c = 1; ; c++) 	{ 		printf("请输入你猜的三位数:"); 		scanf("%d", &g); 		a = z; 		j = 0; 		k = 0; 		l[0] = l[1] = l[2] = 0; 		for (i = 1; i<4; i++) 		{ 			s = g; 			m = 1; 			for (t = 1; t<4; t++) 			{ 				if (a % 10 == s % 10) 				{ 					if (m && t != l[0] && t != l[1] && t != l[2]) 					{ 						j++; 						m = 0; 						l[j - 1] = t; 					} 					if (i == t) 					{ 						k++; 					} 				} 				s /= 10; 			} 			a /= 10; 		}  		printf("你猜的结果是"); 		printf("%dA%dB\n", k, j-k); 		if (k == 3) 		{ 			printf("***你赢了***\n"); 			printf("\n~~******~~\n"); 			break; 		} 	} 	printf("你总共猜了%d次.\n", c); 	system("pause"); 	return 0; }

user: user-2
content: 你可真是个小天才，猜三位数，却生成一个四位随机数，猜得到有鬼了

user: user-2
content: 指针还是是指函数指针？没看出题目和函数指针的关系

user: user-0
content: 引用 1 楼 user-2的回复:指针还是是指函数指针？没看出题目和函数指针的关系 可以帮我改正吗，谢谢！了

user: user-0
content: 引用 2 楼 weixin_45185599的回复:[quote=引用 1 楼 user-2的回复:]指针还是是指函数指针？没看出题目和函数指针的关系 include<stdio.h> #include<time.h> #include<stdlib.h> int main(){ int stime,a,z,t,i,c,m,g,s,k,l[3]; ltime=time(NULL); stime=(unsigned int)ltime/2; srand(stime); if( (rand()%10000) >= 1000&&~d (rand()%10000) <= 9999 ) z=rand()%10000; printf("机器入三位数***\n"); printf("\n"); for(c=1; ; C++) { printf("请输入你猜的三位数:"); scanf("%d", &g); a=z; j=0; k=0; l[0]=[1]=l[2]=0; for(i=1; i<4; i++) { S=g; m=1; for(t=1; t<4; t++) { if(a%10 == s%10) { if(m && t!=l[0] && t!=l[1] && t!=l[2]) { j++; m=0; l[j-1]=t; } if(i==t) k++; } S/=10; } a/=10; }  printf("你猜的结果是");  printf("%dA%dB\n", j, k); if(k==3) {  printf("***你赢了***\n");  printf("\n~~******~~\n"); break; } } printf("你总共猜了%d次.\n",c); return 0; } 可[/quote] 可以帮帮我改正，谢谢了！

user: user-0
content: 引用 1 楼 user-2的回复:指针还是是指函数指针？没看出题目和函数指针的关系 include<stdio.h> #include<time.h> #include<stdlib.h> int main(){ int stime,a,z,t,i,c,m,g,s,k,l[3]; ltime=time(NULL); stime=(unsigned int)ltime/2; srand(stime); if( (rand()%10000) >= 1000&&~d (rand()%10000) <= 9999 ) z=rand()%10000; printf("机器入三位数***\n"); printf("\n"); for(c=1; ; C++) { printf("请输入你猜的三位数:"); scanf("%d", &g); a=z; j=0; k=0; l[0]=[1]=l[2]=0; for(i=1; i<4; i++) { S=g; m=1; for(t=1; t<4; t++) { if(a%10 == s%10) { if(m && t!=l[0] && t!=l[1] && t!=l[2]) { j++; m=0; l[j-1]=t; } if(i==t) k++; } S/=10; } a/=10; }  printf("你猜的结果是");  printf("%dA%dB\n", j, k); if(k==3) {  printf("***你赢了***\n");  printf("\n~~******~~\n"); break; } } printf("你总共猜了%d次.\n",c); return 0; } 可
user-0 提问: C语言

回复:
user: user-1
content: 应该是这样，思维导图还不熟，上面的错误示意图不好意思啊！

user: user-1
content: 引用 6 楼 拥抱Linux 的回复: 不对，上面这幅图没画对，不好意思！ 应该是case 1，case 2，case 3都不进入的时候才去 default标签，刚刚画着急了。

user: user-1

user: user-2
content: 为1就执行1后面的语句呀

user: user-3

user: user-0
content: 引用 2 楼 袁君元的回复:说明k为2和3都执行n+=k这条语句 那case为1呢？怎么执行

user: user-0
content: 感谢大佬的讲解，应该是答案有问题

user: user-1
content: 引用 9 楼 小宝贝の☞任性☜ 的回复:但是这个题最后答案的值是6 运行出来是7。

user: user-0
content: 引用 8 楼 拥抱Linux的回复:应该是这样，思维导图还不熟，上面的错误示意图不好意思啊！  但是这个题最后答案的值是6

user: user-2
content: 说明k为2和3都执行n+=k这条语句

user: user-4
content: 这说明：case 2和case 3执行相同的代码块。
user-0 提问: 求c语言大佬救救我

回复:
user: user-1
content: 我觉得求值的可以改成这种统一的接口  int month = 0；  while（num） {     month += num%10;     num  = num/10; }    还有在打印和判断的时候应该取month - 1的值  引用 2 楼 我209426 的回复:#include <stdio.h> const char *Month[]={"January", "February", "March","April", "May", "June", "July", "August", "September", "October", "November","December"};  void CountNumber() { 	int num,first,second,thrid, month; 	scanf("请输入一个3位数: %d \r\n", num); 	while((num < 99)||(num >999)) 	{ 		scanf("请重新输入: %d \r\n", num); 	} 	first = num/100; 	second = (num-first*100)/10; 	thrid = num - first*100 -second*10;  	month = first + second + thrid;  	if (month >12) 	{ 		printf("*** \r\n"); 	} 	else 	{ 		printf("%s \r\n", Month[month]); 	} }

user: user-2
content: 二楼高人！！我的构思比你的逊色，都不好意思贴出来了

user: user-3
content: #include <stdio.h> const char *Month[]={"January", "February", "March","April", "May", "June", "July", "August", "September", "October", "November","December"};  void CountNumber() { 	int num,first,second,thrid, month; 	scanf("请输入一个3位数: %d \r\n", num); 	while((num < 99)||(num >999)) 	{ 		scanf("请重新输入: %d \r\n", num); 	} 	first = num/100; 	second = (num-first*100)/10; 	thrid = num - first*100 -second*10;  	month = first + second + thrid;  	if (month >12) 	{ 		printf("*** \r\n"); 	} 	else 	{ 		printf("%s \r\n", Month[month]); 	} }

user: user-0
content: 引用 楼主 雾里窥探爱意的回复:第二题 跪求各位大佬帮帮忙哇 输入一个三位数，计算该数各位上的数字之和，如果在1到12内，则输出与和数对应的月份的英文名称，否则输出***
user-0 提问: 搞不明白 求给解决问题

回复:
user: user-1
content: #include <stdio.h> struct date {     int year;     int month;     int day; }  ; int main(void) {     struct  date d;     scanf("%d%d%d", &d.year, &d.month, &d.day);     printf("%d,%d,%d", d.year, d.month, d.day); }
user-0 提问: 求大佬给位运算的代码，刚学

回复:
user: user-1
content: 引用 2 楼 user-3 的回复:[quote=引用 1 楼 我209426的回复:]unsigned short x; x=x&0x0F; printf("%02x", x); 不对呀，输入eea6答案是06 与题意不和呀[/quote] 感觉可能是抄我的另一个帖子的回复，可是我那回复确实是错了。3、4楼的才是正确的

user: user-2
content: 引用 2 楼 user-3 的回复:[quote=引用 1 楼 我209426的回复:]unsigned short x; x=x&0x0F; printf("%02x", x); 不对呀，输入eea6答案是06 与题意不和呀[/quote]  x=x&0xFF

user: user-2
content: x=x&0xFF

user: user-3
content: 引用 1 楼 我209426的回复:unsigned short x; x=x&0x0F; printf("%02x", x); 不对呀，输入eea6答案是06 与题意不和呀

user: user-2
content: unsigned short x; x=x&0x0F; printf("%02x", x);
user-0 提问: 新手，还不太明白，求帮助

回复:
user: user-1
content: #include <stdio.h> struct student {     char name[20];     int  score; }; int main(void) {     struct student stu[10],temp;     int i,j;     for(i=0; i<10; i++)         scanf("%s%d",stu[i].name,&stu[i].score);     for(i=0; i<9; i++)         for(j=0; j<9-i; j++)             if(stu[j].score<stu[j+1].score)             {                 temp=stu[j];                 stu[j]=stu[j+1];                 stu[j+1]=temp;             }     for(i=0; i<10; i++)         printf("%s %d\n",stu[i].name,stu[i].score);     return 0; }
user-0 提问: 关于C语言scanf输入字符串

回复:
user: user-0
content: 引用 1 楼 自信男孩的回复:如果输入5个0，并且数组的长度定为5，那么就会导致越界了，%s输出时是遇到'\0'停止。 数组长度是5，输入5个，就没有'\0'的位置了。 所以scanf_s("%s", x[i].xuehao, 5);是scanf的安全版本 那为什么会把空格后面的都读进去呢，按理说遇到空格不就结束了

user: user-1
content: 如果输入5个0，并且数组的长度定为5，那么就会导致越界了，%s输出时是遇到'\0'停止。 数组长度是5，输入5个，就没有'\0'的位置了。 所以scanf_s("%s", x[i].xuehao, 5);是scanf的安全版本
user-0 提问: 已知int　a=5,b=5;　则表达式：　++a>b?a:b-->++a?++b:a的值为6

回复:
user: user-1
content: 关于C,C++表达式求值顺序 http://blog.csdn.net/fefe82/article/details/37833767，http://bbs.csdn.net/topics/370153775

user: user-2
content: 引用 7 楼 令空 的回复:结合性不应该从右到左吗，为什么先++a>b，而不是先后边结合性和求值顺序没有关系  ?: 要求从左向右求值

user: user-0
content: 结合性不应该从右到左吗，为什么先++a>b，而不是先后边

user: user-3
content: 如果你把最前面的++a > b改成++a < b的话就是7了

user: user-3
content: 原来是这个啊,建议楼主有写空格的习惯  ++a > b ? a : b-- > ++a ? ++b : a   这样的话由于？：是从右往左结合的所以应该变成这样   ++a > b ? a :      b-- > ++a ? ++b : a  ++a > b取a的值，后面结合的就不取了，所以是6

user: user-4
content: ++a得到是6,6>5为真，因此返回a，返回6

user: user-2
content: 引用 楼主 令空 的回复:已知int　a=5,b=5;　则表达式：　++a>b?a:b-->++a?++b:a的值为6。为什么，怎么算，我得7错哪。我自己编看，确实得6，但是怎么算++a>b 求值结果是1 直接得到最终结果 a :后面全部不用执行

user: user-2
content: 引用 1 楼 devilbuqi 的回复:我想知道-->是啥意思?      ++a>b?a:b; //     ++a?++b:a;//++a成功取++b的值  b-->++a ( b-- ) > ( ++a )

user: user-3
content: 我想知道-->是啥意思?      ++a>b?a:b; //     ++a?++b:a;//++a成功取++b的值
user-0 提问: 位运算，求大佬给出代码，不太理解

回复:
user: user-1
content: #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; } 供参考～你发了多个帖子，注意帖子的标题以及需求，不要搞混了。

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

user: user-2
content: 除以2取余输出就行

user: user-2
content: 取余输出就行
user-0 提问: 那位小哥哥，帮帮忙

回复:
user: user-1
content: 这问题点数怎么得

user: user-1
content: #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;  }
user-0 提问: 简单c语言问题

回复:
user: user-1
content: 函数参数只传值。

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

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

user: user-4
content: ～ 因为此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; }  如有帮助，烦请及时结贴、给分！ ：-） ～

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

user: user-6
content: 你传递的参数只是变量的副本，并不是变量它本身~你把fun的第三个参数修改成引用类型，如void fun(int a, int b, int& c)

user: user-7
content: 可以写成返回值为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; }

user: user-8
content: 因为你这个传值方式，是不会改变c的值，可以看看这篇文章https://blog.csdn.net/weixin_43956598/article/details/90055036
user-0 提问: 求  用C编写一函数，实现输入一公民18位身份证，输出其年龄及性别

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

user: user-2
content: https://baike.baidu.com/item/居民身份证号码/3400358?fr=aladdin
user-0 提问: 关于自制操作系统

回复:
user: user-1
content: 楼主说的可能是极简内核吧？多线程支持吗？

user: user-2
content: 网络操作 tcp /ip 驱动协议。。你自己实现

user: user-3
content: 精神鼓励一下

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

user: user-5
content: 楼主还是把代码发到github，然后发给链接上来先

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

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

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

user: user-6
content: 贸易战和有没有自主操作系统一点关系都没有，主要是一个政治问题，中国20多年前都是UNIX版权方之一了
user-0 提问: C语言图书管理系统

回复:
user: user-1
content: http://j.gs/Cq5t 看看这篇文章，自己照着写就ok拉

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

user: user-2
content: 基础数据结构，有什么问题t
user-0 提问: C primer Plus 指向字符常量的指针初始化

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

user: user-0
content: 引用 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'的地址，并且不能通过指针修改字符串内容  欢迎大家指正

user: user-2
content: const char *m3="\Enough ..... name?";  这句分成两部分：程序编译之后"\Enough ..... name?"; 这个字符串在你的程序中会存在某个地方，运行时会加载到内存，加载到内存必然会有个内存指针指向它，把这个地址给char *m3肯定是没问题的; 编译之前编译器会分析你程序用到的常量，假如放在exe的数据段他么这向字符串编译器会解释为一个地址，char *m3是一个DWORD值，这个值就是="\Enough ..... name?"; 的地址 1.先分配地址给常量字符串="\Enough ..... name?";  2.让*m3=第一步分配的地址
user-0 提问: 自定义函数，函数名是_max，找出上表中的任意两名学生，找出此两名学生中成绩的最大值。最后把结果在main函数中输出。

回复:
user: user-1
content: #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; } 供参考～
user-0 提问: c程序不能编译，一编译程序就闪退了，其他程序不会这样，感觉代码也找不出错误来了

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

user: user-2
content: #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是做什么的，没有修改，但是已经指出问题了。

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

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

user: user-5
content: 随便改了以下，没改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"); }
user-0 提问: 位运算代码过不掉

回复:
user: user-1
content: dc赋值2次 db没赋值

user: user-2
content: errno_t _itoa_s(int value, char *buffer, size_t sizeInCharacters, int radix); 这是函数原型。看一下你的实参个数是不是不对。
user-0 提问: 有手里有C两千行现成代码的吗?急求

回复:
user: user-1
content: 找老赵，他长期VC6

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

user: user-2
content: 两千行的程序能卖一千元
user-0 提问: #求助#用C语言设计学生信息管理系统

回复:
user: user-1
content: 总监，输入输出好友度有什么具体要求，还请明示。 您太客气了，小任务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就可以了) 还有特殊要求，你就说一下，我马上改。

user: user-2
content: 看链接https://bbs.csdn.net/topics/392671156   有问题自己先搜一搜，别跟大爷似的
user-0 提问: 新手自学求问

回复:
user: user-1
content: 看到那里不重要，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 ; }

user: user-2
content: 非必要用goto的情况下少用goto吧

user: user-0
content: 引用 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循环,想不到怎么把这个输出空格语句插进去，要么就赋值那出错了

user: user-1

user: user-1
content: 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; }   用这个试试

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

user: user-0
content: 引用 4 楼 绝版☞少年 的回复:非必要用goto的情况下少用goto吧  学习流程到就这，也没看到for,while，练习题出来了这个题目...
user-0 提问: 这个是怎么做出来的，有会的大佬吗

回复:
user: user-1
content: 伸手党不说，拍照都拍不清楚

user: user-2
content: /************************************************************************* 	> 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)); } 拿去拿去，本来还想给你截个图打点码的发现没必要

user: user-3
content: 传说中的马赛克

user: user-4
content: 看链接https://bbs.csdn.net/topics/392671156   有问题自己先搜一搜，别跟大爷似的
user-0 提问: 新手求助

回复:
user: user-1
content: 大佬又来出题了

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

user: user-3
content: 百度搜下rand()一下子就出来了
user-0 提问: c语言赋值

回复:
user: user-1
content: ～ （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 。 如有帮助，烦请及时 结贴、给分！ ：-） ～
user-0 提问: 求解c语言编程题

回复:
user: user-1
content: 楼上的if 语句里面赋值反掉了

user: user-1
content: #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; }//没有用函数 你稍微改一下

user: user-0
content: 谢谢各位的指导呀 我是c语言的初学者

user: user-2
content: #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; }  我是这样想的，不知道对不对，纯手打，其实选择法和冒泡排序原理是差不多的，复杂度也是相同的！

user: user-3
content: 可以先学习一下排序算法 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

user: user-4
content: 建议搜一下冒泡或者选择排序，都是一些基本的排序方法
user-0 提问: 编写一个函数实现数组排序，再编写一个函数实现数组查找，然后在主程序中输入一个无序数组，先调用排序函数，再调用查找函数查找指定的值。

回复:
user: user-1
content: 直接贴代码，比贴图片更好的帮你解决问题

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

user: user-0
content: #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;  }
user-0 提问: C语言c2059错误，求大神

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

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

user: user-3
content: 最后一个括号后面加分号

user: user-4
content: 最后没有加分号

user: user-5
content: 分号应该放在大括号之后。

user: user-6
content: 最后一个 } 后添加 ；

user: user-0
content: 最后一个括号出现错误
user-0 提问: 萌新求助啊！！

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

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

user: user-0
content: 能问一下，为什么加上_s就不会出错了呢？是这个c和c++不一样吗？？  引用 2 楼 user-1 的回复:用scanf_s代替scanf

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

user: user-1
content: 用scanf_s代替scanf
user-0 提问: 下面这段程序c语言转换为java

回复:
user: user-0
content: 这是一段ntripcaster程序（通信系统经常采用的，通信协议使用ntrip，类似于http），源程序采用c写的，实在看不懂，哪位大神帮翻译成java语言
user-0 提问: 咋回事？

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

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

user: user-3
content: if不再执行，但是会执行label里面的

user: user-4
content: 简单来说，goto labe;只是告诉程序代码会跳转到label标签的代码中，而 label:printf("%d",a);就是有label标签的printf("%d",a);所以从代码本质上来说label:printf("%d",a);等于printf("%d",a);，而a=0，虽然没有执行if语句，但是会执行下面的label:printf("%d",a);printf("Yes");因为label:printf("%d",a);等同于printf("%d",a);，所以先调用printf("%d",a);再调用printf("Yes");，所以答案为C

user: user-5
content: 楼上是正确答案

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

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

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

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

user: user-3
content: 宏是展开，x=y+1*y+1=3

user: user-4
content: 经过观察发现，楼主要么是散分的脚本，要么是闲得蛋疼故意说错误答案来钓鱼的，要么就是来练习发帖打字的，总而言之绝对不是学C语言的。 问了那么多烂题目了，从来没有自己在编译器里敲过一个字母的代码，还天天为什么为什么，好像觉得自己是编译器，题目答案都是错的似的！ 今后再遇到重复的情况直接举报了！

user: user-2
content: 这可不是函数调用！

user: user-5
content: square(y+1)不是(y+1)*(y+1)  square(y+1)是y+1*y+1  不要自己随便加()

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

user: user-6
content: 理解和讨论之前请先学会如何观察！  VC编译选项加/EP /P（项目、属性、配置属性、C/C++、预处理器、预处理到文件：是，预处理取消显示行号：是），重新编译，查看宏展开后对应的.i文件。gcc加-E http://bbs.csdn.net/topics/391003898
user-0 提问: c语言将已排序的学生成绩文件进行插入处理。插入一个学生的3门课程成绩，程序先计算新插入学生的平均成绩，然后将它按成绩高低顺序插入，插入后建立一个新文件。 

回复:
user: user-0
content: aaaaas
user-0 提问: 为什么只有n=1的时候才输出其他都不行？

回复:
user: user-1
content: #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"); }  你参考～

user: user-2
content: 我试着改了以下，不知道是不是你期望的结果。 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调试的结果

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

user: user-3
content: 在main函数里的输入的for循环里p指针每次都重新指向了另一个地址了
user-0 提问: 求助！！求助啊！！

回复:
user: user-1
content: 你是不是用了预编译但是把预编译的头文件删了

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

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

user: user-2
content: 无图无真相，建议贴出软件问题的图片或代码

user: user-0
content: 试了网上的所有方法还是没有解决问题。。
user-0 提问: 请教C语言呐

回复:
user: user-1
content: ++SQR(k+1)   展开  ++k+1*k+1   =4+1*k+1=4+4+1=9

user: user-2

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

user: user-3
content: #define 只是简单的文本替换

user: user-4
content: 宏定义的时候带上（）是个好习惯

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

user: user-6
content: ++SQR(k+1)   展开是  ++k+1*k+1   别加括号啊

user: user-7
content: VC编译选项加/EP /P（项目、属性、配置属性、C/C++、预处理器、预处理到文件：是，预处理取消显示行号：是），重新编译，查看宏展开后对应的.i文件。gcc加-E http://bbs.csdn.net/topics/391003898
user-0 提问: 请求解决一下有关链表的问题

回复:
user: user-0
content: 引用 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里面的输入学生信息，这是为啥

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

user: user-2
content: 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;  }
user-0 提问: 哪个大佬教一下

回复:
user: user-0
content: 第四个问题怎么把收入和支出的钱分开比较啊

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

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

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

user: user-0
content: 还是要用C语言做，有没有大佬给个大概啊

user: user-1
content: C语言肯定是需要的，看你的题目要求貌似不能用SQL  题目要求是将账单转换成纯文本格式，也就是.txt文件，你现在要使用文件/标准IO对txt文件进行读写操作  **文件读写操作 open()函数打开一个文件； read()函数读文件；  根据读到的内容进行搜索  大概过程就是这样
user-0 提问: 哪个大神有空教教我呗，用C语言基础处理

回复:
user: user-1
content: 我用#CSDN#这个app发现了有技术含量的博客，小伙伴们求同去《C语言实现大小写字母转换》, 一起来围观吧 https://blog.csdn.net/aiwangtingyun/article/details/79564419
user-0 提问: n个元素的集合有多少种划分方法

回复:
user: user-1
content: 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); }
user-0 提问: 万年历的部分程序不是太懂，有没有大佬给提点一下！

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

user: user-2
content: 有空读些高质量的代码吧
user-0 提问: 为什么可以依次的的输出，不是定义了行指针变量了吗

回复:
user: user-1
content: 引用 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内存中的数字  不知道这样说你能明白不，自己纸上画个图应该不难理解

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

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

user: user-2
content: 引用 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] 的话，恐怕会让他忽视这样的下标已经越界了哟！

user: user-3
content: 数组的本质是指针偏移，从这点上说a[3][3]可以等价于a[9]，因此是可以用一维数组的方式访问二维数组 a[0][0] = a[0]   a[1][1] = a[4] a[2][2] = a[8]
user-0 提问: 如何读取文件中数据，跪求大佬帮忙

回复:
user: user-1
content: open（）函数打开一个文件 read（）函数读文件内容

user: user-2
content: 仅供参考：//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
user-0 提问: 在vc++2010中没有graphics.h头文件怎么办？有什么插件或办法解决

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

user: user-2
content: http://www.easyx.cn
user-0 提问: 解释一下第二个大的循环体转置的原理是什么

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

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

user: user-0
content: 我用vs2010版的
user-0 提问: C语言问题

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

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

user: user-2
content: char不能赋值字符串，要改成char数组
user-0 提问: 为什么没有输出呢？

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

user: user-2
content: https://code.y444.cn/gcc.html?share_id=bae40feceb3e3695fd291be6c16456ff

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

user: user-3
content: 我认为*str的值是1，然后printf("%s",*str);就变成printf("%s",1);打印内存地址为1开始的内存，肯定会报错，非法内存访问。
user-0 提问:  菜鸟请教，为什么在控制台里一进入副菜单就瞬间回到了主菜单？（比如在没有数据的情况下点查询数据就只会在未有数据的菜单以下就回到主菜单了）

回复:
user: user-1
content: 在每个最后不带\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字符或回车换行，读取下一个字符。
user-0 提问: 新手提问mfc

回复:
user: user-1
content: CString strChoosed; m_mediaCombox.GetLBText(m_mediaCombox.GetCurSel(),strChoosed); https://blog.csdn.net/leighton_stars/article/details/10339761

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

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

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

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

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

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

user: user-3
content: CComBoBox::GetCurSel()/GetLBText()

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

user: user-1
content: 先获取第一个组合框和第二个组合框的值，然后根据值来确定公式，再获取第一个文本框的值，套入公式
user-0 提问: 求各位大佬

回复:
user: user-1
content: 最好自己想一下，不要伸手就要代码，下面的代码仅供参考。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; }
user-0 提问: 求教：形参是自增变量的递归函数执行过程

回复:
user: user-1
content: “给定一个小点的输入，完整单步跟踪(同时按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执行停在该断点处的时候。

user: user-2
content: 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]

user: user-0
content: 引用 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++这三者做这个递归形参的区别是什么，我试了一下它们三个的结果都不一样

user: user-0
content: a+1, ++a, a++这三者做这个递归形参的区别是什么，我试了一下它们三个的结果都不一样

user: user-2
content: 改成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';错位了

user: user-0
content: 突然发现图片好像不能放大，是这个程序 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); }
user-0 提问: 新手求教一个IHTMLElement的click问题

回复:
user: user-0
content: 暂时解决，放到对话框窗口过程中就不会出现异常了。

user: user-0
content: 自定义的接口类型见这个帖子，代码太多，这里就不贴了，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; }

user: user-1
content: 最好把你自己封装的数据类型也发出来

user: user-0
content: 我是不是应该发到VC的网络编程板块
user-0 提问: 求大神来下注释谢谢！

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

user: user-2
content: 下不去手啊，不知道咋写注释

user: user-3
content: 这么简单的代码还要注释？作业吗？

user: user-0
content: 有人么 来帮忙下呀 新人不太会