Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 谁能讲讲C语言中的命令行参数？

回复:
user: user-1
content: 项目、属性、配置属性、调试、命令参数：填写命令行参数。

user: user-0
content: 我包含了啊，而且没用命令行参数前，程序还能运行，不知怎么回事？求高手搭救，谢谢

user: user-0

user: user-2
content: 引用了头文件，没有给出对应的库文件，或者源代码 因此，找不到函数定义

user: user-2
content: 引用 7 楼 u014579402 的回复:_tprintf( TEXT("\r\n使用方法:\r\n") );这里TEXT是什么这是个宏 #if defined(UNICODE)||defined(_UNICODE) #define TEXT(x)  L##x #else #define TEXT(x) x #endif  _T ,TEXT 的定义都是一样的， 如果在 UNICODE 环境中，就是 UNICODE字符串，否则是 ASCII 或者 MBCS字符串 这是VC常用的宏

user: user-0
content: 错误	9	error LNK2019: 无法解析的外部符号 "double __cdecl GetAngle(double)" (?GetAngle@@YANN@Z)，该符号在函数 "bool __cdecl GeodesyBackward(double,double,double,double,double &,double &)" (?GeodesyBackward@@YA_NNNNNAAN0@Z) 中被引用	D:\Geodesy\Src\Geodesy\Geodesy.obj	Geodesy 错误	10	error LNK2019: 无法解析的外部符号 "double __cdecl GetRadian(double)" (?GetRadian@@YANN@Z)，该符号在函数 "bool __cdecl GeodesyBackward(double,double,double,double,double &,double &)" (?GeodesyBackward@@YA_NNNNNAAN0@Z) 中被引用	D:\Geodesy\Src\Geodesy\Geodesy.obj	Geodesy 为什么我用了命令行参数后会出现这些错误？谢谢大家

user: user-3
content: DOS年代运行程序都是输入命令行的，由常驻内存的command.com这个DOS下命令解释器（类似Linux下的sh、bash）解释执行 比如： edit  a1.txt dir  /a  /w edit.exe是外部命令，就是一个具体的程序名字，由command.com调用执行 dir是command.com的内部命令，直接执行它自身的部分代码 命令后面的就是命令的参数 如edit  a1.txt，argc==2, argv[0]=="edit", argv[1]=="a1.txt" 你也可以在命令行cmd（Win-R组合键，输入cmd运行）下运行你的程序，后面输入参数。  在Win7下假如你用VC，假如你的程序目录在D:\C\151023_t2，可执行文件在D:\C\151023_t2\Debug，你在资源管理器窗口里打开D:\C\151023_t2文件夹，按住Shift键然后右键点击Debug文件夹，出现右键菜单，选择【在此处打开命令窗口】，就出现一个黑色的命令行窗口，输入：dir【回车】可以看到 151023_t2.exe ，输入：151023_t2【回车】可以运行这个程序，输入：151023_t2  aa  bbb【回车】可以带参数运行这个程序，aa和bbb就是两个参数。

user: user-1
content: http://bbs.csdn.net/topics/390469280

user: user-2
content: Windows　下　还可以通过设置快捷方式　的某些参数。 执行　带命令行参数的　可执行文件

user: user-2
content: 命令行参数，可以在控制台　用命令方式　输入 一个可执行文件，对于操作系统来说，就是一个外部命令 也可以，通过　exec 系列函数调用在别的程序控制下　执行可执行文件 命令行参数　在exec 系列函数　的参数里传入 也可以用　于　shell 文件　作为其中的一个命令　执行 命令行参数就是　shell 文件 的一个语句的某一部分。 Ｄｏｓ, 下　批处理文件　.bat　 Windows　下　.bat,.cmd,.vbs,.js  unix，linux 下　sh命令文件　.sh 等等，都属于　这种　shell  脚本文件

user: user-4
content: 引用 3 楼 u014579402 的回复:编译好的程序叫test，又给他传了两个参数，分别是hello和world？这些是要自己写进去的吗？test在哪里写 test是生成的可执行程序

user: user-0
content: 编译好的程序叫test，又给他传了两个参数，分别是hello和world？这些是要自己写进去的吗？test在哪里写

user: user-5
content: http://blog.csdn.net/xiaocainiaoshangxiao/article/details/13996459

user: user-0
content: _tprintf( TEXT("\r\n使用方法:\r\n") );这里TEXT是什么

user: user-6
content: getopt

user: user-7
content: main函数传递两个参数，argc和argv。argc是int类型的，它表示的是命令行参数的个数。不许要用户传递，它会根据用户从命令行输入的参数个数，自动确定。argv是char**类型的，它的作用是存储用户从命令行传递进来的参数。它的第一个成员是用户运行的程序名字。  #include <stdio.h>   void main(int argc,char** argv)   {           printf("%d\n",argc);           printf("%s\n",argv[0]);           printf("%s\n",argv[1]);           printf("%s\n",argv[2]);   }    下面来看个程序：编译好的程序叫test，又给他传了两个参数，分别是hello和world
user-0 提问: C语言 递归算法求思路

回复:
user: user-1
content: “给定一个小点的输入，完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门！ 递归函数关注以下几个因素 ·退出条件 ·参数有哪些 ·返回值是什么 ·局部变量有哪些 ·全局变量有哪些 ·何时输出 ·会不会导致堆栈溢出

user: user-2
content: #include "stdafx.h" #include<stdlib.h> char b[27] = "abcdefghigklmnopqrstuvwxyz"; void p(char *a, int n,int index,int c) { 	if (n == index) { 		printf("("); 		for (int i = 0; i < n; i++) { 			if (i != 0) { 				printf(",%c", a[i]); 			} 			else { 				printf("%c", a[i]); 			} 		} 		printf(")"); 		return; 	} 	for (int i = c; i < 26 && n-index<=26-i; i++) {  		a[index] = b[i]; 		p(a, n,index+1,i+1); 	} }  int main() { 	char a[27]; 	for (int i = 1; i <= 26; i++) { 		p(a, i, 0, 0); 		printf("\n"); 	}  	 	system("pause");     return 0; }

user: user-3
content: 用可变数组，比较字符大小。问一句，用什么语言编程？

user: user-4
content: 必须按这样的顺序吗？还是列出所有子集就行？

user: user-5
content: 递归轮次为检查后续一个char的依据
user-0 提问: FILE* 怎么能够与内存中的数组关联上

回复:
user: user-1
content: 把你的数组写到一个临时文件中，再将这个临时文件的文件名传给库。

user: user-2
content: 这个库有源码就能，没有源码不行

user: user-0
content: 引用 2 楼 wozhaolala 的回复:引用 1 楼 user-2 的回复:fread()，把文件内容读到内存不是得，已经把文件读到内存了，现在为了使用库里的函数解析内存中的文件库里的函数是基于FILE*解析文件内容的，先在我要传入已经读到内存的文件，让该函数解析

user: user-0
content: 引用 3 楼 wozhaolala 的回复:引用 2 楼 wozhaolala 的回复:引用 1 楼 user-2 的回复:fread()，把文件内容读到内存不是得，已经把文件读到内存了，现在为了使用库里的函数解析内存中的文件库里的函数是基于FILE*解析文件内容的，先在我要传入已经读到内存的文件，让该函数解析文件在char类型数组里，其实也能不算文件，只是符合文件格式的一段内存数据而已

user: user-0
content: 引用 1 楼 user-2 的回复:fread()，把文件内容读到内存不是得，已经把文件读到内存了，现在为了使用库里的函数解析内存中的文件

user: user-2
content: fread()，把文件内容读到内存
user-0 提问: 关于calloc的内存分配问题

回复:
user: user-1
content: 应该是系统分配内存时，刚好将两个字符串地址分配的较近。  [root@localhost fu]# ./calloc  0xc77010 0xc77030  而strcpy的原理是“C语言标准库函数strcpy，把从src地址开始且含有'\0'结束符的字符串复制到以dest开始的地址空间。”这样就导致了内存被覆盖，b也就打印出了某个地址的字符串了。

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

user: user-3
content: 未定义异常，不是我们应该关注的事

user: user-4
content: 你应该就是单步调试，直至出现按下任意键继续的情况，这样你就知道为什么了，注意查看b中的内容

user: user-4
content: strcpy(a, "Graduate School of Information Science and Technology");  这行中，你只给 a 分配了20个字节的空间，strcpy(a,b)，是将b中的内容复制到a中，并且要求b的空间要小于a的存储空间，即如果a有50个字节空间，因此b的内容占得空间要小于50个字节，假设b的内容占用100个字节空间，使用strcpy(a,b) 的话，b中只有50个字节的内容会拷贝到a中，剩下的50个字节将被丢弃。这种情况下，会报内存异常 Abnormal memory 的错误。

user: user-0
content: 但是我的问题就是为何调试出来的b是“ology”，而打印在控制台的却是"cience and Technolog"。就是 为什么前边多了cience and Techn，而后边少了y。 。。。我是这个意思~一直搞不明白。

