Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 浮点数问题

回复:
user: user-1
content: 浮点数格式 http://bbs.csdn.net/topics/390676437

user: user-2
content: 引用 10 楼 user-3 的回复:[quote=引用 8 楼 lqbk1 的回复:]   如果一个浮点数是0，那他的二进制，十六进制也全是0才对吧。。。[/quote]  不好意思，刚刚16进制转2进制脑补的时候，头脑不清醒了  int main() { 	float f; 	unsigned char *p=(unsigned char *)&f; 	p[0] = 0x40; 	p[1] = 0xA0; 	p[2] = 0x00; 	p[3] = 0x00; 	printf("float value:%e, size:%d",f, sizeof(float)); 	return 0; } 以上代码看得清楚点....  二进制数据，关于那个值，二进制数据从高位到低位应该是 0000 0000 0000 0000 1010 0000 0100 0000 符号位是0，正的 指数部分是0，说明是非规约形式的浮点数，对应指数部分是2的-126次方 因此结果是  (pow(2,-8) + pow(2,-10) + pow(2,-17)) * pow(2,-126)   最终结果应该是5.74868682004613e-41

user: user-3
content: 引用 8 楼 lqbk1 的回复:  如果一个浮点数是0，那他的二进制，十六进制也全是0才对吧。。。

user: user-3
content: #include<stdio.h> int main() { long int n;  printf("输入8位16进制数："); scanf("%x",&n); printf("%f\n",*((float*)&n)); return 0;  }

user: user-2

user: user-3
content: 引用 5 楼 lqbk1 的回复:[quote=引用 4 楼 user-3 的回复:] [quote=引用 3 楼 lqbk1 的回复:] [quote=引用 2 楼 user-3 的回复:] 对应的浮点数是多少？ 后23bit都是0，尾数是0 最后还是被解释成0的[/quote] 这个 是这么确定后两位就是表示浮点数的后两位的呀[/quote]  看https://zh.wikipedia.org/wiki/IEEE_754[/quote] 其实我的理解是：第一个bit是正负，2-9bit是指数位，剩下的23bit是数值

user: user-3
content: 引用 5 楼 lqbk1 的回复:[quote=引用 4 楼 user-3 的回复:] [quote=引用 3 楼 lqbk1 的回复:] [quote=引用 2 楼 user-3 的回复:] 对应的浮点数是多少？ 后23bit都是0，尾数是0 最后还是被解释成0的[/quote] 这个 是这么确定后两位就是表示浮点数的后两位的呀[/quote]  看https://zh.wikipedia.org/wiki/IEEE_754[/quote] 网络不给力访问不了呀，大概讲解下可好？

user: user-2
content: 引用 4 楼 user-3 的回复:[quote=引用 3 楼 lqbk1 的回复:] [quote=引用 2 楼 user-3 的回复:] 对应的浮点数是多少？ 后23bit都是0，尾数是0 最后还是被解释成0的[/quote] 这个 是这么确定后两位就是表示浮点数的后两位的呀[/quote]  看https://zh.wikipedia.org/wiki/IEEE_754

user: user-2
content: 引用 2 楼 user-3 的回复:对应的浮点数是多少？ 后23bit都是0，尾数是0 最后还是被解释成0的

user: user-3
content: 引用 3 楼 lqbk1 的回复:[quote=引用 2 楼 user-3 的回复:] 对应的浮点数是多少？ 后23bit都是0，尾数是0 最后还是被解释成0的[/quote] 这个 是这么确定后两位就是表示浮点数的后两位的呀

user: user-2
content: int main() { 	float f; 	unsigned char *p=(unsigned char *)&f; 	p[0] = 0x40; 	p[1] = 0xa0; 	p[2] = 0x00; 	p[3] = 0x00; 	printf("float value:%f",f); 	return 0; }  想知道详情就请看https://en.wikipedia.org/wiki/IEEE_floating_point

user: user-3
content: 对应的浮点数是多少？
user-0 提问: 489 - Hangman Judge，官网debug测试数据比较无异，ac不了显示wa。

回复:
user: user-0
content: 思路很简单，把测试词组与猜测词组里的重复字母去掉，再一一比较，代码以下 #include <stdio.h> #include <string.h> char s[1000]; char s1[1100]; int main() { 	int n; 	int len, len1; 	int wrong, correct; 	int i, j, k; 	int flag = 0; 	while(scanf("%d", &n), n != -1) 	{ 		wrong = correct = 0; 		getchar(); 		 		fgets(s, sizeof(s), stdin); 		len = strlen(s); 		s[len-1] = s[len]; 		len --; 		for(i = 0; i < len - 1; i ++) 			for(j = i + 1; j < len; j ++) 				if(s[i] == s[j]) 					for(k = j; k <len; k ++) 						s[k] = s[k+1]; 		len = strlen(s); 		 		fgets(s1, sizeof(s1), stdin); 		len1 = strlen(s1); 		s1[len1 -1] = s1[len1]; 		len1 --; 		for(i = 0; i < len1 - 1; i ++) 			for(j = i + 1; j < len1; j ++) 				if(s1[i] == s1[j]) 					for(k = j; k <len1; k ++) 						s1[k] = s1[k+1];		 		len1 = strlen(s1);		 	 		for(i = 0; i < len1; i ++) 		{ 			flag = 0; 			for(j = 0; j < len; j ++)			 				if(s[j] == s1[i]) 				{ 					flag = 1; correct ++; break; 				} 			if(flag == 0) 				wrong ++; 			if(wrong >= 7 || correct >= len) 				break; 		} 		 		if(wrong >= 7) 			printf("Round %d\nYou lose.", n); 		else if(correct >= len) 			printf("Round %d\nYou win.", n); 		else 			printf("Round %d\nYou chickened out.", n);	 		printf("\n"); 	}	 	return 0; }  前两个大循环是分别去除两行字符串中重复的字母，最后一个是比较的
user-0 提问: 这个小代码总是运行不起来求大神

回复:
user: user-1
content: %s打印%c的字符，应该是越界了；char类型的数据输出应该是使用%c或%d输出

user: user-2
content: printf("%c",k);

user: user-3
content: printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方，而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。

user: user-4
content: %s是打印字符串的，%c的是单个字符的

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

user: user-6
content: 第一条打印语句的格式控制%s改为%c
user-0 提问: 新人提问：关于C中结构体内变量的输出

回复:
user: user-1
content: 我也是略懂，也知道弄个函数

user: user-2
content: 结构体的水很深，坑很大！ 仅供参考：#include <stdio.h> #define field_offset(s,f) (int)(&(((struct s *)(0))->f)) struct AD  { int a; char b[13]; double c;}; #pragma pack(push) #pragma pack(1) struct A1  { int a; char b[13]; double c;}; #pragma pack(2) struct A2  { int a; char b[13]; double c;}; #pragma pack(4) struct A4  { int a; char b[13]; double c;}; #pragma pack(8) struct A8  { int a; char b[13]; double c;}; #pragma pack(16) struct A16 { int a; char b[13]; double c;}; #pragma pack(pop) int main() {     printf("AD.a %d\n",field_offset(AD,a));     printf("AD.b %d\n",field_offset(AD,b));     printf("AD.c %d\n",field_offset(AD,c));     printf("AD sizeof %d\n", sizeof(AD));     printf("\n");     printf("A1.a %d\n",field_offset(A1,a));     printf("A1.b %d\n",field_offset(A1,b));     printf("A1.c %d\n",field_offset(A1,c));     printf("A1 sizeof %d\n", sizeof(A1));     printf("\n");     printf("A2.a %d\n",field_offset(A2,a));     printf("A2.b %d\n",field_offset(A2,b));     printf("A2.c %d\n",field_offset(A2,c));     printf("A2 sizeof %d\n", sizeof(A2));     printf("\n");     printf("A4.a %d\n",field_offset(A4,a));     printf("A4.b %d\n",field_offset(A4,b));     printf("A4.c %d\n",field_offset(A4,c));     printf("A4 sizeof %d\n", sizeof(A4));     printf("\n");     printf("A8.a %d\n",field_offset(A8,a));     printf("A8.b %d\n",field_offset(A8,b));     printf("A8.c %d\n",field_offset(A8,c));     printf("A8 sizeof %d\n", sizeof(A8));     printf("\n");     printf("A16.a %d\n",field_offset(A16,a));     printf("A16.b %d\n",field_offset(A16,b));     printf("A16.c %d\n",field_offset(A16,c));     printf("A16 sizeof %d\n", sizeof(A16));     printf("\n");     return 0; } //AD.a 0 //AD.b 4 //AD.c 24 //AD sizeof 32 // //A1.a 0 //A1.b 4 //A1.c 17 //A1 sizeof 25 // //A2.a 0 //A2.b 4 //A2.c 18 //A2 sizeof 26 // //A4.a 0 //A4.b 4 //A4.c 20 //A4 sizeof 28 // //A8.a 0 //A8.b 4 //A8.c 24 //A8 sizeof 32 // //A16.a 0 //A16.b 4 //A16.c 24 //A16 sizeof 32 // //