user: user-5
content: strcpy内存本来越界了啊，不要做这种后果不可预计的事。 a和b申请的内存块比较邻近而已，中间还有几个字节被其它占用了吧，明显少了“nformation ”
user-0 提问: crc校验的对象包括crc那个字段不？ 

回复:
user: user-1
content: 建议先学会使用抓包软件比如wireshark

user: user-2
content: 对第一个问题：刚百度了下CRC校验，我认为是不包括。 第二个不知道。
user-0 提问: 为什么if (i != 0 && j != 0){}和if(i==0&&j==0)continue;结果不一样

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

user: user-2
content: 同时为0的反 和    同时不会0 ，不是一样的

user: user-3
content: 基础布尔代数的运算:NOT(a AND b)等于(NOT a) OR (NOT b)

user: user-4
content: i != 0 && j != 0要i,j同时都不等于0 i==0&&j==0是要i,j同时都等于0才continue 如果i,j中有一个等于0，第一种情况是不会进{,,,,,},而第二种情况却是会执行一些代码的，不会被continue掉
user-0 提问: 求助HDOJ 1002为什么总是WA

回复:
user: user-1
content: 仅供参考：#include <stdio.h> #include <string.h> #define MAXLEN 1000 char a1[MAXLEN]; char a2[MAXLEN]; static int v1[MAXLEN]; static int v2[MAXLEN]; static int v3[MAXLEN]; int i,j,n,L,z; void main(void) {     scanf("%d",&n);     for (j=0;j<n;j++) {         scanf("%s%s",a1,a2);          L=strlen(a1);         for (i=0;i<L;i++) v1[i]=a1[L-1-i]-'0';          L=strlen(a2);         for (i=0;i<L;i++) v2[i]=a2[L-1-i]-'0';          for (i=0;i<MAXLEN;i++) v3[i]=v1[i]+v2[i];          for (i=0;i<MAXLEN;i++) {             if (v3[i]>=10) {                 v3[i+1]+=v3[i]/10;                 v3[i]=v3[i]%10;             }         }          printf("Case %d:\n", j+1);         printf("%s + %s = ", a1, a2);          z=0;         for (i=MAXLEN-1;i>=0;i--) {             if (z==0) {                 if (v3[i]!=0) {                     printf("%d",v3[i]);                     z=1;                 }             } else {                 printf("%d",v3[i]);             }         }         if (z==0) printf("0");          printf("\n");     } } //Sample Input //3 //0 0 //1 2 //112233445566778899 998877665544332211 // //Sample Output //Case 1: //0 + 0 = 0 //Case 2: //1 + 2 = 3 //Case 3: //112233445566778899 + 998877665544332211 = 1111111111111111110
user-0 提问: C语言三维数组赋值问题

回复:
user: user-1
content: int main(int argc, char *argv[]) { 	int i, j, k; 	int a[20][20][20]; 	for (i = 0; i < 20;i ++) 	for (j = 0; j < 20; j ++) 	for (k = 0; k < 20; k++) 		a[i][j][k] = -1; 	for (i = 0; i < 20; i++){ 		for (j = 0; j < 20; j++){ 			for (k = 0; k < 20; k++){ 				printf("%d ", a[i][j][k]); 			} 			printf("\n"); 		} 		printf("\n\n"); 	} return 0; } 不知道楼主程序时什么样，我这边是正常值，估计楼主的n赋值不正确吧。可以打印一下输入之后n的结果。

user: user-2
content: 仅供参考：//在堆中开辟一个3×4×5的3维int数组 #include <stdio.h> #include <malloc.h> int ***p; int i,j,k; void main() {     p=(int ***)malloc(3*sizeof(int **));     if (NULL==p) return;     for (i=0;i<3;i++) {         p[i]=(int **)malloc(4*sizeof(int *));         if (NULL==p[i]) return;         for (j=0;j<4;j++) {             p[i][j]=(int *)malloc(5*sizeof(int));             if (NULL==p[i][j]) return;         }     }     for (i=0;i<3;i++) {         for (j=0;j<4;j++) {             for (k=0;k<5;k++) {                 p[i][j][k]=i*20+j*5+k;             }         }     }     for (i=0;i<3;i++) {         for (j=0;j<4;j++) {             for (k=0;k<5;k++) {                 printf(" %2d",p[i][j][k]);             }             printf("\n");         }         printf("---------------\n");     }     for (i=0;i<3;i++) {         for (j=0;j<4;j++) {             free(p[i][j]);         }         free(p[i]);     }     free(p); } //  0  1  2  3  4 //  5  6  7  8  9 // 10 11 12 13 14 // 15 16 17 18 19 //--------------- // 20 21 22 23 24 // 25 26 27 28 29 // 30 31 32 33 34 // 35 36 37 38 39 //--------------- // 40 41 42 43 44 // 45 46 47 48 49 // 50 51 52 53 54 // 55 56 57 58 59 //---------------

user: user-3
content: 你肯定没有执行到初始化那句，自己单步调试进行检查

user: user-4
content: 可以把完整代码贴出来吗？
user-0 提问: 检验校验和程序

回复:
user: user-0
content: 谢谢大神指导

user: user-1
content: C语言类型转换不能这样写，那句改成：checksum=~((long)(sum>>16)+(long)(sum&0x0000ffff)); 就可以了 如果是C++，就可以像你的那种写法
user-0 提问: 跪求解释

回复:
user: user-1
content: 结果如下：  楼主是想知道为什么会得到这样的结果？（我这里以输入5为例） 第一个for循环，共循环5次，相当于5的5次方得到3125  for(i=1;i<=5;i++) 		d=d*n;  第二个for循环，循环3次 第一次，s=0+3125%10(s被赋值成5),d=3125/10(d被赋值成312) 第一次，s=5+312%10(s被赋值成7),d=312/10(d被赋值成31) 第一次，s=7+31%10(s被赋值成8),d=31/10(d被赋值成3) 所以return了8  for(i=1;i<=3;i++) {     s=s+d%10;     d=d/10; }

user: user-2
content: 解释什么？ 传值与传址 局部变量与全局变量 static 先搞清楚内存分配
user-0 提问: 请大神帮我看一下这个C哪里错了

回复:
user: user-1
content: 少了大括号。

user: user-2
content: 如果if或者else if后的语句有多句，那么需要打上大括号：   #include <stdio.h> #include <math.h> int main() { 	int a,b,c,d,del,q; 	scanf("%d%d%d",&a,&b,&c); 	d=b*b; 	del=d-4*a*c; 	q=2*a; 	float m; 	float n; 	if(a=0,b=0) 		printf("Input error!\n"); 	else if (a=0,b!=0) 		printf("x=%f",-c/b); 	else if (a!=0,del=0) 		printf("x1=x2=%f",-b/q); 	else if (a!=0,del>0) 	{ 		m=(-b+sqrt(del)/q); 		n=(-b-sqrt(del)/q); 		printf("x1=%f,x2=%f",m,n); 	} 	else  		m=(-b+sqrt(-del)/q); 	n=(-b-sqrt(-del)/q); 	printf("x1=%f,x2=%f",m,n); 	return 0; }
user-0 提问: 水仙花数 怎么我写的运行不出来