user: user-3
content: 没有直接打印出结构体的功能，c, java，pascal等好像都不行。

user: user-0
content: 引用 2 楼 zhouxiaofeng1021 的回复:http://www.cnblogs.com/jssong20000/archive/2012/09/05/2672648.html 请参考！ 谢谢

user: user-0
content: 引用 1 楼 cyfcsd 的回复:写一个对应的printStruct（Struct  s）函数不就可以了吗，你不就是想不用每次都写好多printf吗  谢谢了

user: user-0
content: 引用 4 楼 paschen 的回复: #define PrintfStru  printf（”%x%x%x“,s.a,s.b,s.c);  //使用时： PrintfStru(s);    谢谢额  看来只能这样了。

user: user-4
content: 自定义一个输出方法吧，没什么好的方式。

user: user-5
content: 这个问题还是C#、Java类语言比较简单，用反射，动态得到变量名和变量类型 C和C++应该没有优雅的解决方案

user: user-6
content: 只有非常巧合的时候，才好用这种方式， 最好还是定义宏 或者函数 输出结构

user: user-7
content: 只能自己写个函数实现

user: user-8
content: C语言中应该没有，可以自己封装一个已知的结构体

user: user-9
content: #define PrintfStru  printf（”%x%x%x“,s.a,s.b,s.c);  //使用时： PrintfStru(s);

user: user-10
content: 自己封装一个函数 就可以啦~~~

user: user-10
content: http://www.cnblogs.com/jssong20000/archive/2012/09/05/2672648.html 请参考！

user: user-11
content: 写一个对应的printStruct（Struct  s）函数不就可以了吗，你不就是想不用每次都写好多printf吗

user: user-12
content: C语言中没有办法。C++中倒是可以重载<<运算符，达到使用 cout << aObj; 整体输出的效果。 不过说白了，也是写一个函数。

user: user-13
content: 只能写个函数，之后调用这个函数输出就行
user-0 提问: 给字符型指针赋值  char *p1 = NULL; P1 =100; 

回复:
user: user-1
content: 不能将int类型的值 分配到char*类型的实体

user: user-2
content: 不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！  有人说一套做一套，你相信他说的还是相信他做的？ 其实严格来说这个世界上古往今来所有人都是说一套做一套，不是吗？  不要写连自己也预测不了结果的代码！

user: user-3
content: 或者*p2 = p1;这样赋值也是正确的。  我要积分，快没有积分下载资源了啊啊啊啊啊。。。

user: user-4
content: 一般不能这样做 除非缺失对地址为100的那个单元操作，这时也应该告诉编译器一声，比如 *p2 =(char *) 100; 否则就太粗暴了

user: user-3
content: 引用 4 楼 ziranqiuzhi 的回复:[quote=引用 2 楼 qq423399099 的回复:] 不行，类型不匹配的。 同时注意在这里也不能用strcpy,因为p1指针指向NULL，不能向该地址进行写操作 传智播客C视频上，是这样写的 char *p1 = NULL ; char **p2 =NULL ; P2 = &P1 ; *P2 = 100 ;[/quote]  很明显*p2 = 100是错的。你这么看 （char*) p1: p1是char*的，代表p1是个地址，该地址指向1个char型变量 (char**)p2：p2是char**型的，代表p2是个地址，该地址指向一个地址（该地址的值是个指向char型变量地址） 所以最后应该是*p1 = 100;

user: user-0
content: 引用 2 楼 qq423399099 的回复:不行，类型不匹配的。 同时注意在这里也不能用strcpy,因为p1指针指向NULL，不能向该地址进行写操作 传智播客C视频上，是这样写的 char *p1 = NULL ; char **p2 =NULL ; P2 = &P1 ; *P2 = 100 ;

user: user-0
content: 引用 1 楼 qq_33696907 的回复:不能将int类型的值 分配到char*类型的实体 传智播客C视频上，是这样写的 char *p1 = NULL ; char **p2 =NULL ; P2 = &P1 ; *P2 = 100 ;

user: user-2
content: 不行，类型不匹配的。 同时注意在这里也不能用strcpy,因为p1指针指向NULL，不能向该地址进行写操作
user-0 提问: 回文数的判断

回复:
user: user-1
content: #include <stdlib.h> #include <stdio.h> #include <string.h>  int backstr(char *src) {         int len=strlen(src);         int i = 0;         printf("%d\n", len);         for(i = 0; i <= len / 2; i++)         {                 printf("%c %c\n", src[i], src[len - 1 - i]);                 if(src[i] != src[len - 1 - i])                 {                         return 1;                 }         }         return 0; }  int main(int argc, char *argv[]) {         char *abc = "abcdedcba";         printf("%d\n", backstr(abc));         return 0; }

user: user-2
content: 这是C语言，我用c-free编的。

user: user-2
content: #include <stdio.h> #include <string.h> #include<stdlib.h> #include<conio.h> int main() {  char str[20];  int i,b,c=0;     scanf("%s",str);     b=strlen(str);      for(i=0;i<strlen(str)/2;i++)      {         if(str[i]==str[b-1])           b--;                   else            c=1;                     }      if(c==1)      printf("不是回文");      else      printf("是回文");  getch();  return 0;  }

user: user-3
content: 引用 3 楼 Labyrinth0825 的回复:[quote=引用 1 楼 user-3 的回复:] [code=c] bool IsPN(unsigned num 这里第一行就看不懂了。。这个是不是C++中的，C语言的话要怎么写  C/C++都行，第一个发的是判断一个数字，判断字符串看第二个

user: user-0
content: [quote=引用 1 楼 user-3 的回复:] [code=c] bool IsPN(unsigned num 这里第一行就看不懂了。。这个是不是C++中的，C语言的话要怎么写

user: user-3
content: bool IsPN(unsigned num) { 	if(num==0) 		return true; 	unsigned n=num; 	unsigned tmp=0; 	while(num!=0) 	{ 		tmp*=10; 		tmp+=num%10; 		num/=10; 	} 	if(tmp==n) 		return true; 	else 		return false; }

user: user-3
content: 如果要判断字符串：  http://blog.csdn.net/cbs612537/article/details/8217425
user-0 提问: 两个文件相互嵌套使用ifdef..endlf，产生的函数未定义问题

回复:
user: user-1
content: 添加一个头文件，把你要用到的函数声明写在里面，然后在CPP中都包含这个头文件

user: user-0
content: @paschen  什么意思啊？能不能帮我改一下啊

user: user-0
content: 什么意思啊？能不能帮我改一下啊

user: user-1
content: 函数声明放在头文件里，函数实现放在源文件里，这样就只用包含头文件了  CPP文件本身就会参与编译，所以不要去包含

user: user-2
content: 为什么不把声明放在头文件中，都include头文件

user: user-3
content: 加一个regi-sign.h文件，把regi-sign.cpp中的函数和变量在regi-sign.h中声明下，在main。cpp中包含regi-sign.h文件 使用mian里面的结构体，在main.cpp中extern struct coust person[N],*perso,*coun,*pass; regi-sign.h中struct coust person[N],*perso,*coun,*pass;定义就行了
user-0 提问: win7下C语言不能单步跟踪调试

回复:
user: user-1
content: FileTool.exe 替换打开和添加到项目中 Visual C++ 的新功能 http://support.microsoft.com/kb/241396/zh-cn

user: user-2
content: 升级win10 用vc无压力

user: user-3
content: win7下用vc6问题多多，有两个解决方法： 一、你可以到网上下载vc20XX的版本，只要比VC6版本高就行了 二、如果一定要使用VC6，可以下载虚拟机，在虚拟机里安装XP，在XP中再装VC6就可以了

user: user-4
content: http://bbs.csdn.net/topics/100012148

user: user-0
content: 可是现在只能用vc6.0

user: user-5
content: 楼主用的啥ide啊？ 试试codeblocks

user: user-6
content: 那就换个ide，学C不是非得VC
user-0 提问: 一小段C语言代码没看懂，请大家帮我解惑

回复:
user: user-1
content: 其余的应该是在发送结束中断处理程序中完成的。 向SBUF中写入一个字节，启动发送过程。该字节发送结束后，产生中断。中断服务程序中继续后续一个字节的发送。接下来又是中断、发送、中断、发送……，最后一个字节发送出去后的中断，CPU就知道一包数据已经发送结束了。
user-0 提问: 谁有伪3D游戏的源码，分享下。

回复:
user: user-1
content: https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=0&rsv_idx=1&tn=monline_3_dg&wd=3D%E6%B8%B8%E6%88%8F%E6%BA%90%E7%A0%81&rsv_pq=8a5d48ed000227ba&rsv_t=8b44BnG8%2BnGvun4E6IJwPFkMNKwoNUcihe3C6KCqc8s6zqJeo3gk%2BfTtjJgloN9waC23&rsv_enter=1&rsv_sug3=12&rsv_sug1=7&rsv_sug7=100&rsv_sug2=0&inputT=4936&rsv_sug4=4937

user: user-2
content: Wolf3D 好像类似的哪一款有源码的。
user-0 提问: C语言问题，在线等，急

回复:
user: user-1
content: item=flag*power(x,2*i)/fact(2*i) 这是什么意思？里面的2*i

user: user-2
content: 每次重新计算阶乘和幂 都是低效的做法 如果是入门训练，还是可以的 如果是写程序，就不是好的做法了

user: user-2
content: 0！=1; 这是规定 1！=1;这个不用说了  不过，这种做法，每次重新计算阶乘，效率很低

user: user-0
content: 原来我做对了，谢谢

user: user-3
content: 第一个空      for (i = 0, sum = 0.0, flag = 1; i < n; i++)     {         item = flag * power(x, 2 * i) / fact(2 * i);         sum += item;         flag = -flag;     } 第二个空     for (i = 1, product = 1.0; i <= n; i++)         product *= i; 第三个空     for (i = 1, pow = 1; i <= n; i++)         pow *= x;

user: user-0
content: 引用 2 楼 qq423399099 的回复: #include<stdio.h>  void main() { 	int i, n, flag; 	double x, item, sum = 0.0;  	double fact(int n); 	double power(double x, int n);  	printf("输入一个正整数n和一个实数x:"); 	scanf("%d%lf", &n, &x); 	for(i = 0; i < n; i++) 	{ 		flag = (i % 2 == 0) ? 1 : -1; 		item = flag * power(x, 2 * i) / fact(2 * i); 		sum += item; 	} 	printf("cos(x)的近似值=%0.4f\n", sum); }  double fact(int n) { 	double product = 1.0; 	int i; 	for(i = 2; i <= n; i++) 		product *= i; 	return product; }  double power(double x, int n) { 	if(n == 0) 		return 1.0; 	double pow = x; 	int i; 	for(i = 1; i < n; i++) 		pow *= x; 	return pow; } 为什么阶乘那里从2开始，原来我就是错了这里

user: user-4
content: 1乘以1还是1，所以从2开始就行了

user: user-0
content: #include "stdio.h" void main() { 	int i,n,flag; 	double x,item,sum; 	double fact(int n); 	double power(double x,int n); 	printf("输入一个正整数n和一个实数x："); 	scanf("%d%lf",&n,&x); 	flag=1; 	for(sum=0,i=0;i<n;i++){ 		item=flag*power(x,2*i)/fact(2*i); 		flag=-flag; 		sum=sum+item; 	} 	printf("cox(x)的近似值=%0.4f\n",sum); } double fact(int n) { 	double product; 	int i; 	for(product=1,i=2;i<=n;i++){ 		if(i==0)product=1; 		else product=product*i; 	} 		  	return product; } double power(double x,int n) { 	double pow; 	int i; 	for(pow=1,i=0;i<=n;i++){ 		if(i==0) pow=1; 		else pow*=x;} 	return pow; }我的原程序

user: user-4
content: #include<stdio.h>  void main() { 	int i, n, flag; 	double x, item, sum = 0.0;  	double fact(int n); 	double power(double x, int n);  	printf("输入一个正整数n和一个实数x:"); 	scanf("%d%lf", &n, &x); 	for(i = 0; i < n; i++) 	{ 		flag = (i % 2 == 0) ? 1 : -1; 		item = flag * power(x, 2 * i) / fact(2 * i); 		sum += item; 	} 	printf("cos(x)的近似值=%0.4f\n", sum); }  double fact(int n) { 	double product = 1.0; 	int i; 	for(i = 2; i <= n; i++) 		product *= i; 	return product; }  double power(double x, int n) { 	if(n == 0) 		return 1.0; 	double pow = x; 	int i; 	for(i = 1; i < n; i++) 		pow *= x; 	return pow; }

user: user-0
content: 没想出来啊，大神帮帮忙啊
user-0 提问: 用指针方法求 输出1~1000的完数  求改代码

回复:
user: user-1
content: #include <stdio.h> #include <stdlib.h> /*输出1~1000的完数(1不是完数 */  int getFactors(int n,int *arr,int *l);//*l表示因子的个数 void outPut(int n,int *arr,int l);  int main(int argc, char *argv[]) {     int     arr[1000], l, i;     for (i = 1; i < 1000; i++)     {         l = 0;  //这里！！！！！！！！         if (i == getFactors(i, arr, &l))         {             outPut(i, arr, l);  //这里！！！！！！！！         }     }      return 0; } int getFactors(int n, int *arr, int *l) {     int     *p, sum = 0, i, max = n / 2;     p = arr;     for (i = 1; i <= max; i++)     {         if (n % i == 0)         {             *p = i;//将因子储存起来             p++;//指向下一个元素             sum += i;             *l = *l + 1;         }     }     return sum; } void outPut(int n, int *arr, int l) {     printf("%d=", n);     int     i;     for (i = 0; i < l - 1; i++)     {         printf("%d+", arr[i]);     }     printf("%d\n", arr[i]); }
user-0 提问: 为何压栈不成功？

回复:
user: user-1
content: http://bbs.csdn.net/topics/391945880

user: user-2
content: 因为你在函数里操作的都只是main函数里的s的一个拷贝，需要传指针或者引用才行  #include"stdio.h" struct Stack { 	int sdata[100]; 	int slen; }s; //初始化栈 void initeStack(Stack *S) { 	S->slen=0; }  //删除栈顶元素 bool pop(Stack *S) { 	if(S->slen > 0) 	{ 		S->slen--; 		return 1; 	} 	else 	{ 		return 0; 	} } //元素压入栈中 bool push(Stack *S,int x) { 	if( S->slen<99)//栈不可满 	{ 		S->slen++; 		S->sdata[S->slen-1]= x ; 		return 1; 	} 	else 		return 0; } void emptyStack(Stack *S) { 	for(int i=0;i<S->slen;i++) 		pop(S); } int main() { 	Stack s; 	initeStack(&s); 	push(&s,1); 	printf("len of stack s=%d",s.slen); }

user: user-0
content: 我知道怎么做了，但是为什么要这样呢？ 头文件stack.h struct Stack {     int sdata[100];     int slen; }; //初始化栈 void initeStack(Stack *S) { 	S->slen=0; } //删除栈顶元素 bool pop(Stack *S) {   if(S->slen > 0)   {     S->slen--;     return 1;   }   else   {     return 0;   } } //元素压入栈中 bool push(Stack *S,int x) {   if( S->slen<99)//栈不可满   {       S->slen++;       S->sdata[S->slen-1]= x ;       return 1;   }   else     return 0; } void emptyStack(Stack *S) {   for(int i=0;i<S->slen;i++)       pop(S); } 主函数： #include"stdio.h" #include"stack.h" int main() { Stack s; initeStack(&s); push(&s,1); push(&s,2); printf("len of stack s=%d",s.slen); }
user-0 提问: C/C++ 工程问题求助

回复:
user: user-1
content: 一般段错误可以从buf溢出，内存分配处着手

user: user-2
content: 放到开发板中运行会直接段错误，那可否先直接运行下呢，就是在linux或window内测试下代码呢，如ok，可以再找其他问题，

user: user-3
content: Windows： 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。  Linux： 进程意外退出会在当前目录下产生‘core’文件或形如‘core.数字’的文件比如‘core.1234’ 使用命令 gdb 运行程序名 core或core.数字 进入gdb然后使用bt命令 可以查看进程意外退出前函数调用的堆栈，内容为从上到下列出对应从里层到外层的函数调用历史。 如果进程意外退出不产生core文件，参考“ulimit -c core文件最大块大小”命令

user: user-4
content: struct  trans *info_st;  只是定义了一个指向结构体的指针 想必楼主应该是没有分配过空间吧，而直接使用了info_st->

user: user-0
content: 给自己顶一下
user-0 提问: 链表问题

回复:
user: user-1
content: #include <stdio.h> #include <stdlib.h>  struct node       //结点数据类型 { 	char data; 	struct node *next;  };  void traverse(struct node* head); void destroy(struct node* head); struct node* headinsert();//该函数按照头插法，创建4个结点的动态链表，并返回第1个结点的地址  int main() { 	struct node *head=NULL;  	head=headinsert();   //用头插法创建链表  	//遍历链表 	traverse(head);  	//释放资源，销毁链表中所有结点 	destroy(head);  } void traverse(struct node* head) { 	struct node *p; 	p= head; 	while(p) 	{ 		printf("%c ", p->data); 		p = p->next; 	}  }  void destroy(struct node* head) { 	struct node *p; 	while(head) 	{ 		p = head; 		head = head ->next; 		free(p); 	} } struct node* headinsert() { 	struct node *p, *head = NULL; 	int n=0; 	char buffer[64] = {0}; 	scanf("%s", buffer); 	while(buffer[n] != '\0') 	{ 		p = (struct node *) malloc (sizeof(struct node));	 		p->data = buffer[n]; 		p->next = head; 		head = p; 		n++; 	} 	return head; }
user-0 提问: 数组大小

回复:
user: user-1
content: 仅供参考：#include <stdio.h> #include <stdlib.h> #include <malloc.h> int **newarr2d(int rows,int cols) {     int **p,i;      p=(int **)malloc(rows*sizeof(int *));     if (NULL==p) exit(1);     for (i=0;i<rows;i++) {         p[i]=(int *)malloc(cols*sizeof(int));         if (NULL==p[i]) exit(1);     }     return p; } void deletearr2d(int **p,int rows) {     int i;      for (i=0;i<rows;i++) {         free(p[i]);     }     free(p); } int main() {     int **arr2d,i,j,r,c;      r=4;     c=5;     //在堆中开辟一个4×5的二维int数组     arr2d=newarr2d(r,c);     for (i=0;i<r;i++) {         for (j=0;j<c;j++) {             arr2d[i][j]=i*c+j;         }     }     for (i=0;i<r;i++) {         for (j=0;j<c;j++) {             printf(" %2d",arr2d[i][j]);         }         printf("\n");     }     deletearr2d(arr2d,r);      r=6;     c=3;     //在堆中开辟一个6×3的二维int数组     arr2d=newarr2d(r,c);     for (i=0;i<r;i++) {         for (j=0;j<c;j++) {             arr2d[i][j]=i*c+j;         }     }     for (i=0;i<r;i++) {         for (j=0;j<c;j++) {             printf(" %2d",arr2d[i][j]);         }         printf("\n");     }     deletearr2d(arr2d,r);      return 0; } //  0  1  2  3  4 //  5  6  7  8  9 // 10 11 12 13 14 // 15 16 17 18 19 //  0  1  2 //  3  4  5 //  6  7  8 //  9 10 11 // 12 13 14 // 15 16 17 //

user: user-2
content: 不能，需要在编译时确定大小，如要可变需要动态分配

user: user-3
content: 1、如果楼主不是用于什么特别的程序，仅仅只是用来实验或者做个小作业，可以先定义一个比较大的二维数组，然后输入x、y定义能够使用的数组边界。 2、楼主可以malloc(new)一个一维数组，将一维数组当做二维数组使用（对于计算机来说一维数组和二维数组没什么区别，只是人看着有区别而已） 3、按照楼上方法定义二维数组。

user: user-4
content: GCC什么的是支持变长数组的，如果是VS什么的是不行的，变长数组坑不少楼主用的时候小心 用new定义一个5x5的二维数组：  int m=5,n=5; int **p=new int*[m]; for(int i=0;i<m;i++) {     p[i]=new int[n];  }

user: user-5
content: 变长数组（variable length array type）是C99才引入到C语言中的，C11不要求实现必须支持。 你需要一个支持变长数组的编译器，比如GCC和CLANG。
user-0 提问: 求两个矩阵相乘 不知为啥不对

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

回复:
user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:用vs2013使用c++不能做出什么呢？  怎么做

user: user-0
content: 引用 1 楼 user-2 的回复:能。 怎么操作，有案例参考吗？

user: user-1
content: 参考MSDN中Office开发相关章节？

user: user-1
content: 用vs2013使用c++不能做出什么呢？

user: user-2
content: 能。
user-0 提问: openssl中如何提取算法源码

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

user: user-2
content: 看源码费劲那就调试，埋日志。
user-0 提问: c指针存储单元

回复:
user: user-1
content: my_name和me指针属于局部变量，在32位系统中，该局部变量占4个字节；这两个指针在栈上分配的，my_name = me;只是将me指向的地址值赋值给了my_name；这样my_name的内存空间（4个字节）存放的是新的字符串的地址；

user: user-2
content: 是啊，存在静态常量区  谁说指针一定要动态分配内存，指向常量区、指向栈上的变量一样可以啊

user: user-3
content: 指针my_name和me都没有分配存储单元的，只是一个指针变量，例如，int a;一样，只不过他是指向了常量区的2个字符串常量的地址罢了，调用他就可以访问那2个字符串，但不能修改其内容的，因为不能修改常量的。要是malloc一个空间给一个指针的话，那此指针内的数据可以修改的了，我技术不行，理解不当之处，望高手指正，学习中！

user: user-4
content: my_name和me，因为定义的是一个普通指针，并没有定义空间来存放"Tony"，所以编译器得帮我们找地方来放"Tony"，显然，把这里的"Tony"当成常量并把它放到程序的常量区是编译器最合适的选择。所以尽管my_name的类型不是const char*，并且my_name[0] = 'x';也能编译通过，但是执行my_name[0] = 'x';就会发生运行时异常，因为这个语句试图去修改程序常量区中的东西。  记得哪本书中曾经说过char* my_name= "Tony";这种写法原来在c++标准中是不允许的，但是因为这种写法在c中实在是太多了，为了兼容c，不允许也得允许。虽然允许，但是建议的写法应该是const char* my_name= "Tony";这样如果后面写my_name[0] = 'x'的话编译器就不会让它编译通过，也就避免了上面说的运行时异常。  PS：在C++03中，char* my_name= "Tony"是合法的，但在C++11中是非法的，C++11必须这样写：const char* my_name= "Tony"
user-0 提问: 求教一道链表的问题

回复:
user: user-1
content: 不是声明后，就指向下一个 而是定义了一个指针， 用于指向下一个节点（储存下各节点的地址） 这个指针，之所以能指向下一个节点，是因为， 链表相关的程序的代码， 保证这个这个指针，永远指向下各节点。  靠的是链表的数据结构，依赖的函数的代码实现，来保证这一点的

user: user-0
content: 引用 6 楼 qq423399099 的回复:因为你采用的是尾插法，每次malloc出来的p节点都是最后一个待插入的节点，所以它的next指针要置为空 q->next表示的是q所指向的节点的next指针让它指向新malloc的节点，实现新节点的插入 q=p;表示将q节点指向新malloc出来的节点（q要指向最后一个节点，这样下次才能使用q->next=p;实现链表连接）讲的太详细了！我理解了，拜谢！

user: user-2
content: 因为你采用的是尾插法，每次malloc出来的p节点都是最后一个待插入的节点，所以它的next指针要置为空 q->next表示的是q所指向的节点的next指针让它指向新malloc的节点，实现新节点的插入 q=p;表示将q节点指向新malloc出来的节点（q要指向最后一个节点，这样下次才能使用q->next=p;实现链表连接）

user: user-0
content: 引用 3 楼 qq423399099 的回复:当然不是直接指向下一个结点。。 你得自己赋值啊，比如第一个结点p1,第二个节点p2 p1->next=p2这样赋值过才使得第一个节点的next指针指向第二个节点嗯嗯。。我看树上的输入代码大概是   for(i=1;i<=n;i++) {         scanf("%d", &a);         p = (struct node *)malloc(sizeof(struct node));//申请一个动态空间         p->data = a;         p->next = NULL;         if (head == NULL)              head = p;             else              q->next = p;             q = p；      } 请问这段代码里 q->next=p; q=p; 为什么要将q的后继指针指向p结点，q也要指向p结点呢？谢谢

user: user-0
content: 引用 4 楼 jinyingmo94 的回复:[quote=引用 3 楼 qq423399099 的回复:] 当然不是直接指向下一个结点。。 你得自己赋值啊，比如第一个结点p1,第二个节点p2 p1->next=p2这样赋值过才使得第一个节点的next指针指向第二个节点嗯嗯。。我看树上的输入代码大概是   for(i=1;i<=n;i++) {         scanf("%d", &a);         p = (struct node *)malloc(sizeof(struct node));//申请一个动态空间         p->data = a;         p->next = NULL;         if (head == NULL)              head = p;             else              q->next = p;             q = p；      } 请问这段代码里 q->next=p; q=p; 为什么要将q的后继指针指向p结点，q也要指向p结点呢？谢谢 [/quote]还有为什么临时指针的后继指针指向空？谢谢

user: user-2
content: 当然不是直接指向下一个结点。。 你得自己赋值啊，比如第一个结点p1,第二个节点p2 p1->next=p2这样赋值过才使得第一个节点的next指针指向第二个节点

user: user-0
content: 引用 1 楼 ArthurJava 的回复:大神。。我是想问为什么这样声明之后会指向下一个结点？
user-0 提问: 6174问题好像陷入了死循环，请帮我看一下

回复:
user: user-1
content: 引用 楼主 computerfeiwu 的回复:例如，从1234出发，依次可以得到4321-1234=3087、8730-378=8352、8532-2358=6174，又回到了它自己！  不明白楼主的意思，又回到它自己是什么意思？

user: user-2
content: #include <stdio.h> #include <stdlib.h>  int comp(const void*a,const void*b) {     return *((int*)b) - *((int*)a); }  int CaoZuo( int n, int *times ) {     int a[4], i;     int temp = n, max, min;     for ( i=0; i<4; i++ )     {         a[i] = temp % 10;         temp /= 10;     }     qsort(a, 4, sizeof(int), comp);     max=a[0]*1000+a[1]*100+a[2]*10+a[3];     min=a[3]*1000+a[2]*100+a[1]*10+a[0];      if ( max - min != n )     {         (*times)++;         return CaoZuo( max - min, times );     }     return n; }  int main() { int n = 1283; int times = 0; int dest = CaoZuo(1234, ×); printf("n = %d dest=%d times=%d\n", n, dest, times);  return 0; }

user: user-2
content: paixuda里面j范围不对。
user-0 提问: 这是一个词法分析，怎么识别小数点和负数

回复:
user: user-1
content: 十进制数的 分析： 正负号跟小数点，以及指数标志的分析 大概分这么几个步骤： 1）分析正负号 过滤空格，找到 + 或者 - ，找整数部分 没找到，判断是否数字，是数字，符号为 +，找整数部分 不是数字判断是否空格 是空格接着过滤空格 否则出错处理  2）找整数部分 一直找数字，直到不是，整数部分结束 此后一般不再滤除空格了，需要的话，在每步前面加上 3）找小数点  判断当前字符是否小数点，是 找小数，不是结束，这个数是整数 4）找小数尾数 一直找数字，直到不是，位数部分结束 5）找指数标志 E,e,有些系统例如fortran 还包括 D，d 判断当前字符是不是 指数标志，是找指数部分 6）指数部分 一般不在滤除空格 6.1）指数的符号 找+，-号，有找到了，没有，符号为 + ,直接找整数部分 6.2）指数的整数部分 找数字，直到非数字。  可能还有第7步，数据类型后缀 有些系统可能是前缀 C,C++ 十六进制数，既有有前缀和也有后缀 现在浮点常量，也可有十六进制表示 大约就这些吧

user: user-2
content: 请问我要识别小数或者实数应该怎么改这个代码啊

user: user-3
content: 词法分析(1)---词法分析的有关概念以及转换图(内含浮点数格式解析c源代码) http://www.cppblog.com/woaidongmao/archive/2009/09/25/97245.html

user: user-3
content: 参考Tiny C Compiler源代码？

user: user-4
content: 做的再好点是判断完'-'后面的是否是数字 再判断它之前的是否也是数字就能确定是减号还是负号

user: user-4
content: 你在case'-':这里还需要继续看proc[p+1]是否是数字，如果是数字 那么syn=11,否则 syn=14如果是数字 那么你这里需要一直遍历到不是数字为止。
user-0 提问: 关于cJSON编译报错的问题

回复:
user: user-1
content: 引用 3 楼 ighack 的回复:#include包含的顺序错误了 要先包函stdlib.h stdio.h 牛批！

user: user-2
content: 4L是正解！

user: user-3
content: 不知道楼主问题解决没有，可否分享一下？

user: user-4
content: 你在.h里添加string头文件

user: user-0
content: #include包含的顺序错误了 要先包函stdlib.h stdio.h

user: user-0
content: 引用 1 楼 user-5 的回复:size_t未定义。  #ifdef  __linux__ typedef unsigned int size_t #endif 如果我在cJSON.h添加这些 会提示在stddef.h里已经定义过了   gcc 版本 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC)

user: user-5
content: size_t未定义。  #ifdef  __linux__ typedef unsigned int size_t #endif
user-0 提问: 结构体强制转化，大小端模式问题

回复:
user: user-1
content: buf的地址相对于结构类型TEST来说，不是正确对齐的。 未对齐的访问会产生未定义的行为，什么情况都有可能发生，程序没有崩溃已经很幸运了。 正确的做法是这样的： WORD buf[1024] = {0}; 或者 _Alignas (TEST) BYTE buf[1024] = {0};    //仅C11支持。

user: user-2
content: 跟大小端无关啊，可能是数据对齐的问题 给test最后增加一个char成员再试试。

user: user-3
content: #include <stdio.h> #include <string.h> FILE *f; char buffer[4096]; int r,a; void HexDump(char *buf,int len,int addr) {     int i,j,k;     char binstr[80];      for (i=0;i<len;i++) {         if (0==(i%16)) {             sprintf(binstr,"%08x -",i+addr);             sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);         } else if (15==(i%16)) {             sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);             sprintf(binstr,"%s  ",binstr);             for (j=i-15;j<=i;j++) {                 sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');             }             printf("%s\n",binstr);         } else {             sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);         }     }     if (0!=(i%16)) {         k=16-(i%16);         for (j=0;j<k;j++) {             sprintf(binstr,"%s   ",binstr);         }         sprintf(binstr,"%s  ",binstr);         k=16-k;         for (j=i-k;j<i;j++) {             sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');         }         printf("%s\n",binstr);     } } int main(int argc,char **argv) {     if (argc<2) {         fprintf(stderr,"Usage: %s filename.ext\n",argv[0]);         return 2;     }     f=fopen(argv[1],"rb");     if (NULL==f) {         fprintf(stderr,"Can not open file [%s]!\n",argv[1]);         return 1;     }     a=0;     while (1) {         r=fread(buffer,1,4096,f);         HexDump(buffer,r,a);         a+=r;         if (r<4096) break;     }     fclose(f);     return 0; }

user: user-4
content: 1   #include <stdio.h>                                                                                                                                                                                          1 #include <string.h>   2        3        4 typedef char BYTE;   5 typedef short WORD;   6        7 typedef struct tag_TEST   8 {      9     |   WORD            nIndex;  10     BYTE        baud;  11     BYTE        protocol;    12     BYTE        port;  13     char        password[32];  14     BYTE        pwdLen;  15     BYTE        rateNum;  16 }TEST;  17 int main(void)  18 {     19     TEST tmp;  20     BYTE buf[1024] = {0};  21     memset(&tmp, 0x00, sizeof(TEST));  22     tmp.nIndex = 0x0001;  23     memcpy(buf, (BYTE*)&tmp, sizeof(TEST));  24       25     printf("buf_index=%04x, tmp_index=%04x\r\n",((TEST*)buf)->nIndex, tmp.nIndex);  26     return 0;  27 }  我测试的结果是一样的，没有出现LZ说的差异，我使用的是小端系统；LZ使用的是大端系统；

user: user-0
content: 如果我在定义个TEST B,把buf里面的拷贝出来，在打印B.nIndex，结果就是正常的0x0001了   TEST B; memcpy(&B, buf, sizeof(TEST));

user: user-0
content: 求指教求指教求指教求指教求指教
user-0 提问: acm c语言

回复:
user: user-0
content: 引用 楼主 jianjiu7 的回复:求平均成绩 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 37344 Accepted Submission(s): 8899  Problem Description 假设一个班有n(n<=50)个学生，每人考m(m<=5)门课，求每个学生的平均成绩和每门课的平均成绩，并输出各科成绩均大于等于平均成绩的学生数量。  Input 输入数据有多个测试实例，每个测试实例的第一行包括两个整数n和m，分别表示学生数和课程数。然后是n行数据，每行包括m个整数（即：考试分数）。  Output 对于每个测试实例，输出3行数据，第一行包含n个数据，表示n个学生的平均成绩，结果保留两位小数；第二行包含m个数据，表示m门课的平均成绩，结果保留两位小数；第三行是一个整数，表示该班级中各科成绩均大于等于平均成绩的学生数量。 每个测试实例后面跟一个空行。  Sample Input 2 2 5 10 10 20  Sample Output 7.50 15.00 7.50 15.00 1    #include<stdio.h>  int main() { 	int n,m,i,j,cout,p; 	while(~scanf("%d %d",&n,&m)){ 		cout=0; 		int s[51][5]={0}; 		float a[6]={0}; 		float b[51]={0}; 		for(i=0;i<n;i++) 			for(j=0;j<m;j++){ 			scanf("%d",*(s+i)+j); 			b[i]+=s[i][j]; 			} 		 		for(j=0;j<m;j++)	 			for(i=0;i<n;i++) 				a[j]+=s[i][j]; 				 		for(i=0;i<n;i++){ 			p=1; 			for(j=0;j<m;j++) 				if(s[i][j]<a[j]/n){ 					p=0; 					break; 			} 			if(p) 			cout++; 		} 			 		for(i=0;i<n-1;i++) 			printf("%.2f ",b[i]/n); 		printf("%.2f\n",b[i]/n); 	 		for(j=0;j<m-1;j++) 			printf("%.2f ",a[j]/n); 		printf("%.2f\n",a[j]/n); 		printf("%d\n\n",cout); 	}  	return 0; } 为什么一直不对，到底哪里错了，求大神指教倒数第二个for循环里的除以n改成m也不对。。。。

user: user-0
content: 引用 2 楼 mxway 的回复:while(~scanf("%d %d",&n,&m)) 改为 while(scanf("%d %d",&n,&m)!=EOF)有可能,float只有7位，但成绩累加后  引用 4 楼 mxway 的回复:[quote=引用 3 楼 jianjiu7 的回复:] [quote=引用 2 楼 mxway 的回复:] while(~scanf("%d %d",&n,&m)) 改为 while(scanf("%d %d",&n,&m)!=EOF)不是这个的原因，~的意思和！=EOF是一样的，刷题一般都用~代替，简单[/quote] 把程序中所有的float改成double，有可能是float的精度不够。[/quote]有道理，我刚算了，成绩累加后能达到千位，加上两个小数有可能会导致精度不够，不错不错

user: user-0
content: 引用 5 楼 user-2 的回复:Time Limit: 2000/1000 MSMS是毫秒吧？是啊，

user: user-1
content: while(~scanf("%d %d",&n,&m)) 改为 while(scanf("%d %d",&n,&m)!=EOF)

user: user-2
content: Time Limit: 2000/1000 MSMS是毫秒吧？

user: user-1
content: 引用 3 楼 jianjiu7 的回复:[quote=引用 2 楼 mxway 的回复:] while(~scanf("%d %d",&n,&m)) 改为 while(scanf("%d %d",&n,&m)!=EOF)不是这个的原因，~的意思和！=EOF是一样的，刷题一般都用~代替，简单[/quote] 把程序中所有的float改成double，有可能是float的精度不够。

user: user-0
content: 引用 2 楼 mxway 的回复:while(~scanf("%d %d",&n,&m)) 改为 while(scanf("%d %d",&n,&m)!=EOF)不是这个的原因，~的意思和！=EOF是一样的，刷题一般都用~代替，简单
user-0 提问: 关于变量类型问题

回复:
user: user-1
content: 是否可以考虑一下C++的模板类或者泛型啊？

user: user-2
content: 优先考虑这样设计合不合理，有没有别的方案，别人看不看得懂，毕竟不是像python这种动态语言想怎么赋值就怎么赋值

user: user-3
content: 引用 14 楼 sensal 的回复:[quote=引用 12 楼 SXJIAKE 的回复:] 你这个写法无敌了：if(B=0) typedef dataType int; else if(B=1) typedef dataType float; 怎么说？[/quote]typedef 是编译时指令……

user: user-4
content: 仅供参考：//codegen.c // 输入一组字符串，比如 // aa ss ddd dd 33 dd // 然后自动生成一个函数 int A(const char*); // 实现A("aa")返回0  A("ss")返回1 依次类推 #include <stdio.h> int main(int argc,char **argv) {     int i;     if (argc<2) {         printf("%s p1 [p2 ...] [>result.c]\nGenerate code int A(const char *a); 0==A(\"p1\") 1==A(\"p2\") ...",argv[0]);         return 1;     }     //printf("#include <string.h>\n");     printf("int A(const char *a) {\n");     for (i=0;i<argc-1;i++) {         printf("    if (0==strcmp(a,\"%s\")) return %d;\n",argv[i+1],i);     }     printf("    return -1;\n");     printf("}\n");     return 0; } //C:\test\Debug>codegen.exe //codegen.exe p1 [p2 ...] [>result.c] //Generate code int A(const char *a); 0==A("p1") 1==A("p2") ... //C:\test\Debug>codegen.exe aa ss ddd dd 33 dd //int A(const char *a) { //    if (0==strcmp(a,"aa")) return 0; //    if (0==strcmp(a,"ss")) return 1; //    if (0==strcmp(a,"ddd")) return 2; //    if (0==strcmp(a,"dd")) return 3; //    if (0==strcmp(a,"33")) return 4; //    if (0==strcmp(a,"dd")) return 5; //    return -1; //} // //c:\test\Debug>codegen.exe aa ss ddd dd 33 dd >result.c // //c:\test\Debug>type result.c //int A(const char *a) { //    if (0==strcmp(a,"aa")) return 0; //    if (0==strcmp(a,"ss")) return 1; //    if (0==strcmp(a,"ddd")) return 2; //    if (0==strcmp(a,"dd")) return 3; //    if (0==strcmp(a,"33")) return 4; //    if (0==strcmp(a,"dd")) return 5; //    return -1; //} //

user: user-0
content: 引用 12 楼 SXJIAKE 的回复:你这个写法无敌了：if(B=0) typedef dataType int; else if(B=1) typedef dataType float; 怎么说？

user: user-4
content: 引用 12 楼 SXJIAKE 的回复:你这个写法无敌了：if(B=0) typedef dataType int; else if(B=1) typedef dataType float; 使用类似的代码生成技术。

user: user-3
content: 你这个写法无敌了：if(B=0) typedef dataType int; else if(B=1) typedef dataType float;

user: user-0
content: 引用 8 楼 yangyunzhao 的回复:void*不可以吗？ 由于可能的类型包括数组，void* 表示不了数组的长度，所以void*可能不能使用。

user: user-0
content: 引用 9 楼 sholber 的回复:这种问题，笼统地说哪种方法好，是不正确的。得看你想做什么，准备怎么干， 才能确定一种最好的方法。 嗯，我是想确定一下有没有已经成熟的处理这种情况的技术、模板之类的，总比我自己关门造车要好一点。

user: user-5
content: 这种问题，笼统地说哪种方法好，是不正确的。得看你想做什么，准备怎么干， 才能确定一种最好的方法。

user: user-6
content: void*不可以吗？

user: user-0
content: 引用 4 楼 zhao4zhong1 的回复:参考各种Variant的实现。 谢谢

user: user-0
content: 引用 2 楼 sensal 的回复:谢谢你的回答、解惑，这类问题就只能通过使用union来解决吗（包括variant类型）？有没有其他的解决方案，比如说我上面描述第二个思路，当然我知道它行不通，但我还是想知道有没有其他的思路！ 谢谢

user: user-0
content: 引用 3 楼 jiqiang01234 的回复:如果可取的类型确定，可以用boost::variant<>，如果类型不固定，可以用boost::any 谢谢

user: user-7
content: 如果可取的类型确定，可以用boost::variant<>，如果类型不固定，可以用boost::any

user: user-0
content: 谢谢你的回答、解惑，这类问题就只能通过使用union来解决吗（包括variant类型）？有没有其他的解决方案，比如说我上面描述第二个思路，当然我知道它行不通，但我还是想知道有没有其他的思路！

user: user-8
content: 类型都不同，使用的时候不判断，可能么？ 参考Variant类型，内部是一个类型标志加union结构，但使用时还是要判断类型标志，这不可避免。

user: user-4
content: 参考各种Variant的实现。
user-0 提问: 无法运行请问错误在哪 c语言  谢谢

回复:
user: user-1
content: 改成：return 0; （你写成冒号了，需要英文下的分号）

user: user-2
content: 给分啊~~~都帮你解决问题 别人~~~

user: user-3
content: VS2015： #include<string.h> #include<stdio.h> int main(void) { 	char name[10], firstname[10]; 	int a, b; 	printf("input your name:\n"); 	scanf_s("%s", &name,10); 	printf("input your firstname:\n"); 	scanf_s("%s", &firstname,10); 	a = strlen(name); 	b = strlen(firstname); 	printf("%s %s.\n,%d %d.\n", name, firstname, a, b); 	printf("%s %s.\n,%d %d.\n", name, firstname, a, b); 	return 0; }  按照你的改了下 。 俺是小白 刚学个把月。 错了见谅哈。

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

user: user-5
content: return 0: 后面应该是分号

user: user-0
content: 好伤心，笔误。学艺不精啊
user-0 提问: 一个问题？？？？

回复:
user: user-1
content: 数组作为参数传递的时候，不能直接传的 一般传递是  数组名 和数组大小 分开写

user: user-2
content: 请那些喜欢将数组作为函数参数传来传去的码农思考一下为什么不把整个互联网内容当作函数参数传来传去呢？

user: user-3
content: VS中不支持C99的变长数组VLA

user: user-0
content: 求告之，求告知，求告知！！！
user-0 提问: win10系统中用Dev C++和Codeblocks的debug功能在输入数据时没显示

回复:
user: user-0
content: 引用 3 楼 zhao4zhong1 的回复:fflush(stdin);//Linux下好象不支持。  学习了。我是win系统。

user: user-1
content: fflush(stdin);//Linux下好象不支持。

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。 //请今后要用 int c; scanf("%c",&c); //时，都改为 char s[2]; int c; scanf("%1s",s); c=s[0]; 是这个原因吗？请问rewind(stdin)和fflush(stdin)是同样的效果吗？

user: user-1
content: 在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。 //请今后要用 int c; scanf("%c",&c); //时，都改为 char s[2]; int c; scanf("%1s",s); c=s[0];
user-0 提问: 超长整数赋值问题

回复:
user: user-1
content: 4357186184021382204544表示的是int类型  4357186184021382204544.0是double  4357186184021382204544.0f 是float  所以写成；double p = 4357186184021382204544.0;

user: user-2
content: 用string形式或者是数组做。 然后自己写+-*/的算法。
user-0 提问: 怎么开辟动态二位数组 

回复:
user: user-1
content: malloc

user: user-2
content: “多一少一”问题占程序员常犯错误的10%以上！ 避免“多一少一”问题的方法之一是将比如<10甚至<5的数代入程序片断，搬手指头心算验证一下程序到底应该写为 x、x-1、x+1中的哪个？ <、<=、==、>、>=中的哪个？

user: user-0
content: 根据赵四老师的回复改的，但是不对啊。。啊。。 #include <stdio.h> #include <stdlib.h> #include <malloc.h> int **newarr2d(int rows,int cols) {     int **p,i;       p=(int **)malloc(rows*sizeof(int *));     if (NULL==p) exit(1);     for (i=0;i<rows;i++) {         p[i]=(int *)malloc(cols*sizeof(int));         if (NULL==p[i]) exit(1);     }     return p; } void deletearr2d(int **p,int rows) {     int i;       for (i=0;i<rows;i++) {         free(p[i]);     }     free(p); } void  main() {     int **arr2d,i,j,r,c,**arr3d,m,n,o,p;        scanf("%d",&m);    scanf("%d",&n);       //在堆中开辟一个4×5的二维int数组     arr2d=newarr2d(m,n);     for (i=0;i<m;i++) {         for (j=0;j<n;j++) {            scanf("%d", arr2d[i][j]);         }     }        scanf("%d",&r);     scanf("%d",&c);      //在堆中开辟一个6×3的二维int数组     arr3d=newarr2d(r,c);     for (i=0;i<r;i++) {         for (j=0;j<c;j++) {             scanf("%d",arr3d[i][j]);         }     }   	scanf("%d",&o); 	scanf("%d",&p); 	for(i=o-1;i<r&&i<m;i++){ 		for(j=p-1;j<c&&j<n;j++){ 			arr2d[i][j]=arr3d[i][j]; 		} 	} 	for(i=0;i<m;i++) 	{ 		for(j=0;j<n;j++) 		{ 			printf("%d" ,arr2d[i][j]); 		} 		printf("\n"); 	}  	deletearr2d(arr2d,r);     deletearr2d(arr3d,r);       }

user: user-2
content: 仅供参考：#include <stdio.h> #include <stdlib.h> #include <malloc.h> int **newarr2d(int rows,int cols) {     int **p,i;      p=(int **)malloc(rows*sizeof(int *));     if (NULL==p) exit(1);     for (i=0;i<rows;i++) {         p[i]=(int *)malloc(cols*sizeof(int));         if (NULL==p[i]) exit(1);     }     return p; } void deletearr2d(int **p,int rows) {     int i;      for (i=0;i<rows;i++) {         free(p[i]);     }     free(p); } int main() {     int **arr2d,i,j,r,c;      r=4;     c=5;     //在堆中开辟一个4×5的二维int数组     arr2d=newarr2d(r,c);     for (i=0;i<r;i++) {         for (j=0;j<c;j++) {             arr2d[i][j]=i*c+j;         }     }     for (i=0;i<r;i++) {         for (j=0;j<c;j++) {             printf(" %2d",arr2d[i][j]);         }         printf("\n");     }     deletearr2d(arr2d,r);      r=6;     c=3;     //在堆中开辟一个6×3的二维int数组     arr2d=newarr2d(r,c);     for (i=0;i<r;i++) {         for (j=0;j<c;j++) {             arr2d[i][j]=i*c+j;         }     }     for (i=0;i<r;i++) {         for (j=0;j<c;j++) {             printf(" %2d",arr2d[i][j]);         }         printf("\n");     }     deletearr2d(arr2d,r);      return 0; } //  0  1  2  3  4 //  5  6  7  8  9 // 10 11 12 13 14 // 15 16 17 18 19 //  0  1  2 //  3  4  5 //  6  7  8 //  9 10 11 // 12 13 14 // 15 16 17 //
user-0 提问: 求大神帮我分析一下这段程序

回复:
user: user-1
content: matlab难道不能单步调试或添加输出语句输出变量值吗？

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

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

user: user-2
content: 编译报错 error: ‘SIG_ING’ undeclared (first use in this function) SIG_ING未声明 找找除了这里有SIG_ING其他地方还有没有.  能否看看 signal()函数

user: user-3
content: 是SIG_IGN，你写错了

user: user-4
content: 确定不是SIG_IGN。。。signal is ignored

user: user-5
content: error: ‘SIG_ING’ undeclared重装一个系统了

user: user-6
content: SIG_IGN   .....

user: user-0
content: 沃日你哥哟！！！！！！！！！！！！！！！！！！！！ 我他么真是条狗！！！！！！！！ 艹！！！！！！！！！！！！！！！！IGN！！！！！！！！！！！！！！！！！！！！！！！
user-0 提问: 散分＋快来报名“C语言指针与汇编内存地址”公开课

回复:
user: user-1
content: 抱歉，抱歉 其实VS2015,对C99的支持几乎是完备的,对C++11/14/17也是支持，只不过支持C17的部分内容。 至于C语言的版本演进是：1989年，ANSI发布了第一个完整的C语言标准——ANSI X3.159—1989，简称“C89”，不过人们也习惯称其为“ANSI C”。C89在1990年被国际标准组织ISO(International Organization for Standardization)一字不改地采纳，ISO官方给予的名称为：ISO/IEC 9899，所以ISO/IEC9899: 1990也通常被简称为“C90”。1999年，在做了一些必要的修正和完善后，ISO发布了新的C语言标准，命名为ISO/IEC 9899：1999，简称“C99”。[2]  在2011年12月8日，ISO又正式发布了新的标准，称为ISO/IEC9899: 2011，简称为“C11”。 C88是什么东东，也许是C语言的1.0版本吧，不知，请高人指点 这样说来，基于DOS操作系统16位的windows 1.0~3.0版的漏洞一定也不少O(∩_∩)O

user: user-1
content: 关于c88-c89的就让他过去吧，目前C标准是C12&C14正在使用，最新试用版是C17了，在VS2017中用到部分C17内容O(∩_∩)O。

user: user-2
content: 到底先有的蛋呢还是先有的机

user: user-3
content: 把所有的回复都看完了 还是没有看到那个小程序关于c88-c89的解说

user: user-4
content: 各位大神，能不能看看这个问题。 http://bbs.csdn.net/topics/391950873

user: user-0
content: 欢迎来评价： http://edu.csdn.net/course/comment/2344

user: user-0
content: 引用 132 楼 zhao4zhong1 的回复:听说本ID的公开课的回放视频迟迟不上线的原因是 CSDN课程的视频编辑被 将本ID的猥琐大叔形象PS成呆萌萝莉形象 的需求绞尽脑汁了。    刚看了一遍录像。 里面既没萝莉，也没大叔！

user: user-5
content: 老师，特地来接分了

user: user-0
content: 听说本ID的公开课的回放视频迟迟不上线的原因是 CSDN课程的视频编辑被 将本ID的猥琐大叔形象PS成呆萌萝莉形象 的需求绞尽脑汁了。

user: user-0
content: 新传送门在此： http://bbs.csdn.net/topics/391951993

user: user-6
content: 我就是来听课的。

user: user-0
content: 引用 124 楼 CCDDzclxy 的回复:[quote=引用 50 楼 zhao4zhong1 的回复:] [quote=引用 46 楼 CCDDzclxy 的回复:] 赵4老师   这个直播结束后，会有录像放出来吗？ 应该会有。但不排除： 技术故障导致录像失败 无证程序员导致录像丢失 猥琐赵4老师导致录像很难看 内容太敏感导致全球黑客联盟黑掉 含违规内容导致广电总局封杀 …… [/quote] 错过直播了... 赵4老师  该放录像了啊，等着呢~~~[/quote] 我也等着呢……

user: user-7
content: 犀利,太让人不懂.

user: user-8
content: 完整看完，觉得【均陵鼠侠 】有点需要人关心。。。。。。。

user: user-9
content: 前排强势围观

user: user-10
content: 引用 125 楼 zhao4zhong1 的回复:讲课比想象的累啊！ 你双手的老茧不是这样出来的吗？

user: user-0
content: 讲课比想象的累啊！

user: user-11
content: 引用 50 楼 zhao4zhong1 的回复:[quote=引用 46 楼 CCDDzclxy 的回复:] 赵4老师   这个直播结束后，会有录像放出来吗？ 应该会有。但不排除： 技术故障导致录像失败 无证程序员导致录像丢失 猥琐赵4老师导致录像很难看 内容太敏感导致全球黑客联盟黑掉 含违规内容导致广电总局封杀 …… [/quote] 错过直播了... 赵4老师  该放录像了啊，等着呢~~~

user: user-12
content: 支持楼主，干的漂亮！！

user: user-13
content: 直播课有录像吗，错过了，真想看看
user-0 提问: vc6.0的c语言程序高分求解！！！其中的错误怎么改，求解！！！！！各位大神帮帮忙！！！急！！！明明定义了说我们有定义，帮帮忙了谢谢

回复:
user: user-1
content: printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方，而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。  在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。 //请今后要用 int c; scanf("%c",&c); //时，都改为 char s[2]; int c; scanf("%1s",s); c=s[0];

user: user-0
content: 不是吧，竟然有，可能是我同学吧

user: user-2
content: 你确定你和这个不是同一个人？ http://bbs.csdn.net/topics/391942027
user-0 提问: 停车场管理系统运行出错，求大神

回复:
user: user-1
content: 你写这么多代码   很多人根本没空看  懂吗？？

user: user-2
content: 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。  代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。  printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方，而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。  在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。 //请今后要用 int c; scanf("%c",&c); //时，都改为 char s[2]; int c; scanf("%1s",s); c=s[0];

user: user-2
content: 输入的size太小了。

user: user-0

user: user-0
content: 谢谢老师指导 但是我查看了call stack 和watches 栈初始化有问题 不知道怎么办
user-0 提问: 一道有意思的C语言数组问题

回复:
user: user-1
content: 1：按string读取，按空格进行分割到vector,排序vector时写排序函数按长度排序，从排序好的vector的最后的那个串开始往前找与其相等长度的连续iterator，即为输出 2：做一个英文字符表，每读一个字符就设置相应字符表+1，最后扫描最大值

user: user-2
content: 字母计数就可以了，位图法，不多说。 单词的话，主要是去重复得遍历。 我们假定单词长度可以规定最长为50，反正我没见过超过50的长度。 长度1 单词1->单词2->单词3->....->NULL 长度2 单词4->单词5>单词6->....->NULL ..... 长度50 单词n->单词n+1->单词n+2->....->NULL

user: user-3
content: 引用 3 楼 user-4 的回复:英文字母，这个么，计数就可以了  楼主的意思是要看你怎么写吧，一看就是个新手遇到复杂一点的问题就短路了

user: user-4
content: 英文字母，这个么，计数就可以了

user: user-0
content: 引用 1 楼 user-4 的回复:用二叉树吧， 两个key 一个是 单词 一个是计数 每找到一个单词，插入二叉树 如果还需要知道每个单词的位置，为每个单词建立一个位置列表  新手驾驭不了，大神能否写出来让我学习一下？

user: user-4
content: 用二叉树吧， 两个key 一个是 单词 一个是计数 每找到一个单词，插入二叉树 如果还需要知道每个单词的位置，为每个单词建立一个位置列表
user-0 提问: 这种情况用c语言如何实现

回复:
user: user-1
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: %32[^\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: user-0
content: 引用 1 楼 lgbxyz 的回复:读取一行，然后每一行比较   #define NODE_SIG "node number      "  while (!feof(fp)) { fgets(line, line_size, fp); char* token; token = strstr(line, NODE_SIG ); if (token) printf("node number=%d\n". atoi(token+strlen(NODE_SIG))); }  额，能不能给出全代码啊

user: user-2
content: 读取一行，然后每一行比较   #define NODE_SIG "node number      "  while (!feof(fp)) { fgets(line, line_size, fp); char* token; token = strstr(line, NODE_SIG ); if (token) printf("node number=%d\n". atoi(token+strlen(NODE_SIG))); }
user-0 提问: 新手遇到问题，求指教

回复:
user: user-1
content: 应该是跟编译环境的配置有关，函数调用的没有问题；在Linux 测试没发现问题； 建议重新配置一下编译环境；或者找一下编译环境上的问题；

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

user: user-3
content: 修复或者重装试试
user-0 提问: 求一个C语言的编程

回复:
user: user-1
content: 是阶乘吗？？？

user: user-2
content: 好腻害 好腻害

user: user-3
content: 你的描述也是屌的不行，一会儿 55 个，一会儿 5 个的。

user: user-4
content: 引用 4 楼 黄黄k的回复:[quote=引用 1 楼 bailong_yu 的回复:] 每次都是乘1到5这五个数吗？ 不是1到55除（乘）1到55，我把他们放到数组里了。。。[/quote] 恭喜楼主+++++++++++

user: user-0
content: 引用 1 楼 bailong_yu 的回复:每次都是乘1到5这五个数吗？ 不是1到55除（乘）1到55，我把他们放到数组里了。。。

user: user-0
content: 已解决，谢谢各位，给你们代码参考 #include <stdio.h> #include<stdlib.h> int main() {     float a[55];     float b[55][55];           for (int i = 0; i < 55; i++)     {         scanf("%f",&a[i]);               }       for (int i = 0; i < 55; i++)     {         for (int j = 0; j < 55; j++)         {             b[i][j] = a[i] / a[j];         }     }       //输出结果     for (int i = 0; i < 55; i++)     {         for (int j = 0; j < 55; j++)         {             printf("%0.2f ", b[i][j]);         }         printf(";\n");     }        system("pause");     return 0; }

user: user-5
content: 假设你55个数存在num[55]变量里：   	int i, j; 	for(i = 0; i < 55; ++i) 		for(j = 0; j < 55; ++j) 			printf("%d\n", i * j);

user: user-4
content: 每次都是乘1到5这五个数吗？
user-0 提问: 杭电acm2017统计字符串的数字数

回复:
user: user-1
content: scanf里第一个参数加上\n是为了过滤空格、制表符、回车等输入，也就是说 scanf("%d\n", &i); printf("%d\n", i); 你输入一个数后，它是不会立即显示的，要等再接收到一个非（空格、制表符、回车）的输入scanf语句才结束。 但请注意的是，最后输入的那个非（空格、制表符、回车）的东西是不会被这个scanf读进来的，而是留在输入流里。 PS：这里的效果和后面加一个getchar的效果是一样的，只不过getchar只能过滤一个空白符， 而"%d\n"可以过滤掉多个连续的空白符，在有些场合下是不一样的

user: user-0
content: 引用 1 楼 qq423399099 的回复:scanf里第一个参数加上\n是为了过滤空格、制表符、回车等输入，也就是说 scanf("%d\n", &i); printf("%d\n", i); 你输入一个数后，它是不会立即显示的，要等再接收到一个非（空格、制表符、回车）的输入scanf语句才结束。 但请注意的是，最后输入的那个非（空格、制表符、回车）的东西是不会被这个scanf读进来的，而是留在输入流里。 PS：这里的效果和后面加一个getchar的效果是一样的，只不过getchar只能过滤一个空白符， 而"%d\n"可以过滤掉多个连续的空白符，在有些场合下是不一样的嗯，明白了，多谢