回复:
user: user-1
content: sum要清零，不然还是上一个数的结果   int main() { 	int a, c, d, x, i, sum=0;  	for (i=100; i<=999; i++) 	{ 		x = i;  		for (a=1; i/a!=0; a*=10)             //12行 		{ 			c = i / a; 			d = c % 10; //15行  12--15行为把一个三位数分为个位 十位 百位 并 			sum = sum + (int)pow(d, 3); 		} //17行     		if (sum == x) 			printf("%d\n", x);  		sum = 0;  //清零，不然还是上一个数的结果 	}  	return 0; }

user: user-2
content: # include "stdio.h" # include "math.h"  int main (){ 	int i,j,k,n; 	for ( i=100;i<999;i++ ) { 		j = (int)i/100; 		k = (int)(i%100)/10; 		n = i%10; 		 		if ( pow(j,3)+pow(k,3)+pow(n,3) == i) 		printf ("%d是水仙花数！\n",i); 	} }   初学者编写，请参考

user: user-3
content: sum=0要写到外层循环里吧
user-0 提问: 一个好奇怪好奇怪的问题？看我代码，求解！！！

回复:
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: user-2
content: 上面加上getchar()   getchar(); scanf("%c %d", &ch, &x);   不然你ch接收到的是上一次输入后的换行符 \n

user: user-0
content: 引用 3 楼 paschen 的回复:上面加上getchar()   getchar(); scanf("%c %d", &ch, &x);   不然你ch接收到的是上一次输入后的换行符 \n 我明白了

user: user-3
content: 最好的办法是加空格 scanf(" %c %d", &ch, &x);

user: user-4
content: 没啥问题啊，除非你输入Q 1之后没打回车

user: user-0
content: 引用 1 楼 paschen的回复:还要等接收到一个值给x，scanf("%c %d", &ch, &x);这句才算执行完 我输入Q.  1,1不是已经赋值给了x吗？

user: user-2
content: 还要等接收到一个值给x，scanf("%c %d", &ch, &x);这句才算执行完
user-0 提问: c++怎么设计按指定跳出返回到指定函数和怎么按任意键跳出返回到指定函数不用go

回复:
user: user-1
content: 引用 4 楼 tkin2 的回复:很感谢你的解答，大概知道你的意思，但不是我想要的那种，水平有限，没全看懂，换过一种方式问吧，跳出while和for循环经典的方式，或者你自己常用的方式有哪几种吗。可否贴出来看看。 break,return,goto,longjmp,throw

user: user-1
content: 仅供参考：#include <stdio.h> #include <setjmp.h> jmp_buf mark; int i=0; void c() {     printf( "c in\n");     if (1==i%2) longjmp( mark, i );     printf( "c out\n"); } void b() {     printf( "b in\n");     c();     printf( "b out\n"); } void a() {     printf( "a in\n");     b();     printf( "a out\n"); } void main( void ) {    int jmpret;    jmpret = setjmp( mark );    printf( "Start %d\n",jmpret);    if( jmpret == 0 ) {        printf( "First\n");        a();        i++;        a();    } else {        printf( "Second\n");    } } //Start 0 //First //a in //b in //c in //c out //b out //a out //a in //b in //c in //Start 1 //Second //  #include <iostream> using namespace std; struct MyStruct {     int Nodedata;     MyStruct *pLeft;     MyStruct *pRight; } s1,s2,s3,s4,s5,s6,s7,s8; void ashow(MyStruct * p) {     if (p != nullptr) {         ashow(p->pLeft);         ashow(p->pRight);         cout << p->Nodedata << endl;         if (p->Nodedata == 4) {             throw 1;//退出递归.直接返回.         }     } } int main() {     MyStruct *pRoot;//根      pRoot = &s1;     s1.Nodedata = 1;     s2.Nodedata = 2;     s3.Nodedata = 3;     s4.Nodedata = 4;     s5.Nodedata = 5;     s6.Nodedata = 6;     s7.Nodedata = 7;     s8.Nodedata = 8;      s1.pLeft = &s2;     s1.pRight = &s3;      s2.pLeft = &s4;     s2.pRight = &s5;      s3.pLeft = &s6;     s3.pRight = &s7;     try {         ashow(pRoot);     } catch (int err) {         cout<<"catch err "<<err<<endl;     }     return 0; } //4 //catch err 1 //

user: user-2
content: 一般小程序我都是嵌套一个循环的，打个比方： for (string st = "in"; st != "out";) 	{ 		/* -------*******------ */ 		getline(cin, st); 	} 但是感觉代码多了，这样做会比较复杂。

user: user-0
content: 很感谢你的解答，大概知道你的意思，但不是我想要的那种，水平有限，没全看懂，换过一种方式问吧，跳出while和for循环经典的方式，或者你自己常用的方式有哪几种吗。可否贴出来看看。

user: user-0
content: 先按任意键理解。现在最想知道是，怎么按自己输入的字母跳出；初学，表达不全见谅；上一级比如说，main()函数，从这一级回到mian()函数；

user: user-3
content: 一下子任意键一下子指定键，到底是任意还是指定？是我语文没学好还是你语文没学好？按任意键都返回了那你还输入处理什么东东？你所谓的上一级下一级又是什么？把下一级封装成一个函数不就得了么
user-0 提问: 请问这个怎么用的？怎么会错误语法？

回复:
user: user-1
content: 引用 7 楼 qq_34325718 的回复:[quote=引用 5 楼 yuelengdihai 的回复:] 楼上说的正确，name已经是地址了 好的谢谢，如何用microsoft Visual 2015C++如何将编码转化为EXE格式？[/quote]  点上面那个调试按钮，或者按F5

user: user-0
content: 引用 5 楼 yuelengdihai 的回复:楼上说的正确，name已经是地址了 好的谢谢，如何用microsoft Visual 2015C++如何将编码转化为EXE格式？

user: user-1
content: scanf("%s",name);   不要把name放在字符串里面

user: user-2
content: 楼上说的正确，name已经是地址了

user: user-3
content: scanf("%s",name);

user: user-0
content: 引用 1 楼 yuelengdihai 的回复:scanf("%s",&name); 还是错误的？ 0.0

user: user-0
content: 引用 楼主 qq_34325718 的回复:都是按照书上打的  为什么会错误？

user: user-2
content: scanf("%s",&name);
user-0 提问: 已知，一个int A, int B, int C三个变量，在不引入第四个变量的情况下，将B赋给A，将C赋给B，将A赋给C，怎样破？

回复:
user: user-1
content: 仅供参考：#include <stdio.h> #define SWAP(a,b) do ((&(a))!=(&(b)))?((a)^=(b)^=(a)^=(b)):((a)=(a)); while (0) char   *p1="1" ,*p2="2" ; char    c1=1   , c2=2   ; short   s1=1   , s2=2   ; int     i1=1   , i2=2   ; __int64 I1=1i64, I2=2i64; float   f1=1.0f, f2=2.0f; double  d1=1.0 , d2=2.0 ; void main() {     SWAP((int)p1,(int)p2);                printf("char *     %5s,   %5s\n",p1,p2);     SWAP(c1,c2);                          printf("char       %5d,   %5d\n",c1,c2);     SWAP(s1,s2);                          printf("short      %5d,   %5d\n",s1,s2);     SWAP(i1,i2);                          printf("int        %5d,   %5d\n",i1,i2);     SWAP(I1,I2);                          printf("__int64 %5I64d,%5I64d\n",I1,I2);     SWAP(*(int     *)&f1,*(int     *)&f2);printf("float      %5g,   %5g\n",f1,f2);     SWAP(*(__int64 *)&d1,*(__int64 *)&d2);printf("double    %5lg,  %5lg\n",d1,d2);      SWAP(c1,c1);     printf("%d\n",c1); } //char *         2,       1 //char           2,       1 //short          2,       1 //int            2,       1 //__int64     2,    1 //float          2,       1 //double        2,      1 //2

user: user-2
content: 加减法可能溢出，溢出时结果不确定，所以不建议使用

user: user-3
content: 讲道理，给个不引入第四个变量的理由？

user: user-4
content: 先说两个变量不引入第三个变量怎么交换，3个之间交换可参照：  方法一：     a=a+b;     b=a-b;     a=a-b;  方法二： 	a=a^b;  	b=a^b;  	a=a^b;

user: user-5
content: AB互换，然后BC互换。互换两个整形变量有个全靠 ^ 的装逼方法 x^=y;y^=x;x^=y; 用这个就可以不用引入其他变量了。

user: user-6
content: 既然两个能换，三个也是同样，n个也是。。。

user: user-0
content: 引用 1 楼 wang0635 的回复:#include <stdio.h> int main() { 	int		a, b, c;  	scanf("%d%d%d", &a, &b, &c); 	printf("a = %d, b = %d, c = %d.\n", a, b, c);  	a ^= b, b ^= a, a ^= b;		//a <-> b 	b ^= c, c ^= b, b ^= c;		//b <-> c  	printf("a = %d, b = %d, c = %d.\n", a, b, c);      return 0; } 好吧，我服了，为什么你会想到这样

user: user-2
content: #include <stdio.h> int main() { 	int		a, b, c;  	scanf("%d%d%d", &a, &b, &c); 	printf("a = %d, b = %d, c = %d.\n", a, b, c);  	a ^= b, b ^= a, a ^= b;		//a <-> b 	b ^= c, c ^= b, b ^= c;		//b <-> c  	printf("a = %d, b = %d, c = %d.\n", a, b, c);      return 0; }
user-0 提问: 新手请教一个练习题目！

回复:
user: user-0
content: 恩，看明白了，非常感谢你们！

user: user-1
content: 11可以通过转换为整型，或者使用floor函数得到，68可以通过原数减去上一步得到的结果之后再乘100得到（乘100是单位换算成分）

user: user-2
content: #include <stdio.h> int main() {     double    a = 0;   //一个星期的薪水     double    b = 0;   //每天工作时间     double    c = 0;   //计算出来的平均小时工资率     printf("请输入一个星期的薪水和每天工作时间：");     scanf("%lf%lf", &a, &b);     c = a / 7 / b;     printf("your average hourly pay rate is %d dollars and %d cents.\n", (int)c, (int)((c - (int)c) * 100));     return 0; }
user-0 提问: 一个关于转义字符的疑问。。

回复:
user: user-0
content: 引用 2 楼 qq_29120981 的回复:第一个，三位八进制足以表示所有ASCII码 第二个，不是 第三个，语法上没有错误，'\0014'前三个数字和\构成转义字符，后一个4单独，这和'ab'类似，标准没有规定它的值到底是'a'呢还是'b'呢，全依赖编译器实现。  谢谢回答，经过strlen()实测，为什么‘\0014’就可以解析为两个字符(\001和4)，而‘\x111’就会提示溢出，结果仍是长度为1？

user: user-0
content: 引用 1 楼 wang0635 的回复:标准中说： 6.4.4.4 Character constants Syntax octal-escape-sequence:     \ octal-digit     \ octal-digit octal-digit     \ octal-digit octal-digit octal-digit hexadecimal-escape-sequence:     \x hexadecimal-digit     hexadecimal-escape-sequence hexadecimal-digit 看来，八进制的最多3位，十六进制可以有多位  第二个问题，负数如果是用补码，编程无符号数解释时，上面给出的结果就是对的  用strlen("\0014")得到2，用strlen("\x111")编译器却提示溢出，结果仍为1，而这是为什么？

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

user: user-2
content: 溢出处理是由实现定义的，不同的编译器自己决定

user: user-3
content: 引用 4 楼 yq_forever 的回复:[quote=引用 1 楼 wang0635 的回复:] 标准中说： 6.4.4.4 Character constants Syntax octal-escape-sequence:     \ octal-digit     \ octal-digit octal-digit     \ octal-digit octal-digit octal-digit hexadecimal-escape-sequence:     \x hexadecimal-digit     hexadecimal-escape-sequence hexadecimal-digit 看来，八进制的最多3位，十六进制可以有多位  第二个问题，负数如果是用补码，编程无符号数解释时，上面给出的结果就是对的  用strlen("\0014")得到2，用strlen("\x111")编译器却提示溢出，结果仍为1，而这是为什么？[/quote] C++03中，8进制转义字符可由1~3个数字组成，都是合法的；16进制转义字符的数字不限个数（>=1），并不是1~2位。 大部分编译器char都是八位，x111超过了上限，编译器会报错，可以用宽字符类型代替，改成这样：  (L"\x111")

user: user-0
content: 引用 5 楼 小灸舞的回复:[quote=引用 4 楼 yq_forever 的回复:] [quote=引用 1 楼 wang0635 的回复:] 标准中说： 6.4.4.4 Character constants Syntax octal-escape-sequence:     \ octal-digit     \ octal-digit octal-digit     \ octal-digit octal-digit octal-digit hexadecimal-escape-sequence:     \x hexadecimal-digit     hexadecimal-escape-sequence hexadecimal-digit 看来，八进制的最多3位，十六进制可以有多位  第二个问题，负数如果是用补码，编程无符号数解释时，上面给出的结果就是对的  用strlen("\0014")得到2，用strlen("\x111")编译器却提示溢出，结果仍为1，而这是为什么？[/quote] C++03中，8进制转义字符可由1~3个数字组成，都是合法的；16进制转义字符的数字不限个数（>=1），并不是1~2位。 大部分编译器char都是八位，x111超过了上限，编译器会报错，可以用宽字符类型代替，改成这样：  (L"\x111") [/quote] 谢谢～

user: user-4
content: 第一个，三位八进制足以表示所有ASCII码 第二个，不是 第三个，语法上没有错误，'\0014'前三个数字和\构成转义字符，后一个4单独，这和'ab'类似，标准没有规定它的值到底是'a'呢还是'b'呢，全依赖编译器实现。

user: user-2
content: 标准中说： 6.4.4.4 Character constants Syntax octal-escape-sequence:     \ octal-digit     \ octal-digit octal-digit     \ octal-digit octal-digit octal-digit hexadecimal-escape-sequence:     \x hexadecimal-digit     hexadecimal-escape-sequence hexadecimal-digit 看来，八进制的最多3位，十六进制可以有多位  第二个问题，负数如果是用补码，编程无符号数解释时，上面给出的结果就是对的
user-0 提问:  新手刚学C，对于指针有点问题求大神解答

回复:
user: user-1
content: *a就是b,字数补丁

user: user-2
content: 情况1里，b赋值为0之后。即指针a所指向的内存区域的元素值为0了。即*a==0。所以，b=*a即b=0。

user: user-0
content: 来人啊
user-0 提问: 求助

回复:
user: user-1
content: 原理就是要把基础打扎实啊

user: user-2
content: *的优先级高于++,()的优先级高于*

user: user-3
content: 引用 1 楼 qq423399099 的回复:这个一般用在字符串拷贝上，strcpy内部实现就是这样的 ++以后取*就是逐字节拷贝，先让2个指针都向后移一位，然后第二个字符串取出对应的字符赋给第一个字符串对应的字符 拷贝完一个字符就判断一下是否等于'\0'(如果是的话说明fov指针指向的字符串已经到结尾了) 楼上正解，你可以理解为 char a[100], b[100]; for(int i = 0; i < 100; i ++) {     a[i] = b[i];     if('\0' == b[i])     {         break;     } }

user: user-4
content: 这个一般用在字符串拷贝上，strcpy内部实现就是这样的 ++以后取*就是逐字节拷贝，先让2个指针都向后移一位，然后第二个字符串取出对应的字符赋给第一个字符串对应的字符 拷贝完一个字符就判断一下是否等于'\0'(如果是的话说明fov指针指向的字符串已经到结尾了)
user-0 提问: 信任求解vs2015，无法打开源文件

回复:
user: user-1
content: 我也遇到这样的问题，怎么解决的，我把“”换成<>也不行

user: user-0
content: 谢谢各位，已解决，新人问一下只能每天发帖赚积分吗？

user: user-2
content: 用""而不是<>

user: user-3
content: 楼主用双引号 #include"SqStack.h"

user: user-4
content: 换成 #include "SqStack.h"
user-0 提问: symbol "private: static unsigned long const * const CryptoPP::Blowfish::s_init"

回复:
user: user-1
content: 错误问题解决了么？解决了给大家说说啊。

user: user-2
content: C++ 中 private 的类是私有变量，不能继承，只能在所属类中进行修改，在类外不能进行修改

user: user-3
content: private: static 删除。 并且确认定义在类外。
user-0 提问: C语言中文件操作之fseek遇到问题，致使读取数据失败

回复:
user: user-0
content: 引用 2 楼 user-4 的回复:这个是我邮箱1058375583@qq.com 感谢您的回复，问题已经解决，是因为结构体的对齐补全问题，下面这个网址中的文章给出了详细的解释，对于本程序，只要添加了#pragma pack（1）便可以解决问题。http://www.cnblogs.com/luxiaoxun/archive/2012/11/09/2762438.html

user: user-0
content: 引用 5 楼 lgbxyz 的回复:因为还有结构体对齐产生的补齐字节，不是简单偏移就能得到正确值。 最好是整体读。 谢谢您的指导。忘了考虑结构体的补齐了确实。整体读觉得有点冗余，所以试试这个

user: user-0
content: 引用 4 楼 liehu232 的回复:写的是一个结构体，你却想读出字符串，应该读出结构体 首先感谢指导。我是觉得如果读出结构体的话，有很多的内容是不需要的只要两项，所以想这样

user: user-1
content: 推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。  不要把 fopen("...","...");fscanf,fprintf,fgets,fgetc,fclose //读时把\r\n替换成\n，写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fseek,ftell,fread,fwrite,fgetc,fclose //不作以上替换，遇到\x1a仍继续读;读写的内容当字节看待 弄混了

user: user-2
content: 因为还有结构体对齐产生的补齐字节，不是简单偏移就能得到正确值。 最好是整体读。

user: user-3
content: 写的是一个结构体，你却想读出字符串，应该读出结构体

user: user-1
content: 为什么不用ftell呢？  When the "r+", "w+", or "a+" access type is specified, both reading and writing are allowed (the file is said to be open for “update”). However, when you switch between reading and writing, there must be an intervening fflush, fsetpos, fseek, or rewind operation. The current position can be specified for the fsetpos or fseek operation, if desired.

user: user-4
content: 介不介意吧这个程序和存的员工信息的这个txt发给我，我看了看，觉得跟我用的scanf有些不一样

user: user-4
content: 这个是我邮箱1058375583@qq.com
user-0 提问: 超级基础的c语言问题

回复:
user: user-1
content: 引用 6 楼 qq_34274794的回复:[quote=引用 5 楼 finish_dream 的回复:] 函数缺少类型，要用return 0那就用int main(),要用空的void main()就把//return 0 不太懂[/quote] 这么说吧，函数的作用是把传入的参数(也可以没有参数)处理的到一个返回值，当没有返回值的时候函数的类型就可以定义为void

user: user-2
content: 主函数类型 int main（）

user: user-0
content: 引用 1 楼 Liu_Jack 的回复:是什么问题呢？编译出错？还是结果不符合预期？ 不符合预期

user: user-0
content: 谢谢大家的建议  ，我的代码的确是可以运行，但是得到的结果与预期的结果差别很大 听说要在main（）前加int，void因为是初学者不是很懂，希望能详细一点

user: user-0
content: 引用 5 楼 finish_dream 的回复:函数缺少类型，要用return 0那就用int main(),要用空的void main()就把//return 0 不太懂

user: user-1
content: 函数缺少类型，要用return 0那就用int main(),要用空的void main()就把//return 0

user: user-3
content: 你的代码均可以正常编译执行

user: user-4
content: main函数没有类型，后面有return0，应该是int型

user: user-5
content: 是什么问题呢？编译出错？还是结果不符合预期？
user-0 提问: 求助！在C语言中这个程序输入ABCDEFG123456为什么运行不出结果？

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

user: user-2
content: 不知道楼主所说的运行不出结果是指什么，楼主把程序的目的说明一下吧。按照代码的结果是有数的，就是1楼说的246

user: user-3
content: 出错了点中断，通过调用堆栈、变量窗口等观察分析原因

user: user-4
content: 有结果啊，下标位偶数，编码也是偶数的，246
user-0 提问: 求助，不知道为什么后面的字符不能覆盖前面的。

回复:
user: user-1
content: if (('A' <= *temp && *temp <= 'Z')  || ('a' <= *temp && *temp <= 'z'))

user: user-0
content: 谢谢大神的指导，新手上路，还有很多地方会犯比较低级的错误，见谅见谅哈。

user: user-2
content: LZ有几个问题： 1.if(*temp>='A'||*temp<='Z'||*temp>='a'||*temp<='z')判断错误，这样所有的字符都会满足条件 2.else分支里应当将所有后续字符都向前移一位 3.字符串结尾判断应当用 '\0' 改正后代码如下  #include<stdio.h> #include<iostream> using namespace std;  void deleteother(char *p) { 	char *temp = p; 	int j = 0; 	for(;j<100;j++) 	{ 		if((*temp >= 'A' && *temp <= 'Z') || (*temp >= 'a' && *temp <= 'z')) 		{	 			temp++; 			continue; 		} 		else if(*temp == '\0') //已经到字符串尾部 			break; 		else  		{ 			int i; 			for(i = 0; i < 100; i++)//将当前字符后面的所有字符都向前移一位 			{ 				*(temp + i) = *(temp + i + 1); 				if (*(temp + i) == '\0') 					break; 			}	 		}	 	} }  int main() { 	char str[100]; 	printf("Please input the string : "); 	gets(str); 	deleteother(str); 	printf("\noutput: %s\n", str); 	system("pause"); 	return 0; }  运行结果：
user-0 提问: 关于递归调用的指针参数问题

回复:
user: user-1
content: “给定一个小点的输入，完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门！ 递归函数关注以下几个因素 ·退出条件 ·参数有哪些 ·返回值是什么 ·局部变量有哪些 ·全局变量有哪些 ·何时输出 ·会不会导致堆栈溢出

user: user-2
content: 递归一直没得到退出，直到栈溢出

user: user-0
content: 引用 2 楼 liehu232 的回复:递归函数没有出口，在if i==j 里面加上return退出函数  的确是没有出口的问题，但不是在if（i==j）里加return，条件应该单独写出来，  if (left>right) return ;  前面的判断条件也要改了，  while(p[i]<=temp&&j>i) 才对

user: user-0
content: 引用 1 楼 zhangxiangDavaid 的回复:快速排序 http://blog.csdn.net/zhangxiangdavaid/article/details/25436609  内容很丰富，我好好看看。谢谢

user: user-3
content: 递归函数没有出口，在if i==j 里面加上return退出函数

user: user-4
content: 快速排序 http://blog.csdn.net/zhangxiangdavaid/article/details/25436609
user-0 提问: 求一道随机置换算法的时间复杂度

回复:
user: user-1
content: 仅供参考：#include <stdio.h> #include <stdlib.h> #include <time.h> int d[6]; int i,n,a,b,t; int c,j; void main() {     srand(time(NULL));     printf("shuffle 0..n-1 demo\n");     for (n=1;n<=5;n++) {/* 测试1～5个元素 */         printf("_____n=%d_____\n",n);         j=1;         for (c=1;c<=n;c++) j=j*c;/* j为n! */         j*=n*2;         for (c=1;c<=j;c++) {/* 测试n*2*n!次 */             for (i=0;i<n;i++) d[i]=i;/* 填写0～n-1 */             for (i=n;i>0;i--) {/* 打乱0～n-1 */                 a=i-1;b=rand()%i;                 if (a!=b) {t=d[a];d[a]=d[b];d[b]=t;}             }             printf("%04d:",c);             for (i=0;i<n;i++) printf("%d",d[i]);             printf("\n");         }     }     printf("shuffle 1..n demo\n");     for (n=1;n<=5;n++) {/* 测试1～5个元素 */         printf("_____n=%d_____\n",n);         j=1;         for (c=1;c<=n;c++) j=j*c;/* j为n! */         j*=n*2;         for (c=1;c<=j;c++) {/* 测试n*2*n!次 */             for (i=1;i<=n;i++) d[i]=i;/* 填写1～n */             for (i=n;i>1;i--) {/* 打乱1～n */                 a=i;b=rand()%i+1;                 if (a!=b) {t=d[a];d[a]=d[b];d[b]=t;}             }             printf("%04d:",c);             for (i=1;i<=n;i++) printf("%d",d[i]);             printf("\n");         }     } }

user: user-2
content: 可以花费 O(N)的空间复杂度，换来比较次数为 O(N) 的时间复杂度

user: user-2
content: 假设随机数是均匀分布的，则随机数重复的概率是 1/N 已经生成的数据是某个数的概率各为1/N  最后一个数必为 所有数中从没有出现的数概率为1 这种比较方式的时间复杂度计算要用到概率论 很麻烦

user: user-2
content: 随机置换算法，本身其实也是 O(N)的，不过不能比较，一比较就麻烦了

user: user-3
content: o (n2) 第n个数要和前面n-1个数比较总比较次数是n*(n-1)/2 次
user-0 提问: xml按指定语句拆分

回复:
user: user-1
content: 使用Response节点来分是不对的，除非你真的能确定它是root，否则人家改个名字，你就抓瞎了。  从你目前的规则来看，要分的话，基于两点：  1.<?xml?>标志 2.根节点

user: user-2
content: #include <stdio.h> #include <string.h> char s[]= "<?xml version=\"1.0\" encoding=\"utf-8\"?>" "<Response>" "<Item>   内容1略 </Item>" "</Response>" "<?xml version=\"1.0\" encoding=\"utf-8\"?>" "<Response>" "<Item>   内容2略 </Item>" "</Response>" "<?xml version=\"1.0\" encoding=\"utf-8\"?>" "<Response>" "<Item>   内容3略 </Item>" "</Response>"; char *p,*q,c,L; char gap[80]="</Response>"; int i; int main() {     L=strlen(gap);     q=s;     i=0;     while (1) {         p=strstr(q,gap);         if (p) {             c=p[L];             p[L]=0;             printf("%d [%s]\n",i,q);             i++;             p[L]=c;             q=p+L;         } else break;     }     return 0; } //0 [<?xml version="1.0" encoding="utf-8"?><Response><Item>   内容1略 </Item></Response>] //1 [<?xml version="1.0" encoding="utf-8"?><Response><Item>   内容2略 </Item></Response>] //2 [<?xml version="1.0" encoding="utf-8"?><Response><Item>   内容3略 </Item></Response>] //

user: user-0
content: 大神能不能给个示例代码，小弟新手，非常感谢

user: user-3
content: 数据不用保存，C++的库一般有两个参数，一个是begin, 一个是end。 如果你用的C++库只有一个字符串参数，辣鸡库，换一个(或者用std::string中转一下)。 遍历完一个xml, 送到解析器里面就行了。
user-0 提问: 新人求助！用codeblock写代码 碰到了关于int的问题。

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

user: user-2
content: n = getchar() - '0';  数值与数值的字符不是一回事

user: user-3
content: getchar()读取的是stdio的字符流，返回值是读取的第一个字符的ASCII值，如果你输入的是12，那它n就等于’1‘的ASCII值49（C语言里，char型可以有int型值）. 不过看图上你输入的是2，所以n等于‘2’的ASCII值50，这是getchar的用法问题，还有你的while不知道是干啥的。

user: user-4
content: getchar()得到的 '2'不是2; 应减去'0';  n = getchar()-'0';
user-0 提问: 遇到这样一个面试题很无赖，可是怎么解释，请大虾指明下出处。

回复:
user: user-0
content: 感谢两位及时解答，明白了

user: user-1
content: 参考楼上意见：  #define OFFSET(type, field)    ((LONG)(LONG_PTR)&(((type *)0)->field))  结构体地址：0X12345678 - OFFSET(结构体变量， a)

user: user-2
content: 去搜下offset的写法就差不多了。

user: user-1
content: 重点不知这个a是在结构体中的第几个变量，而且标准好像也没有规定第一个变量一定要放在最前面
user-0 提问: 随机算法解非线性方程组

回复:
user: user-0
content: 引用 1 楼 user-2的回复:楼主是不是在调用函数之前定义函数f的时候只写了一个参数，而实现写了两个参数？类似这样 double f(double *mp); int main() {  fx = f(mp, n); } double f(double *mp, int n); 使用函数前没申明，谢谢你的帮助

user: user-0
content: 引用 2 楼 LubinLew的回复:函数没有声明返回值， 使用前应该先声明函数 呃呃，是的，弄了一上午终于弄好了，谢谢

user: user-1
content: 函数没有声明返回值， 使用前应该先声明函数

user: user-2
content: 楼主是不是在调用函数之前定义函数f的时候只写了一个参数，而实现写了两个参数？类似这样 double f(double *mp); int main() {  fx = f(mp, n); } double f(double *mp, int n);
user-0 提问: 请问栈的LIFO (Last in first out) 是什么意思？

回复:
user: user-1
content: 详细解释看这里： http://blog.csdn.net/zhangxiangdavaid/article/details/26819603

user: user-0
content: 原来是最后进来的最先出来的意思，谢谢。

user: user-2
content: 就一个后进先出的方式。
user-0 提问: 问一个关于键盘钩子的问题

回复:
user: user-1
content: GetCurrentDirectory The GetCurrentDirectory function retrieves the current directory for the current process.   DWORD GetCurrentDirectory(   DWORD nBufferLength,  // size, in characters, of directory buffer   LPTSTR lpBuffer       // pointer to buffer for current directory );   Parameters nBufferLength  Specifies the length, in characters, of the buffer for the current directory string. The buffer length must include room for a terminating null character.  lpBuffer  Pointer to the buffer for the current directory string. This null-terminated string specifies the absolute path to the current directory.  Return Values If the function succeeds, the return value specifies the number of characters written to the buffer, not including the terminating null character.   If the function fails, the return value is zero. To get extended error information, call GetLastError.   If the buffer pointed to by lpBuffer is not large enough, the return value specifies the required size of the buffer, including the number of bytes necessary for a terminating null character.   QuickInfo   Windows NT: Requires version 3.1 or later.   Windows: Requires Windows 95 or later.   Windows CE: Unsupported.   Header: Declared in winbase.h.   Import Library: Use kernel32.lib.   Unicode: Implemented as Unicode and ANSI versions on Windows NT.  See Also File I/O Overview, File Functions, CreateDirectory,GetSystemDirectory,GetWindowsDirectory, RemoveDirectory, SetCurrentDirectory
user-0 提问: 请教各位，有几道题一直理解不了。。

回复:
user: user-0
content: 引用 4 楼 qq423399099 的回复:[quote=引用 3 楼 yq_forever 的回复:] [quote=引用 2 楼 qq423399099 的回复:] 一个个说，先说第一个，一维数组名+1，其实就是指针移到下一个数组元素之前，而在内存中移动的字节数会隐式 转换成str + 1 * sizeof( char)会在内存中移动1个字节，所以str+1移动到了数组的第二个字符之前，指向了第二个字符'B' //这里以LZ给的数组为例啊，如果是int的数组，就要sizeof(int) ，一次+1移动4个字节 第二个问题，LZ要看清啊第一个if中是a=0而不是a==0,所以不会进第一个if判断，也不满足第二个if判断，所以执行了else中的y+=y 得到了y=20,所以选A 第三个问题，#define P(a,b)  strcpy(a,b)可以这样用的，但感觉并没有什么用   谢谢解答~ 第一个问题中，str+1也就是p指向了B,那么*（p+1）不就向后再移一位，指向'\0'了？ 第三个问题，刚写了个程序验证了一下，好像不合法[/quote] 我脑残了，原来“AB”前面有一个空格，那么str+1也就是p指向了第二个字符也就是A，所以*（p+1）就向后再移一位指向B 那个宏定义我这里可以的，LZ要么贴一下自己的代码和错误 [/quote]  原来有个空格！！我擦这什么题啊。。 是有一道选择题，这个宏是错误选项，可能是题目不严谨吧。。又试了一下，我程序刚忘了加<string.h>头文件了哈哈，总犯这种低级错误。。  非常感谢你的回答，谢谢啦

user: user-1
content: 引用 3 楼 yq_forever 的回复:[quote=引用 2 楼 qq423399099 的回复:] 一个个说，先说第一个，一维数组名+1，其实就是指针移到下一个数组元素之前，而在内存中移动的字节数会隐式 转换成str + 1 * sizeof( char)会在内存中移动1个字节，所以str+1移动到了数组的第二个字符之前，指向了第二个字符'B' //这里以LZ给的数组为例啊，如果是int的数组，就要sizeof(int) ，一次+1移动4个字节 第二个问题，LZ要看清啊第一个if中是a=0而不是a==0,所以不会进第一个if判断，也不满足第二个if判断，所以执行了else中的y+=y 得到了y=20,所以选A 第三个问题，#define P(a,b)  strcpy(a,b)可以这样用的，但感觉并没有什么用   谢谢解答~ 第一个问题中，str+1也就是p指向了B,那么*（p+1）不就向后再移一位，指向'\0'了？ 第三个问题，刚写了个程序验证了一下，好像不合法[/quote] 我脑残了，原来“AB”前面有一个空格，那么str+1也就是p指向了第二个字符也就是A，所以*（p+1）就向后再移一位指向B 那个宏定义我这里可以的，LZ要么贴一下自己的代码和错误

user: user-0
content: 引用 2 楼 qq423399099 的回复:一个个说，先说第一个，一维数组名+1，其实就是指针移到下一个数组元素之前，而在内存中移动的字节数会隐式 转换成str + 1 * sizeof( char)会在内存中移动1个字节，所以str+1移动到了数组的第二个字符之前，指向了第二个字符'B' //这里以LZ给的数组为例啊，如果是int的数组，就要sizeof(int) ，一次+1移动4个字节 第二个问题，LZ要看清啊第一个if中是a=0而不是a==0,所以不会进第一个if判断，也不满足第二个if判断，所以执行了else中的y+=y 得到了y=20,所以选A 第三个问题，#define P(a,b)  strcpy(a,b)可以这样用的，但感觉并没有什么用   谢谢解答~ 第一个问题中，str+1也就是p指向了B,那么*（p+1）不就向后再移一位，指向'\0'了？ 第三个问题，刚写了个程序验证了一下，好像不合法

user: user-1
content: 一个个说，先说第一个，一维数组名+1，其实就是指针移到下一个数组元素之前，而在内存中移动的字节数会隐式 转换成str + 1 * sizeof( char)会在内存中移动1个字节，所以str+1移动到了数组的第二个字符之前，指向了第二个字符'B' //这里以LZ给的数组为例啊，如果是int的数组，就要sizeof(int) ，一次+1移动4个字节 第二个问题，LZ要看清啊第一个if中是a=0而不是a==0,所以不会进第一个if判断，也不满足第二个if判断，所以执行了else中的y+=y 得到了y=20,所以选A 第三个问题，#define P(a,b)  strcpy(a,b)可以这样用的，但感觉并没有什么用

user: user-0
content: 呃 图片变态了一点，请别介意。。
user-0 提问: ，高手求助，定义int len = length_list(pHead)；下面的语句不执行，下面不能输出链表的长度，以及进行其他函数

回复:
user: user-1
content: int length_list(PNODE pHead)  {  PNODE p = pHead->pNext;  int len = 0;   while (NULL != p);  //dead loop  {  ++len;  p = p->pNext;  }  return len;  }

user: user-2
content: length_list 函数中while循环后面加了；所以成死循环了

user: user-3
content: 按F11
user-0 提问: CPU：400MHZ , 256MB内存，需要十秒加载完， 请教从哪字符串转换为数值处理250万条数据能再帮忙优化下么？

回复:
user: user-1
content: 引用 3 楼 mysticboy 的回复:int i3 = (BlackProCard_recordTable[i2].CardID[0] - '0') * 1000 + (BlackProCard_recordTable[i2].CardID[1] - '0') * 100 + (BlackProCard_recordTable[i2].CardID[2] - '0') * 10 + (BlackProCard_recordTable[i2].CardID[3] - '0');   改了下， 2秒内， 原来 十秒 分享下哈

user: user-0
content: int i3 = (BlackProCard_recordTable[i2].CardID[0] - '0') * 1000 + (BlackProCard_recordTable[i2].CardID[1] - '0') * 100 + (BlackProCard_recordTable[i2].CardID[2] - '0') * 10 + (BlackProCard_recordTable[i2].CardID[3] - '0');   改了下， 2秒内， 原来 十秒

user: user-2
content: 多线程处理？

user: user-3
content: 字符串数值是否有大小范围？如果有，可以直接查表映射，不用调用字符串函数
user-0 提问: 关于c语言数组

回复:
user: user-1
content: 专门写一个函数用于申请和释放用户的数据空间   #include <stdlib.h> #include <stdio.h>  int *test(int *a, int src, int des) {     int i = 0;     int *b = (int *)malloc(sizeof(int) * des);     for(i = 0; i < des; i ++)     {         b[i] = i;     }     free(a);     return b; }  int main(int argc, char *argv[]) {     int *a;     int i;     int *b = (int *)malloc(sizeof(int) * 4);     int src = 4, des = 5;     a = test(b, src, des);     for(i = 0; i < des; i ++)     {         printf("%d ", a[i]);     }     return 0; }  仅供楼主参考

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: user-3
content: C99好像是有变长数组VLA  不然在需要改变大小时重新分配内存，然后复制数据到新内存，释放旧内存  或者自己实现一个类似C++STL中的vector、list之类的容器，然后之后使用这个容器

user: user-4
content: int a[];//
user-0 提问: 求高手翻译qsort函数，每一步作用都要

回复:
user: user-1
content: 自己搜如何单步调试的博文或教学视频会吗？

user: user-0
content: 引用 7楼赵4老师 的回复:VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时候。 （Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。）不行啊，

user: user-1
content: VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时候。 （Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。）

user: user-0
content: 引用 3楼赵4老师 的回复:“给定一个小点的输入，完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门！ 递归函数关注以下几个因素 ·退出条件 ·参数有哪些 ·返回值是什么 ·局部变量有哪些 ·全局变量有哪些 ·何时输出 ·会不会导致堆栈溢出这代码里有指针吗 哪个

user: user-0
content: 引用 3楼赵4老师 的回复:“给定一个小点的输入，完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门！ 递归函数关注以下几个因素 ·退出条件 ·参数有哪些 ·返回值是什么 ·局部变量有哪些 ·全局变量有哪些 ·何时输出 ·会不会导致堆栈溢出什么意思？咋跟踪？

user: user-0
content: 引用 2楼paschen 的回复:你要先懂得快速排序的原理，网上很多这方面的博客讲解，也可以自己看书我懂啊 但是这代码不太正常

user: user-2
content: 你要先懂得快速排序的原理，网上很多这方面的博客讲解，也可以自己看书

user: user-3
content: 快速排序 网上资料一堆，自己查。 实在不会就直接用qsort函数   #include <stdlib.h>  void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *));

user: user-1
content: “给定一个小点的输入，完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门！ 递归函数关注以下几个因素 ·退出条件 ·参数有哪些 ·返回值是什么 ·局部变量有哪些 ·全局变量有哪些 ·何时输出 ·会不会导致堆栈溢出
user-0 提问: 请问这个用C语言写的堆排序算法错在哪里

回复:
user: user-1
content: 堆排序 http://blog.csdn.net/zhangxiangdavaid/article/details/30069623

user: user-0
content: [code=c#include<stdio.h> #include<math.h>  int left(int i) {	return (i*2); }    int right(int i) {	return (i*2+1); }  void exchange(int A[],int i,int j) {	int temp;  	temp=A[i-1]; A[i-1]=A[j-1]; A[j-1]=temp; }  void MAX_HEAPIFY(int A[10],int i,int length,int heapsize) {	int l,r,largest;   	l=left(i); r=right(i);  	if(l<=heapsize && A[l-1]>A[i-1]) 		largest=l; 	else 		largest=i; 	if(r<=heapsize && A[r-1]>A[i-1]) 		largest=r;  	if(i!=largest)  	{	exchange(A,i,largest); 		MAX_HEAPIFY(A,largest,length,heapsize); 	}   }  void BUILD_HEAP(int A[10],int length,int heapsize) {	for(int i=floor(length/2);i>=1;i--) 	MAX_HEAPIFY(A,i,length,heapsize); }  void HEAPSORT(int A[10],int length,int heapsize) {	BUILD_HEAP(A,length,heapsize); 	for(int i=length;i>1;i--) 	{	exchange(A,1,heapsize--);  		MAX_HEAPIFY(A,1,length,heapsize); 	} }  int main() {	int A[10]={12,1,5,2,3,8,6,7,19,15},length=10,heapsize=10;    	HEAPSORT(A,length,heapsize);  	for(int i=0;i<10;i++) 	printf("%d ",A[i]); }][/code]
user-0 提问: fopen打开文件失败

回复:
user: user-1
content: 楼主可以贴个代码么？就说fopen打开文件失败这个让人猜原因么。

user: user-2
content: 检查什么原因导致的，可能的情况这里有详细说明：http://en.cppreference.com/w/c/io/fopen

user: user-3
content: 如果是E盘下a.txt文件，LZ不妨写上完整路径fopen("E:\\a.txt", "r");

user: user-0
content: 文件路径错了
user-0 提问: 新人求解

回复:
user: user-1
content: 1、１、l、ｌ、I、Ｉ、|、│、

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-0
content: 谢谢各位的帮助  我是看教材上的%lf    我以为是If   结果是Lf      谢谢大家

user: user-2
content: 贴代码上来。

user: user-3
content: 应该是 小写L    lf

user: user-4
content: 楼主上面第一个程序scanf中输入的是1f么？第二个是lf？

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

user: user-5
content: 可能是编译器的问题   double类型一般是用%lf 输出读入（楼楼前边的scanf就是用%lf） 但是下面的printf（)输出函数用%f  可能一个编译器可以调节这种错误 编译器“帮助”你调正，而其中一个编译器没有这种功能。我觉得是这样。

user: user-3
content: 检查第一个程序你r的值是多少
user-0 提问: 关于顺序表的基本运算

回复:
user: user-0
content: 引用 1 楼 qq423399099 的回复:LZ有几个问题，现在说一下： 1.第88行scanf("%d",&n);改为scanf("%d%*c",&n); //%*c是匹配掉输入缓冲区里遗留的回车符， 否则a[0]将读到回车符，LZ不信可以打印一下a[0] 2.第90行scanf("%c",&a[i]);改为scanf("%c%*c",&a[i]); //同样的道理%*c是匹配掉输入缓冲区里每个字符相隔的空格以及最后的一个回车符，LZ不信的话也可以自己打印验证 PS：按照LZ原来的写法输入5回车符，输入缓冲区读走了5，还剩\n,又输入a b c d e\n,输入缓冲区变成了\na b c d e\n 然后开始字符数组赋值，a[0]='\n',a[1]='a',a[2]=' ',a[3]='b',a[4]=' '，所以LZ打印出来这样的结果 3.ListInsert函数也有问题，改为如下这样：  bool ListInsert(SqList *L,int i,ElemType e) { 	int j; 	if(i<1||i>L->length+1) 		return false; 	i--; 	for(j=L->length;j>i;j--) 		L->data[j]=L->data[j-1]; 	L->data[i]=e; 	L->length++; 	return true; }  说明：LZ必须将插入位置之后的元素都向后移一个位置以后，再插入新的元素 三处改正后结果：    非常感谢！！！

user: user-1
content: LZ有几个问题，现在说一下： 1.第88行scanf("%d",&n);改为scanf("%d%*c",&n); //%*c是匹配掉输入缓冲区里遗留的回车符， 否则a[0]将读到回车符，LZ不信可以打印一下a[0] 2.第90行scanf("%c",&a[i]);改为scanf("%c%*c",&a[i]); //同样的道理%*c是匹配掉输入缓冲区里每个字符相隔的空格以及最后的一个回车符，LZ不信的话也可以自己打印验证 PS：按照LZ原来的写法输入5回车符，输入缓冲区读走了5，还剩\n,又输入a b c d e\n,输入缓冲区变成了\na b c d e\n 然后开始字符数组赋值，a[0]='\n',a[1]='a',a[2]=' ',a[3]='b',a[4]=' '，所以LZ打印出来这样的结果 3.ListInsert函数也有问题，改为如下这样：  bool ListInsert(SqList *L,int i,ElemType e) { 	int j; 	if(i<1||i>L->length+1) 		return false; 	i--; 	for(j=L->length;j>i;j--) 		L->data[j]=L->data[j-1]; 	L->data[i]=e; 	L->length++; 	return true; }  说明：LZ必须将插入位置之后的元素都向后移一个位置以后，再插入新的元素 三处改正后结果：
user-0 提问: 数据结构顺序栈的基本操作，小白第一步卡主 了

回复:
user: user-1
content: 原来的代码中的第二个函数的参数改为引用也是可以的，主要是为了能传递地址

user: user-2
content: struct test *s;  	InitStack(s);   没分配内存

user: user-0
content: #include<stdio.h> struct test { 	int *top, *base; 	int stacksize; }; void InitStack(struct test *s) { 	(*s).base = (int *)malloc(100 * sizeof(int));  	(*s).top = (*s).base; 	(*s).stacksize = 100; } int main() { 	struct test s; 	InitStack(&s); } 这样就可以了，不知道原因啊， #include<stdio.h> struct test { 	int *top, *base; 	int stacksize; }; void InitStack(struct test *s) { 	(*s).base = (int *)malloc(100 * sizeof(int));  	(*s).top = (*s).base; 	(*s).stacksize = 100; } int main() { 	struct test *s; 	InitStack(s); } 然而这样就不不可以了，求解释

user: user-2
content: InitStack(struct test s)  改成指针，
user-0 提问: 整数划分算法

回复:
user: user-1
content: “给定一个小点的输入，完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门！ 递归函数关注以下几个因素 ·退出条件 ·参数有哪些 ·返回值是什么 ·局部变量有哪些 ·全局变量有哪些 ·何时输出 ·会不会导致堆栈溢出
user-0 提问: 在Visual studio 里有个关于C的编译问题，，应该很简单，但就是不知道哪里出错了

回复:
user: user-1
content: prinft拼错了，你少了一个f

user: user-2
content: 我这里把print("%.0f", b);改成printf("%.0f", b);就能编译了

user: user-3
content: 个人建议除了上面的f外，定义变量的时候记得初始，随便给个数字都可以，不初始化的话有时候会出现一些奇怪的错误，

user: user-0
content: 倒数第三行。。。。。。。。

user: user-0
content: 为什么要添第三行啊，大神

user: user-4
content: #include<stdio.h>  #include<math.h>  int main()  {  float a, b;  do  {  printf("Please input a number between 0 and 1000");  scanf("%f", &a);  } while (a <= 0 || a >= 1000);  b = sqrt(a);  print("%.0f", b);  return 0;  }
user-0 提问: 判断下列程序是否正确(纯C语言)

回复:
user: user-1
content: static 是程序生存期，自动变量是函数生存期。

user: user-1
content: 试试 static char a[]="GOOD";

user: user-2
content: 或者试试：const char* a="GOOD";

user: user-3
content: [root@localhost fu]# gcc -o const const.c  const.c: 在函数‘gen’中: const.c:6: 警告：函数返回局部变量的地址

user: user-4
content: 编译是没有问题，不过你返回的是一个局部数组变量的地址，函数执行完就销毁了，之后再使用将是不确定行为，可能导致之后得到你不想要的结果或者程序崩溃

user: user-5
content: 不正确啊，返回的是一个局部变量的地址，就算加了const也没用啊，只是在gen函数范围内不可修改而已，gen函数结束以后，a指向的地址的内容已经不确定了，我这里VS跑出来的结果是乱码
user-0 提问: PE加壳软件源码  对‘额外数据’的处理好像有错误

回复:
user: user-1
content: 引用 4 楼 u013315260 的回复:此贴结束啦。我也来自问自答吧。 书上源码 和 网上资料 对于“额外数据” 的概念，都是限于 在最后一个段的后面 的数据，就是 末段 地址PointerOfRawData + 末段大小RawDataSize ！= 文件大小。 然而我提出的理论 是 在没一个段后 都存在额外数据。那就是 某段地址PointerOfRawData + 某段大小RawDataSize ！= 下一段地址PointerOfRawData。 我瞎咧咧一句：这样可能会导致无法定位下一段的开始地址。

user: user-0
content: 此贴结束啦。我也来自问自答吧。 书上源码 和 网上资料 对于“额外数据” 的概念，都是限于 在最后一个段的后面 的数据，就是 末段 地址PointerOfRawData + 末段大小RawDataSize ！= 文件大小。 然而我提出的理论 是 在没一个段后 都存在额外数据。那就是 某段地址PointerOfRawData + 某段大小RawDataSize ！= 下一段地址PointerOfRawData。

user: user-0
content: 引用 2 楼 user-2 的回复:// 问题就在ReadFile这里，在上面一个循环中，文件指针指向了 最后一个段的 首地址 在上面一个循环中 文件指针不是指向了最后一段的末尾了 如果文件大小大于最后一个段的末地址，读取的正好是额外的数据 不太懂  您的意思呀。  额外数据 是存在于  各个段之间的吧？ 而不是 只存在于 文件末尾的吧！ 如果这样的话  就应该 搜索每个段的大小 多的部分 复制下来，最后再放到 文件末尾吧？

user: user-2
content: // 问题就在ReadFile这里，在上面一个循环中，文件指针指向了 最后一个段的 首地址 在上面一个循环中 文件指针不是指向了最后一段的末尾了 如果文件大小大于最后一个段的末地址，读取的正好是额外的数据

user: user-1
content: 去看雪论坛逛逛。
user-0 提问: 在tcp/ip模型中，服务器端如何检测客户端是否保持连接？

回复:
user: user-1
content: 引用 3 楼 truexf 的回复:tcp协议本身支持一个keepalive检测的。你去看下setsockopt里面的相关相关选项。  keep-alive  遇到不支持keep-alvie 的proxy ，反而会造成连接断开。

user: user-2
content: tcp协议本身支持一个keepalive检测的。你去看下setsockopt里面的相关相关选项。

user: user-3
content: 常见的长连接服务端，对一个tcp连接的处理是，记录上一次读写时间，超过一定时间就主动关闭。  所谓的探测连接是否存在的方法很多，关键是看你要解决什么问题。所以这里只给出业界服务框架常用的处理方法，细节你自己揣摩。

user: user-1
content: 服务端发送心跳包给客户端，  客户端回应心跳包  服务端连续3次接收不到，就认为断开
user-0 提问: 求C语言大神帮忙！！！！在下菜鸟求教

回复:
user: user-1
content: 应该跟楼主的编译器有关吧，估计VC6.0做了什么处理。我在Centos上打印的也是奇怪的字符。

user: user-2
content: 相由心生

user: user-3
content: gei dian分

user: user-4
content: 引用 4 楼 sinat_33492610 的回复:[quote=引用 2 楼 paschen的回复:]不可打印字符打印出来的形状不确定的 一楼的图显示的不是出现对应的字符了吗？而且如果是不确定的字符，为什么我试了几遍编译输出的结果都是一样的？不好意思请帮我解答一下。[/quote]  不同情况下可能不同

user: user-0
content: 引用 5 楼 ooolinux的回复:你的本义是打印回车换行符吗？ 不是，我的本义是想看看输出\xhh这样格式的怎么使用，回车符的ascii码值应该不是16吧

user: user-4
content: 不可打印字符打印出来的形状不确定的

user: user-5
content: 你的本义是打印回车换行符吗？

user: user-6
content: 我这里打印出来都是三角，不管是在一个程序里分三条语句打印还是像LZ一样分3次每次打印一句都是这样的结果  \x10是表示16进制的10也就是10进制的16，相当于\16 这里打出的三角是asscii码

user: user-0
content: 引用 2 楼 paschen的回复:不可打印字符打印出来的形状不确定的 一楼的图显示的不是出现对应的字符了吗？而且如果是不确定的字符，为什么我试了几遍编译输出的结果都是一样的？不好意思请帮我解答一下。

user: user-0
content: 引用 1 楼 小灸舞的回复:我这里打印出来都是三角，不管是在一个程序里分三条语句打印还是像LZ一样分3次每次打印一句都是这样的结果  \x10是表示16进制的10也就是10进制的16，相当于\16 这里打出的三角是asscii码  哦哦我懂了，但是我想也想知道为什么在我的编译器上会出现这样的字符？
user-0 提问: 已停止工作是什么鬼？

回复:
user: user-1
content: 按照楼主的程序敲了一遍（楼主好省事，也不说贴哥源码看看），没遇到楼主说的问题，只不过结果不正确而已。 #include <stdlib.h> #include <stdio.h> #include <conio.h>  #define DENSITY 62.4  int main(int argc, char *argv[]) { 	double weight, volume; 	int size, letters; 	char name[40];  	printf("Hi!what's your first name?\n"); 	scanf_s("%s", name, 40); 	printf("$s, what's your weight in pounds?\n", name); 	scanf_s("%f", &weight); 	size = sizeof(name); 	letters = strlen(name); 	volume = weight / DENSITY; 	printf("Well, %s, your volume is %2.2f cubic feet.\n", name, volume); 	printf("Also, your first name has %d letters.\n", letters); 	printf("and we have %d bytes to store it in.\n", size); 	getchar(); 	return 0; }

user: user-2
content: 一行一行的打印  看哪部份出问题，编译器不同，有时结果也不一样  这样问也没什么意义

user: user-3
content: printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方，而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。 #include <stdlib.h> #include <stdio.h>  #define DENSITY 62.4  int main(int argc, char *argv[]) {     double weight, volume;     int size, letters;     char name[40];      printf("Hi!what's your first name?\n");     scanf_s("%s", name, 40);     printf("%s, what's your weight in pounds?\n", name);     scanf_s("%lf", &weight);     size = sizeof(name);     letters = strlen(name);     volume = weight / DENSITY;     printf("Well, %s, your volume is %2.2lf cubic feet.\n", name, volume);     printf("Also, your first name has %d letters.\n", letters);     printf("and we have %d bytes to store it in.\n", size);     getchar();     return 0; }

user: user-4
content: LZ将scanf_s("%s", name);改为scanf_s("%s", name, 40);试试 scanf_s多的那个参数用以指定字符串参数的长度，用以避免一些安全隐患。 不加40那个参数的话，你的name是读不到正确的输入进来的字符串的

user: user-0
content: 改过以后还是这个样子，本质问题到底在哪？

user: user-5
content: 一个 %s 打成了 $s 一个scanf对double应该用 %lf 但用了 %f

user: user-0
content: 补充：运行后就是这个情况
user-0 提问: 代码求解

回复:
user: user-1
content: 首先 if(t<1||t>20)         return 0; 这句，异常退出不要返回0，0是正常退出的标志，用-1，1什么的都可以； 其次你的数组分配得太大了，差不多100k，有些服务器会有限制，运行时间和空间的限制，在这种 不知道需要多少内存的情况下用动态内存，这是最好的做法。 算法应该没什么问题。贴代码的时候最好把题目也贴出来，不然别人看半天看不懂你的代码会很痛苦。

user: user-2
content: 我大致瞄了一眼，发现你把int i=XXX这样的东西写进了FOR循环里，一定会报错的，我遇到过，
user-0 提问: 某公司的任职考试编程题，有兴趣的可以来挑战下

回复:
user: user-1
content: 单独题目是不行的，还必须提供测试数据， 如果测试数据，自己搜集的话 四个小时估计够呛，除非做过，或者是高手

user: user-0
content: 没办法搞PPT出来，只能自己描述，没有图看起来比较恼火，原谅下！其实PPT理解题目都要花1小时。