Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 请高手解答return的各种用法

回复:
user: user-1
content: return的作用不用多说。麻烦的是如何返回各种各样的类型的数据。 这篇文章总结的不全，但大部分场景都有了： http://www.ilanever.com/article/sitedetail.html?id=264

user: user-2
content: 有时可以用来退出多重循环。

user: user-3
content: return 退出函数

user: user-4
content: int fun() return fun();

user: user-5
content: 可以终止函数运行

user: user-6
content: 引用 1 楼 u013545836 的回复:这难道也很能玩出什么新花样？ 我也是这种感觉，无非就是return后面带不带参数，带的是变量、常量还是表达式

user: user-4
content: return 后面可以接返回值，也可以不接返回值，都是返回上一层，退出该层。

user: user-7
content: return 顾名思义——返回。就是从一个函数里（返回）退出出来。 如果return的后面可以带值也可以不带，若不带值就是直接退出当前函数，函数内的剩余代码就不会再被继续执行。 若带值，也是从return该行跳出当前函数，函数内剩余代码不再执行。此外带回去一个值给调用此函数的函数。

user: user-8
content: 我只知道可以有返回值，可以结束一个函数，这个lz可以搜到啊——http://wenku.baidu.com/link?url=jE5OTQ38b-3DlTOr7n6-2_2_rG6UuPwGFyCiOj9NCv4tdOS-8jUH3Be3FatfHuwEy1DF_ErBnpYMLgMvRQgxcpiECXJZnx30KKBIWwZ2Fye

user: user-9
content: // 1 void func1(...) {     if (...)     {            return;     } }  //2 type func2(...) {        if (...)         {             return type(NG);         }          return type(OK); }

user: user-10
content: 这难道也很能玩出什么新花样？
user-0 提问: 【请教】【10进制】【16进制】【字节】【双字】【转换】

回复:
user: user-1
content: 负数，前面肯定是fffff,要想去掉，和很简单 让 这个数 与 上 0x000000ff 代码如下  outNun=sourceNum & 0x000000ff

user: user-2
content: 你定义的是int型吧

user: user-0
content: 引用 2 楼 wwwzys 的回复:负数，前面肯定是fffff,要想去掉，和很简单 让 这个数 与 上 0x000000ff 代码如下  outNun=sourceNum & 0x000000ff 你是对的，
user-0 提问: 关于指针的强制类型转换问题

回复:
user: user-1
content: char * lp=new char[40]; 	char * lpchar=lp; 	lpchar++; 	short * lpshort=(short *)lp; 	lpshort++; 	int * lpint=(int *)lp; 	lpint++; 这一段C++代码经编译后是这样的：  push    eax push    offset s_ITTRCore_code  push    28h call    operator new[](uint,char const *,int) add     esp, 0Ch mov     [ebp+var_104], eax  ;char * lp=new char[40]; mov     ecx, [ebp+var_104] mov     [ebp+var_14], ecx   ; mov     eax, [ebp+var_14] mov     [ebp+var_20], eax   ;char * lpchar=lp; mov     eax, [ebp+var_20] add     eax, 1               mov     [ebp+var_20], eax mov     eax, [ebp+var_14] mov     [ebp+var_2C], eax   ;short * lpshort=(short *)lp; mov     eax, [ebp+var_2C] add     eax, 2 mov     [ebp+var_2C], eax mov     eax, [ebp+var_14] mov     [ebp+var_38], eax   int * lpint=(int *)lp; mov     eax, [ebp+var_38] add     eax, 4 mov     [ebp+var_38], eax 编译器自动换算了。

user: user-1
content: 这是编译器的事情，在进行指针类型转换的时候，只不过告诉了编译器，指针是指向什么类型的，然后进行指针运算的时候，编译器就按照类型来计算。  比如在计算指针+n的时候，编译器实际上是计算了+n*类型大小。

user: user-2
content: 指针有效的部分是一个地址。根据地址是无法判断指针类型的。 根据指针类型，可以判断指针运算的伸缩。 变量在声明的时候已经确定了类型。

user: user-3
content: 指针代表指向数据的首地址，指针类型指示了从首地址开始的字节数量。
user-0 提问: 这是啥错误？

回复:
user: user-1
content: 对的,预编译和编译的问题，预编译的东西不能依赖编译期间的东西； 同样，编译期间的语句也不能依赖运行期的，如定义int b=3;int a[b];一样

user: user-2
content: sizeof是编译阶段处理的，#if是预编译阶段，知道这个就好.

user: user-3
content: 正如LS所说，预编译问题。  即使你写成    int a = sizeof(int);  #if 2 == a #endif  也是不行的！

user: user-4
content: 引用 楼主 u013921360 的回复: 建议直接复制内容问，这样省得各位大神不屑于回答你。 你这个代码能这么写吗？我是没这么做过。 #if #endif是预处理指令，意味在sizeof还没被计算之前执行的，所以你这样写会报错。
user-0 提问: 向函数传递的值为何会改变

回复:
user: user-0
content: 其实我的意思是这样的

user: user-1
content: 是想散分吗？！

user: user-2
content: 你传入的是数组的值，和i有什么关系呢？i经过循环累加后变成5了，循环结束，打印i，结果很正常啊

user: user-3
content: i++执行了5次
user-0 提问: 通过JNI调用SO动态链接库的问题

回复:
user: user-0
content: 引用 1 楼 cangyingzhijia 的回复:*(void **)(&_THUserID) = dlsym(aslib, "_THUserID"); 这个地方会找不到符号，最好是先判断它是否为空~~ 是不是没有使用extern "C" 声明函数， 可以用nm看看so里面是不是没有这个符号存在  nm发现： _ZN7CDBScan12THUserIDE6FRMode

user: user-0
content: 请朋友们转到 http://bbs.csdn.net/topics/390739648这个贴子，这个我不全了整个编写过程。

user: user-0
content: 引用 3 楼 buyong 的回复:自己看《程序员自我修养》，不用重复发帖  因为这个帖子中例子没全，所以又发送了一边帖子。

user: user-1
content: 自己看《程序员自我修养》，不用重复发帖

user: user-0
content: 引用 1 楼 cangyingzhijia 的回复:*(void **)(&_THUserID) = dlsym(aslib, "_THUserID"); 这个地方会找不到符号，最好是先判断它是否为空~~ 是不是没有使用extern "C" 声明函数， 可以用nm看看so里面是不是没有这个符号存在 以下是整个例子过程  1.有个C++的动态链接库：libLGM.so，里面有 _SayHelloID(int task)函数 -------------- 2.通过C语言调用C++库函数 Test.c #include <stdio.h>  #ifdef __cplusplus extern "C" {  #endif    int callSayHelloID(int task)   {    //程序提示我java: symbol lookup error: ./libTest.so: undefined symbol: _SayHelloID     return _SayHelloID(task);//libLGM.so动态库中的一个函数   }  #ifdef __cplusplus } #endif  3.将Test.c生成libTest.so ------------------------ 3.编写符合JNI规范的C，hello.c #include <jni.h> #include <string.h> #include <stdio.h> #include <stdlib.h> #include <dlfcn.h> #include "comHello.h"  JNIEXPORT jint JNICALL Java_com_Hello_sysHello(JNIEnv *env, jobject obj){  	void *imglib; 	char (*test)(int);//指向函数的指针 	int imghandle;  	imglib = dlopen("./libTest.so", RTLD_LAZY);//打开libTest.so库 	 	//函数指针指向C语言的callSayHelloID函数 	*(void **)(&test) = dlsym(imglib, "callSayHelloID");//最终目的是调用C++的libLGM.so中的_SayHelloID函数 	test(1);//其实就是 _SayHelloID(task);//libLGM.so动态库中的一个函数     	return 1; }  执行这个符合JNI规范的C,程序运行的时候提示我： java: symbol lookup error: ./libTest.so: undefined symbol: _SayHelloID

user: user-2
content: *(void **)(&_THUserID) = dlsym(aslib, "_THUserID"); 这个地方会找不到符号，最好是先判断它是否为空~~ 是不是没有使用extern "C" 声明函数， 可以用nm看看so里面是不是没有这个符号存在
user-0 提问: putchar()是函数还是宏？

回复:
user: user-1
content: 引用 楼主 u013921360 的回复:书上有句话： putchar函数定义于stdio.h中，尽管它的内容比较长，但它是作为一个宏实现。 什么意思？ 就是说我们用的时候都是宏的形式

user: user-2
content: 宏的版本 #define getchar()         getc(stdin) #define putchar(_c)       putc((_c),stdout) #define fgetc(_stream)     (--(_stream)->_cnt >= 0 \                 ? 0xff & *(_stream)->_ptr++ : _filbuf(_stream)) #define putc(_c,_stream)  (--(_stream)->_cnt >= 0 \                 ? 0xff & (*(_stream)->_ptr++ = (char)(_c)) :  _flsbuf((_c),(_stream))) #define getc(_stream)    fgetc(_stream)

user: user-3
content: 最终是函数的,封皮是宏，

user: user-4
content: _CRTIMP int __cdecl putchar(int);

user: user-5
content: lz可以看看这里——http://blog.csdn.net/tsaiyong_ahnselina/article/details/14209419

user: user-6
content: 引用 楼主 u013921360 的回复:书上有句话： putchar函数定义于stdio.h中，尽管它的内容比较长，但它是作为一个宏实现。 什么意思？  可以是函数，也可以是宏，如果你想调用函数版本，就如下这么写：  ( putchar )( 'a ' );

user: user-7
content: 是函数的，，

user: user-8
content: http://stackoverflow.com/questions/16165672/are-getchar-and-putchar-functions-or-marcros
user-0 提问: c杨辉三角形

回复:
user: user-1
content: 引用 1 楼 zhb111hy 的回复:这个我觉得有三种方法 1：有一个for循环控制行数（有三行） 2：有一个for循环控制列数（有5列） 3：有二维数组   好了，我没有想出来任意一个的程序，大神来帮忙 就是这样的，先不看输入的变量F，就只看上面的哪个图，尝试找规律打印出来，然后再改下相关变量就可以了。。。

user: user-2
content: #include <iostream> #include <iomanip>  using namespace std;   int main() { 	int range = 0; 	int temp = 1; 	cout << "请输入要打印的行数\n" ; 	cin >> range; 	cout << "\n"; //	cout << " "; 	for ( int i = 0; i <= range; i++ ) 	{ 		for ( int l = 0; l < range - i; l++ ) 		{ 			cout << "   "; 		} 		 		if ( temp == 1 ) 		cout << setiosflags(ios::left) << setw(6) << temp ; 		temp = 1; 		for ( int j = 1; j <= i; j++ ) 		{ 			 			for ( int k = i; k > i - j; k-- ) 			{ 				 temp *= k; //求n！/（n-m）！ 			}  			for ( k = j; k > 0; k-- ) 			{ 				temp /= k;//   /m!; 			}  			cout  << setiosflags(ios::left) << setw(6)<<temp ; 			temp = 1; 		} 	 		cout << "\n" ; 	  	} 	cout << endl; }

user: user-3
content: #include <iostream.h>  void solve(int i,int length);  int main() { 	char c; 	int length,i; 	cout<<"请输入一个大写字母："<<endl; 	cin>>c; 	length = c - 'A'; 	for(i =length;i>=0;--i) 	{ 		solve(i,length); 	} 	for(i = 1;i<=length;++i) 	{ 		solve(i,length); 	} }  void solve(int i,int length) { 	int j; 	for(j = 0;j<i;++j) 		cout<<' '; 	for(;j<length;++j) 		cout<<char('A'+j); 	for(;j>=i;--j) 		cout<<char('A'+j); 	cout<<'\t'<<'\n'; } 把楼上的改成C++了。

user: user-3
content: 楼上是大神，学到了。

user: user-4
content: 改个函数版本 #include<stdio.h>  void solve(int i, int length);  int main(){ 	char c; 	int length, i;  	scanf("%c", &c);   //Select char 	length = c - 'A'; 	for (i = length; i >= 0; --i){   //top 		solve(i, length); 	}  	for (i = 1; i <= length; ++i){   //bottom 		solve(i, length); 	} }  void solve(int i, int length){ 	int j; 	for (j = 0; j < i; ++j) 		putchar(' '); 	for (; j < length; ++j) 		printf("%c", 'A' + j); 	for (; j >= i; --j) 		printf("%c", 'A' + j); 	putchar('\n'); }

user: user-4
content: #include<stdio.h>  int main(){ 	char c; 	int length; 	int i,j;  	scanf("%c", &c);   //Select char 	length = c - 'A'; 	for (i = length; i >= 0; --i){   //top 		for (j = 0; j < i; ++j) 			putchar(' '); 		for (; j <length;++j) 			printf("%c", 'A' + j); 		for (; j >= i; --j) 			printf("%c", 'A' + j); 		putchar('\n'); 	}  	for (i = 1; i <=length; ++i){   //bottom 		for (j = 0; j < i; ++j) 			putchar(' '); 		for (; j <length; ++j) 			printf("%c", 'A' + j); 		for (; j >= i; --j) 			printf("%c", 'A' + j); 		putchar('\n'); 	} }

user: user-0
content: 这个我觉得有三种方法 1：有一个for循环控制行数（有三行） 2：有一个for循环控制列数（有5列） 3：有二维数组   好了，我没有想出来任意一个的程序，大神来帮忙
user-0 提问: 形参是结构体数组，请问 我如何再函数体内得到这个形参的长度呢？？

回复:
user: user-1
content: 引用 3 楼 lgmsyy 的回复:[quote=引用 1 楼 shiguojie19892 的回复:] int testStudentInfo(struct Student *stu)传入得是指针，不能得到长度，需要加上一个int _length长度也传入函数内。 int testStudentInfo(struct Student *stu，int _length)  struct Student student[100]; 这个不是数组吗？这个数组为100个结构体准备好了空间，然后传给 int testStudentInfo(struct Student *stu)，为什么在这个函数里面不能取得数组的长度呢？？？[/quote] 那你应该这么取得 sizeof(student[100]);

user: user-2
content: 数组退化为指针了，这种情况下是拿不到长度的， 要想拿到可以通过函数模板的方式拿到

user: user-3
content: 传入的只是数组首地址，因为数组的长度在内存中并没有事先存放所以无从获取，只能手动传递

user: user-0
content: 引用 1 楼 shiguojie19892 的回复:int testStudentInfo(struct Student *stu)传入得是指针，不能得到长度，需要加上一个int _length长度也传入函数内。 int testStudentInfo(struct Student *stu，int _length)  struct Student student[100]; 这个不是数组吗？这个数组为100个结构体准备好了空间，然后传给 int testStudentInfo(struct Student *stu)，为什么在这个函数里面不能取得数组的长度呢？？？

user: user-4
content: 加一个入参arraylen，表示数组长度  int testStudentInfo(struct Student *stu, int  arraylen)

user: user-1
content: int testStudentInfo(struct Student *stu)传入得是指针，不能得到长度，需要加上一个int _length长度也传入函数内。 int testStudentInfo(struct Student *stu，int _length)
user-0 提问: 一个C语言小程序问题

回复:
user: user-1
content: void f(int a[]) 形参中的a其实是一个指针变量，sizeof(a)是4，sizeof(a[0])也是4，那么计算的结果就是1了。

user: user-2
content: 这样的结果才是5,5  #include<stdio.h>  void f(int (&a)[5]) { 	printf("%d\n", sizeof(a)/sizeof(a[0])); }  int main() { 	int a[5] = {1,2,3,4,5};  	printf("%d\n", sizeof(a)/sizeof(a[0]));  	f(a);   	return 0; }

user: user-2
content: #include<stdio.h>  void f(int *b) { 	printf("%d\n", sizeof(b)/sizeof(a[0])); }  int main() { 	int a[] = {1,2,3,4,5};  	printf("%d\n", sizeof(a)/sizeof(a[0]));  	f(a);   	return 0; } 楼主恰好同名，所以误导了楼主，f()函数里面的a是指针啊，指针在32位系统占4个字节和int一样啊，改成上面形式就好理解多了

user: user-3
content: 数组作为参数传递会自动的退化为指针，sizeof只是在计算指针的大小,而指针32位系统下位4字节。所以，当我们用数组作为函数参数的时候，一般都会写成指针+数组长度的方式。  而不作为参数的时候，sizeof就是真正得到数组所占的内存空间了

user: user-4
content: 在main函数里，sizeof可以求一片内存的字节数，但是，函数传参的时候，会把数组退化成一个指针(4字节),所以，结果就是上述结果了。2楼说的并不准确,sizeof既是一个c++操作符也是一个函数，所以，可以这么写sizeof int,也可以这么写sizeof(int)

user: user-5
content: 不错，f中的a是指针，占4个字节，而sizeof(a[0])也是占4个字节，在main中a是个数组，占20个字节——  其实lz这样试试后应该能想到的吧，如果lz想了解sizeof，可以看看这个——http://blog.csdn.net/sword_8367/article/details/4868283

user: user-6
content: 引用 楼主 yuzengyuan 的回复: #include<stdio.h>  void f(int a[]) { 	printf("%d\n", sizeof(a)/sizeof(a[0])); }  int main() { 	int a[] = {1,2,3,4,5};  	printf("%d\n", sizeof(a)/sizeof(a[0]));  	f(a);   	return 0; }  请解释下为什么man函数输出是5，f函数输出是1 main中a是一个数组实体，有大小所以是5/1=5, f中是指针，所有指针大小都是4，a[0]是int型也是4,4/4=1

user: user-7
content: main函数里 a 是数组处理的！ f函数里 a就是一个指针处理！

user: user-8
content: sizeof并不是一个函数，在编译后，它实际上是被替换成了一个常量。

user: user-8
content: sizeof计算的是变量的大小。 在main中，a是一个有五个元素的整型数组，sizeof(a)为20；a[0]是int类型的变量，sizeof(a[0])为4。 在函数f中a是一个指针，一个指针占四个字节，所以就是这样的结果了。
user-0 提问: 如何把2个unsigned char类型变量，分别赋给1个unsigned short变量的低8位和高8位？

回复:
user: user-1
content: 引用 2 楼 JiMoKuangXiangQu 的回复:char a, b; unsigned short i; i = ((unsigned short)a << 8) | b; 写错了，呵呵，LZ自己可以电脑上验证下。 unsigned char a, b; unsigned short i; i = ((unsigned short)a << 8) | b;

user: user-2
content: 写全点吧 typedef unsigned short      WORD; typedef unsigned char       BYTE; #define MAKEWORD(a, b)      ((WORD)(((BYTE)(a)) | ((WORD)((BYTE)(b))) << 8))

user: user-1
content: char a, b; unsigned short i; i = ((unsigned short)a << 8) | b;

user: user-2
content: WORD MAKEWORD(     BYTE bLow,     BYTE bHigh );
user-0 提问: linux c 如何 通过http发送数据？？

回复:
user: user-1
content: 我之前用libcurl做的服务器程序。发现有一点很致命。内存会泄露。不信你top -p pid 看下是不是在一直增长。暂时还没有找到现成的库来做这个。

user: user-0
content: 谢谢各位，已经用libcurl实现

user: user-0
content: 用什么api来发呢

user: user-2
content: 对应http协议来发送呗

user: user-3
content: http该怎么填，你的data_buff就怎么填。

user: user-4
content: libcurl 正解。

user: user-5
content: 最快的办法是直接套接字将需要发送的内容一股脑塞过去，用telnet找个http会话的数据内容看一下就能知道大概了~

user: user-6
content: libcurl
user-0 提问: 关于c中free()的疑惑

回复:
user: user-1
content: malloc和free相当于借和还，不相当于创造和销毁。  其实电脑开机后物理内存的每个字节都是可读写的，区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页，一页通常为4KB。

user: user-2
content: .希望能让看了这个帖子的人不要再问“内存释放了为什么还能使用”类似问题了。  int* p=new int[10]; //你向房东租了间房子，房东给你一把钥匙p p[0]=1234;          //你开始使用这间房子，扔了一堆你的东西 delete[] p;         //你向房东退房了 //p=NULL;           //你把钥匙还了，如果没有这句就是你没还钥匙 cout <<p[0];        //你明明退了房子，但没有还钥匙。然后还用这把钥匙开门进去。                        //这时有三种结果：（1）房子还是老样子，你扔的东西都还在，就像你没退房一样                        // (2) 房子已经被房东收拾过了，你的东西被扔掉了。                       //  (3) 房子已经被租给其他人了，你被当做小偷暴打了一顿。 最后，请记住：退房记得还钥匙。

user: user-3
content: 所以删完之后赶紧赋值NULL，防止被误用

user: user-4
content: LZV587！

user: user-5
content: 在有的编译器里面这样是可以的     不只你看的那本书  好像C专家编程里面也介绍过     但这种代码不具有可移植性

user: user-6
content: 这个如果运气好的话就能运行成功

user: user-7
content: free（），只能释放掉，使用malloc函数族，分配的内存指针，

user: user-8
content: free()释放后，只是标记处这段内存空闲的，最终如何使用这段内存是操作系统决定的， 所以free(current);后最好还要加上 current = NULL;这样有两个好处1、防止对没有再次给current分配内存就调用 current=current->next;； 2、防止一次malloc后，多次调用free(current);导致程序崩溃。

user: user-9
content: 引用 1 楼 starytx 的回复:这样是不可以的，必须在释放current前先保存其next指针，释放后再将保存的next赋给current+1

user: user-10
content: 不明觉历

user: user-11
content: 难道 C primer plus 中说这么写是对的？

user: user-12
content: lz,你是对的.

user: user-13
content: lz,你是对的.

user: user-14
content: 这样是不可以的，必须在释放current前先保存其next指针，释放后再将保存的next赋给current

user: user-15
content: lz,你是对的. 程序猿面试宝典里面有个题差不多，曾经做过测试结果打印出来是乱码

user: user-16
content: 书上错了！！
user-0 提问: 这句话哪里错了？

回复:
user: user-1
content: 这个#后面跟个东西还真不懂，我以为是&取地址用的呢！而且双引号在字符串中怎么不用那个\呢？

user: user-0
content: 引用 2 楼 user-2 的回复:你把expr打成epxr了。 至于这个#是干什么用的，自己翻开一本C教材看宏定义有什么特殊语法。 你说的也对，但正确答案应该是这样 printf(#expr "="fmt"\n",expr)

user: user-2
content: 你把expr打成epxr了。 至于这个#是干什么用的，自己翻开一本C教材看宏定义有什么特殊语法。
user-0 提问: 关于C语言数据结构双向链表问题   来大神啊！帮我改改吧！为什么输出的数据都不正确啊？

回复:
user: user-1
content: 如果这个是 严蔚敏 的数据结构，习题答案网上有！

user: user-2
content: http://blog.csdn.net/wonggonghong/article/details/21605423 http://blog.csdn.net/wonggonghong/article/details/21619771 这里有两篇双链表的文章，可以参考

user: user-3
content: 输入问题：   插入问题：   自己调试一下吧！新手，请多多指教！
user-0 提问: 嵌入式C中字长的问题，望大神指点~

回复:
user: user-1
content: unsigned int compzero=-1; 应该也可以

user: user-2
content: 因为int可能的位数对于不同的平台可能是不同的，而0xffff只适合16位的compzero，32位是0xffffffff才对，所以~0才是正确的。  引用 楼主 wang554366136 的回复:在程序员面试宝典上看到这样一个程序片段：     unsigned int zero=0;                    unsigned int compzero=0xFFFF;     说这样写是不对的，不懂得处理器字长的重要性，应该写成下面的：    unsigned int compzero=~0;    希望能解释的详细些~
user-0 提问: c语言-字符串数组的输入

回复:
user: user-0
content: 引用 5 楼 qq283802332 的回复:这是一个指针数组。  这用使用是正确的， 没有错啊。  是不是编译器出问题了？ 今天就可以正常运行了，看来是编译器的问题。。

user: user-1
content: 这是一个指针数组。  这用使用是正确的， 没有错啊。  是不是编译器出问题了？

user: user-2
content: #include <stdio.h> #include <iostream.h> int main() { 	char *a[4]; 	a[0] = "ab"; 	a[1] = "ab"; 	a[2] = "ab"; 	a[3] = "ab"; 	for (int i = 0;i<4;i++) 	{ 		cout<<a[i]<<'\t'; 		cout<<'\n'; 	} 	return 0; } 我运行了一下，没有问题啊。。。

user: user-3
content: 不可能segment fault

user: user-4
content: 看错了  数组的数组   2维都要有确定的大小   char a[4][3];

user: user-4
content: 一个char放一个字母吧    a[0] = 'a';
user-0 提问: visual studio新手

回复:
user: user-0
content: #include "stdafx.h" #include"iostream" using namespace std; int main() { 	int a, b; 	cin>> a >> b; 	return 0;  }  请问为什么像这样子的程序，visual studio 中会出现	 2	IntelliSense: identifier "cin" is undefined	e:\wpapplication\aaa\aaa\aaa.cpp	7	2	aaa 这样的错误。。其实我一开始就是想问这个的。。谢谢。。

user: user-1
content: 引用 2 楼 chen_xinjia 的回复:问个问题好了，visual studio 中有什么复制所有错误信息的快捷键吗？ 复制所有错误信息的快捷键？

user: user-2
content: Error	1	error C2065: 'priority_queue' :   #include<queue>

user: user-3
content: #include<priority_queue>

user: user-0
content: 问个问题好了，visual studio 中有什么复制所有错误信息的快捷键吗？

user: user-0
content: 呃。。知道了
user-0 提问: C语言新人  求救！！

回复:
user: user-0
content: 但就是free语句出错了，我把它注释掉，程序后续就能运行了。

user: user-1
content: if p!=NULL //free(NULL)有些编译器过不去,有的能过去 free(p);

user: user-1
content: if(p->coefficient+pa->coefficient==0){ free(p); free(pa); p=p->next; //free了就不能用这么用了,p会报段错误     pa=pa->next; }

user: user-2
content: 单步调试,加打印输出.

user: user-3
content: 引用 4 楼 u014138473 的回复:加入p是指针，并且已经指向某一具体数值，那么，free（p）， 是吧p所指空间的地址释放呢，还是释放储存在里面的数据？？？求指教 是释放指向的地址空间，没问题 你的代码贴上来时应该选 C/C++ 格式，不然太难读，就没人看了

user: user-0
content: 加入p是指针，并且已经指向某一具体数值，那么，free（p）， 是吧p所指空间的地址释放呢，还是释放储存在里面的数据？？？求指教

user: user-4
content: while(p)     pc->next=p; while(pa)     pc->next=pa; 以上两句p、pa 与pc都没有往前走，while(p)会一直为真。修改为以下试试： while(p) { 	pc->next=p; 	pc=pc->next; 	p=p->next; } while(pa) {         pc->next=pa; 	pa=pa->next; 	pc=pc->next; }

user: user-5
content: 这个可以自己好好调试一下啊，把各个参数打印出来，跟踪一下

user: user-0
content: 改了，还是不行。后来有发现，改了if判断句还是不行。
user-0 提问: 刚开始学数据结构,觉得太难了,求大神.利用两个线性表LA和LB分别表示两个集合A和B，现要求一个新的集合A=A并B。 

回复:
user: user-1
content: 如何A和B的元素是相同类型的，可以用memcpy函数把B放到A的后面，memcpy是针对字节的COPY

user: user-2
content: 线性表？是单链表么
user-0 提问: [swu]fgets函数

回复:
user: user-1
content: fgets获取的字符串，如果结尾有\n, 表明完整地读取了一行， 没有的话，可以由程序自行选择拼接、无视等操作

user: user-0
content: data文件的行末尾没有空格，因为fgets函数遇到新的一行或者文件结束符（EOF）就会结束。 我把它视为以行读取字符。

user: user-2
content: 你得看看你所用的data文件的第一行是不是本来在行末有个空格？此外fgets我记得是把换行符也包含进去了的。

user: user-0
content: 为什么会有换行呢？
user-0 提问: union的问题

回复:
user: user-1
content: 上机实验分析，别在这问是多少，如果不理解，看汇编，还不理解，把结果贴出来

user: user-2
content: 我想了下，按位来操作，要不要考虑大端，小端的问题》？？？？

user: user-2
content: 但是，编译器应该不会给变量初始化为0吧，

user: user-2
content: 楼上的应该正确

user: user-3
content: 你应该问的是u.i（或者p->i）的值多少吧,下面简单的分析一下，union类型的意思是让几个变量共享一段内存，当定义一union类型的变量时，它所分配的内存空间大小等于union体内所需空间最大的那个变量的大小。具体到本例union型变量共分配了4个字节的变量（int i占4字节，char a[2]占两个字节，所以分配4个字节）。又因为union型变量是全局变量所以在程序运行前会先将这段内存初始化为零。因此赋值p->a[0] = 0x39;p->a[1] = 0x38后；union变量的内存值为为0x39 ，0x38,0x00,0x00,当用u.i即以int方式解释这段内存时结果为：u.i=0x00003839(16进制表示)=3×16^3+8×16^2+3×16+9=14393。

user: user-4
content: u一共四个字节，i和a共享这四个字节。i使用全部四个字节，a使用前两个字节。给a赋值后内存应该是0x38，0x39，0x??，0x??，后两个字节如果变量是全局的则是0x00，如果是局部的则不确定。i值如果是大端则是0x3938????，如果是小端则是0x????3839
user-0 提问: C中有连接符吗？

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

user: user-2
content: printf....改成 printf("%s + %d %s +%d %s+ %d  =%d ",StrOf(Symb(x,y)),3,StrOf(x),4, StrOf(y),1,Symb(x,y)+3* x +4* y + 1); 输出: xy + 3 x +4 y+ 1  =75

user: user-2
content: printf....改成 printf("%s + %d %s +%d %s+ %d  =%d ",StrOf(Symb(x,y)),3,StrOf(x),4, StrOf(y),1,Symb(x,y)+ 4* x +4* y + 1); 输出: xy + 3 x +4 y+ 1  =85  直接连接字符串，strcat , 输出字符串连接，可以用 %s%s 另外sprintf (s,"%s%s",s1,s2);可以用两个或者以上的字符串s1,s2...，合成新的字符串s;

user: user-3
content: VB6里有符号，在C中要用函数连接字符串

user: user-2
content: 有呀 1）续行符 \  表示两行代码，其实是一行代码  2）或者 串连接符号 空白（空格，换行，制表符等） 或者直接连接（引号之间无空格） 3）预编译的符号连接符，把两个不同符号，连接成一个新的符号 比如 x,y---->x##y ---> xy    例如  x =  10,y =11  求  xy +3 x+4y+1  #include<stdio.h> #define  Paste(a,b)  a##b #define StrSymb(a) #a #define Symb(x,y) Paste(x,y)  #define StrOf(a) StrSymb(a)  int Symb(x,y)  ; int x,y;  int main(int argc, char* argv[]) { 	int x=10,y=11; 	printf("%s + %d %s +%d %s+ %d",StrOf(Symb(x,y)),3,StrOf(x),4, StrOf(y),1); 	 	return 0; }  输出: xy + 3 x +4 y+ 1

user: user-4
content: 用strcat函数。  引用 楼主 u011293816 的回复:在C程序中有数字或则文本连接符号吗？求解！！

user: user-5
content: 举个例子说明你想要的结果

user: user-6
content: 连接符号指？
user-0 提问: c编程，用什么办法可以直接读取某个文件的最后21个字节？？

回复:
user: user-1
content: 引用 1 楼 turingo 的回复:fseek(fp,-21L,SEEK_END);  引用 楼主 waldmer 的回复:c编程，用什么办法可以直接读取某个文件的最后21个字节？？ lseek, fseek 具体调用， 怎么实现的？？ +1

user: user-2
content: 引用 1 楼 turingo 的回复:fseek(fp,-21L,SEEK_END);  引用 楼主 waldmer 的回复:c编程，用什么办法可以直接读取某个文件的最后21个字节？？ lseek, fseek 具体调用， 怎么实现的？？ 正解！

user: user-3
content: 仅供参考#include <stdio.h> #include <io.h> #include <fcntl.h> #include <share.h> #include <conio.h> int fh; int c,r; __int64 offset,offset1,i64,n64,l64,r64; char ln[16000+1]; int main(int argc,char **argv) {     if (argc<2) {         fprintf(stderr,"Usage:%s filename.txt [10]\nto reverse lines of file [default the last 10 lines,-1 for all lines].\n",argv[0]);         return 1;     }     if (argc==2) n64=10i64;     if (argc>2) sscanf(argv[2],"%I64d",&n64);     fh=_sopen(argv[1],_O_BINARY|_O_RDONLY|_O_RANDOM,_SH_DENYNO);     if (-1==fh) {         fprintf(stderr,"Can not _sopen file %s!\n",argv[1]);         return 2;     }     l64=_filelengthi64(fh);if (l64==0i64) {_close(fh);return 0;}     offset=l64;     offset1=_lseeki64(fh,-1i64,SEEK_END);     if (offset1==-1i64) {_close(fh);return 3;}     i64=0i64;     while (1) {         if (_read(fh,&c,1)<1) break;//         if (('\n'==c && offset1<l64-1i64) || offset1==0i64) {             if (offset1!=0i64) offset1++;             if (_lseeki64(fh,offset1,SEEK_SET)==-1i64) break;//             r64=offset-offset1;             if (r64<=16000i64) {                 r=_read(fh,ln,(unsigned int)r64);                 if (r<=0) break;//             } else {                 r=16000;                 while (1) {                     if (r64>(__int64)r) {                         r64-=(__int64)r;                         if (1i64==r64 || 2i64==r64) {                             r=8000;                             r64+=(__int64)r;                         }                     } else {                         r=(int)r64;                         r64=0i64;                     }                     r=_read(fh,ln,r);                     if (r<=0) break;//                     if (0i64==r64) break;//                     ln[r]=0;                     printf("%s",ln);                     r=16000;                 }                 if (r<=0) break;//             }             ln[r]=0;             if (r>=2 && ln[r-1]=='\n' && ln[r-2]=='\r') {ln[r-2]='\n';ln[r-1]=0;r--;}//避免输出重定向到文件时行尾多出'\r'             if (i64==0I64) {                 if ('\n'!=ln[r-1]) printf("%s\n",ln);                 else               printf("%s",ln);             } else {                 printf("%s",ln);             }             i64++;             if ((i64%10000)==0) cprintf("\r%I64d/%I64d",offset1,l64);             if (n64>0i64 && i64>=n64) break;//             offset=offset1;             _lseeki64(fh,offset1-2i64,SEEK_SET);             offset1-=2i64;         } else {             _lseeki64(fh,-2i64,SEEK_CUR);             offset1--;         }     }     _close(fh);     return 0; }

user: user-4
content: fseek(fp,-21L,SEEK_END);  引用 楼主 waldmer 的回复:c编程，用什么办法可以直接读取某个文件的最后21个字节？？ lseek, fseek 具体调用， 怎么实现的？？
user-0 提问: 求助（关于此程序实现的功能）

回复:
user: user-1
content: 代替学生上厕所的老师……是……小jj

user: user-2
content: 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试是程序员必须掌握的技能之一。

user: user-0
content: 学生受教了，谢谢

user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:纠正楼上： int i; i=0; if (ch == '\n') {     printf("\n");//    ？？？？？  //这边我不懂怎么办了     i=0; } else if (ch < '0' || '9' < ch) {     putchar(ch);     continue; } else {     printf("%s:%c ", c[i], ch);   //我又不会输出了     i=(i+1)%7; } 可是我想要的功能还是没有实现

user: user-3
content: char c[7][10]={"length","width","height","pos x","pos y","pos z","lot"};  //这样定义对不对？ 也可以 char* c[]={"length","width","height","pos x","pos y","pos z","lot"};  sizeof(c)/sizeof(char*)就是数组维数，数组每个元素是一个char*也就是字符串常量。

user: user-2
content: 纠正楼上： int i; i=0; if (ch == '\n') {     printf("\n");//    ？？？？？  //这边我不懂怎么办了     i=0; } else if (ch < '0' || '9' < ch) {     putchar(ch);     continue; } else {     printf("%s:%c ", c[i], ch);   //我又不会输出了     i=(i+1)%7; }

user: user-2
content: if (ch == '\n') {     printf("\n");//    ？？？？？  //这边我不懂怎么办了 } else if (ch < '0' || '9' < ch) {     putchar(ch);     continue; } else {     printf("%s:%c ", c[ch-'0'], ch);   //我又不会输出了 }
user-0 提问: XMLSTRU 结构体和DeleteXml()是在哪个lib或.h？

回复:
user: user-0
content: 引用 6 楼 user-1 的回复:[quote=引用 5 楼 ally0910 的回复:] [quote=引用 4 楼 user-1 的回复:] 是自定义的吧  不知道，前人写的代码，现在要改，编译不过[/quote]  搜索一下啊 整个solution[/quote]  找过了，没有，没办法  只好从外围看得到的地方重写了

user: user-1
content: 引用 5 楼 ally0910 的回复:[quote=引用 4 楼 user-1 的回复:] 是自定义的吧  不知道，前人写的代码，现在要改，编译不过[/quote]  搜索一下啊 整个solution

user: user-0
content: 引用 4 楼 user-1 的回复:是自定义的吧  不知道，前人写的代码，现在要改，编译不过

user: user-1
content: 是自定义的吧

user: user-0
content: 不是吧，没人看啊~~~~~~~~

user: user-0
content: 这样就成沉下去了吗？？？？？

user: user-0
content: 自己顶起来~~~~~
user-0 提问: 一个俄罗斯方块 求指教

回复:
user: user-1
content: 不懂这个。不过这个也太。。。——  lz可以向这位讨教讨教http://bbs.csdn.net/topics/390734193

user: user-2
content: VS IDE中，在不明白的符号COORD上点鼠标右键，选转到定义。  代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试是程序员必须掌握的技能之一。
user-0 提问: 我就想用codeblocks创建一个文件并存储数据，怎么就不行了，给跪了...

回复:
user: user-1
content: 试试 "wt"  引用 2 楼 u014217598 的回复:[quote=引用 1 楼 turingo 的回复:] 输入CTRL + Z 组合键才是EOF字符。  [quote=引用 楼主 u014217598 的回复:] 大家帮帮我吧 我就想创建一个文件并存储数据，怎么就不行了，跪求啊~~~~ 我的版本号是13.12，系统是win7 64位  文件是创建了，但是里面一点信息也没有，肿么了？[/quote]  谢了，可是问题还是存在，ctrl+c才是结束标志，我发现是有东西存到文件的，可是无法显示，你看看怎么回事？ [/quote]

user: user-0
content: 引用 1 楼 turingo 的回复:输入CTRL + Z 组合键才是EOF字符。  [quote=引用 楼主 u014217598 的回复:] 大家帮帮我吧 我就想创建一个文件并存储数据，怎么就不行了，跪求啊~~~~ 我的版本号是13.12，系统是win7 64位  文件是创建了，但是里面一点信息也没有，肿么了？[/quote]  谢了，可是问题还是存在，ctrl+c才是结束标志，我发现是有东西存到文件的，可是无法显示，你看看怎么回事？

user: user-1
content: 输入CTRL + Z 组合键才是EOF字符。  引用 楼主 u014217598 的回复:大家帮帮我吧 我就想创建一个文件并存储数据，怎么就不行了，跪求啊~~~~ 我的版本号是13.12，系统是win7 64位  文件是创建了，但是里面一点信息也没有，肿么了？
user-0 提问: 关于windows下回车键的问题！

回复:
user: user-1
content: 引用 5 楼 u011636566 的回复:网友zjq9931，我知道getch和getchar有区别啊，所以getch才能用于密码输入的问题啊，我想应该是应为getch在遇到回车键是依然单布吸收字符，所以会吸收到\r，而getchar在遇到回车键时会将\r\n一起吸收并作为\n记录吧 这个，根据实验来看，应当是的。 但我的研究的没有这么深，等待高手回答。

user: user-0
content: 网友zjq9931，我知道getch和getchar有区别啊，所以getch才能用于密码输入的问题啊，我想应该是应为getch在遇到回车键是依然单布吸收字符，所以会吸收到\r，而getchar在遇到回车键时会将\r\n一起吸收并作为\n记录吧

user: user-1
content: 楼主，getch，是getch，getchar是getchar。 getch是在按键的时候就有响应。 getchar是在按回车后才有响应，两个是不一样的。

user: user-2
content: 不要把 fopen("...","...");fscanf,fprintf,fgets,fgetc,fclose //读时把\r\n替换成\n，写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fread,fwrite,fgetc,fclose  //不作以上替换，遇到\x1a仍继续读;读写的内容当字节看待 弄混了

user: user-1
content: MSDN中的例子：  #include <stdio.h>  void main( void ) {    char buffer[81];    int i, ch;     printf( "Enter a line: " );     /* Read in single line from "stdin": */    for( i = 0; (i < 80) &&  ((ch = getchar()) != EOF)                          && (ch != '\n'); i++ )      //EOF ，\n，没有一\r判断结束的。       buffer[i] = (char)ch;     /* Terminate string with null character: */    buffer[i] = '\0';    printf( "%s\n", buffer ); }

user: user-0
content: 网友zhao4zhong1，你的意思是：getch是直接吸收'\r'   而getchar()是把'\r\n'一起吸收并作为'\n'么？
user-0 提问: 命令行参数中的argv是如何实现++argv就能指向下一个字符串的？

回复:
user: user-1
content: Addition (+) The addition operator (+) causes its two operands to be added. Both operands can be either integral or floating types, or one operand can be a pointer and the other an integer.    When an integer is added to a pointer, the integer value (i) is converted by multiplying it by the size of the value that the pointer addresses. After conversion, the integer value represents i memory positions, where each position has the length specified by the pointer type. When the converted integer value is added to the pointer value, the result is a new pointer value representing the address i positions from the original address. The new pointer value addresses a value of the same type as the original pointer value and therefore is the same as array indexing (see One-Dimensional Arrays and Multidimensional Arrays). If the sum pointer points outside the array, except at the first location beyond the high end, the result is undefined. For more information, see Pointer Arithmetic.

user: user-0
content: 你们没说出关键，而且说错了，不是指针数组，而是数组指针，而且应该这样说：

user: user-2
content: 回顾一下：地址加法运算

user: user-3
content: 引用 4 楼 tuzhutuzhu 的回复:[quote=引用 3 楼 lin5161678 的回复:] [quote=引用 2 楼 tuzhutuzhu 的回复:] argv是个指针数组，数组的成员就是各个参数不是数组  char** 二维指针[/quote] char **argv跟char *argv[]，有啥区别吗[/quote]如果是作为函数形参  那么 这两个没有区别都是 char** 如果不是 作为函数形参 那么前者是指针类型 后者是数组类型 不一样

user: user-4
content: 引用 3 楼 lin5161678 的回复:[quote=引用 2 楼 tuzhutuzhu 的回复:] argv是个指针数组，数组的成员就是各个参数不是数组  char** 二维指针[/quote] char **argv跟char *argv[]，有啥区别吗

user: user-3
content: 引用 2 楼 tuzhutuzhu 的回复:argv是个指针数组，数组的成员就是各个参数不是数组  char** 二维指针

user: user-4
content: argv是个指针数组，数组的成员就是各个参数

user: user-5
content: 建议lz巩固一下指针的基础知识
user-0 提问: 关于memcpy的问题

回复:
user: user-1
content: void *代表是一个指向无类型的指针 void代表无返回值

user: user-2
content: 是 void *类型  不是 void类型

user: user-3
content: 后边还有个 *

user: user-4
content: void * 表示返回值是无类型的指针 void 表示没有返回值

user: user-5
content: void *memcpy 返回值不是“void *”吗？

user: user-6
content: void *为“无类型指针”，可以指向任何数据类型 void才是“无类型”

user: user-0
content: 明白了，基础不扎实啊   ~~~
user-0 提问: 新人求助！！

回复:
user: user-1
content: 好神奇，我的vs2013就没有这种情况

user: user-2
content: 事实上你这个程序在Visual c++里是可以运行的，至于你的问题报错上都提示了，你试着用scanf_s代替scanf 试试，我没用过这个，我想是不同的编译器所以有不同的规定造成的。

user: user-3
content: 缺头文件，#include <stdlib.h>
user-0 提问: 求问，c编译器有什么版本，怎么看是什么版本？

回复:
user: user-1
content: 提醒：不一定版本越高越好用。

user: user-2
content: 引用 4 楼 caiwei_cs 的回复:[quote=引用 3 楼 user-2 的回复:] [quote=引用 2 楼 caiwei_cs 的回复:] [quote=引用 1 楼 user-2 的回复:] gcc -v 那我经常用的古老的vc6呢？ 这个gcc版本和vc的版本是不是都是遵照一个什么国际c标准[/quote] vc呢，是一个集成开发环境，准确来讲，不是一个编译器，是包含编译器而已。 vc6有些实现不符合c标准。 gcc有很多版本，是否每个实现都符合c标准，我没有每个都去测试过，所以也无法下结论。 不过以我个人的经验来讲，gcc编译器是最贴近标准的。 据我所知，目前存在的才语言标准有：c89(被规范为iso90)，c99，c0x，c1x。[/quote] 谢谢啦，是不是我有条件的话用gcc是最好的吧。[/quote] 没有这样的限制啦，看你打算在哪个平台做开发，做什么样的开发。 各种编译器存在，都有其不可替代的用途。

user: user-0
content: 引用 3 楼 user-2 的回复:[quote=引用 2 楼 caiwei_cs 的回复:] [quote=引用 1 楼 user-2 的回复:] gcc -v 那我经常用的古老的vc6呢？ 这个gcc版本和vc的版本是不是都是遵照一个什么国际c标准[/quote] vc呢，是一个集成开发环境，准确来讲，不是一个编译器，是包含编译器而已。 vc6有些实现不符合c标准。 gcc有很多版本，是否每个实现都符合c标准，我没有每个都去测试过，所以也无法下结论。 不过以我个人的经验来讲，gcc编译器是最贴近标准的。 据我所知，目前存在的才语言标准有：c89(被规范为iso90)，c99，c0x，c1x。[/quote] 谢谢啦，是不是我有条件的话用gcc是最好的吧。

user: user-2
content: 引用 2 楼 caiwei_cs 的回复:[quote=引用 1 楼 user-2 的回复:] gcc -v 那我经常用的古老的vc6呢？ 这个gcc版本和vc的版本是不是都是遵照一个什么国际c标准[/quote] vc呢，是一个集成开发环境，准确来讲，不是一个编译器，是包含编译器而已。 vc6有些实现不符合c标准。 gcc有很多版本，是否每个实现都符合c标准，我没有每个都去测试过，所以也无法下结论。 不过以我个人的经验来讲，gcc编译器是最贴近标准的。 据我所知，目前存在的才语言标准有：c89(被规范为iso90)，c99，c0x，c1x。

user: user-0
content: 引用 1 楼 user-2 的回复:gcc -v 那我经常用的古老的vc6呢？ 这个gcc版本和vc的版本是不是都是遵照一个什么国际c标准

user: user-2
content: gcc -v
user-0 提问: 【蓝桥杯】排他平方数 ssprintf()的疑问

回复:
user: user-1
content: 目测是乘法溢出

user: user-2
content: 问题见红色部分 int cmp(char *c,int n) {     int i,j;     for(j=0;j<n;j++)     for(i = 0;i < n;i++)     {         if(c[j] == c[i] && i!=j)         return 0;     } return 1; }  int main(void) {     long long s;     long long i;     int j;     int t;     int nc=0;     int ns = 0;     char cc[20];     char cs[20];     for(i = 123456;i <= 987654;i++)     {         sprintf(cc,"%lld",i);         nc = strlen(cc);         if(cmp(cc,nc))         {             s = i * i;             //printf("%d",i);             sprintf(cs,"%lld",s);             ns = strlen(cs);             for(j = 0;j < ns;j++) {                 for(t = 0;t<nc;t++)                      if(cs[j]== cc[t] )                          break;             if(t!=nc) break; }    if(j==ns) printf("%lld====%lld\n",i,s);         }      }      return 0; }
user-0 提问: 可变参数宏，做assert 断言编译过不了。

回复:
user: user-0
content: 对不起啊，楼上，你们都说对了，编译器问题。我不小心结贴了。不能给你们分了。

user: user-1
content: 很明显,你的编译器不支持

user: user-2
content: 我在VS2005的环境能编译通过、并且正常运行
user-0 提问: 菜鸟在线跪等,低级错误!!!

回复:
user: user-0
content: 我分不多,没必要分了吧,都给最快帮我解决的朋友了!谢谢大家的帮助,上帝会保佑大家的!!!

user: user-1
content: 嗯，scanf中不要轻易加上非输入控制符（这里指的是逗号），关于scanf，lz可以看看这个——http://blog.csdn.net/u012421456/article/details/18501309

user: user-2
content: 这样就好了，或者用我注释的那些。  #include<stdio.h> void main() { int a,b,c; scanf ("%d %d",&a, &b); //scanf ("%d",&a); //scanf ("%d",&b); printf ("a=%d,b=%d\n",a,b); }

user: user-0
content: 非常感谢,几年没用了,都忘了,居然用的space分割!别急,我找找从哪里给你分!

user: user-3
content: scanf ("%d,%d",&a,&b);   这里的格式某种程序上决定了你的输入格式.  你这里定义的是输入数据以逗号隔开, 但是你却又没有这样做. 应该输入数据为: 1,2

user: user-4
content: scanf ("%d,%d",&a,&b); 输入时要用，分割
user-0 提问: 求教一个C的double类型高精度运算的问题。有代码

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

user: user-2
content: 机器内不能很好的表示浮点数啊，这是计算机组成原理上写着的啊！除了那么偶然的数之外，其他的误差永远存在。

user: user-3
content: 也遇到过浮点数表示偏差的情况，大概和内部存储计算方式有关。误差这么小就不用纠结了
user-0 提问: 关于C语言文件操作的问题

回复:
user: user-1
content: 费那事儿！ system("copy D:\\C语言开发手册\\class15P411\\test1.txt+D:\\C语言开发手册\\class15P411\\test2.txt D:\\C语言开发手册\\class15P411\\test.txt");

user: user-2
content: 可能： 1 写入文件最后没有写结束标志 2 读合并后文件时没有先把文件指针指到起始位置

user: user-3
content: 文件内容是不是有中文？
user-0 提问: 关于lcd屏幕显示的问题

回复:
user: user-1
content: C源代码:12x12汉字点阵库(支持GBK)及其处理  http://download.csdn.net/detail/zhao4zhong1/2180241

user: user-0
content: 嗯啊，用的是点阵字库，正常的话每行高度12，高度48，刚好四行，并且规定第四行高度必须是12（作为菜单用，特殊处理），并且和第三行间距为1，这样前三行的总高度就为35。但是个别人在开发过程中只考虑了当前的情况，人为的改变行的属性，等项目合在一起编译时出现了上述问题，因为显示的字体有大写、小写、中写、英文字母也有大写和小写，特别是一些特殊的字符，如String，里面有‘S’和‘g’，‘S’能显示，‘g’的下半部分就显示不全了，被覆盖了。还有，汉字显示的话，其高度必须是12才能显示完整。

user: user-2
content: 一般高度为12的字库，其真实字体高度是11，留下最后一行来分隔行，要不然两行之间的字符会连在一起，但有些英文字符占用了最后一行，像“g”这个字符就是，这样如果只显示11行，这个字符就会显示不全，不过据我观察，所有英文字符上方均有空间，所以可以把所有英文字符和数字全部上移一行，这个操作可以在绘制字符时进行，也可以通过更改字库实现。

user: user-3
content: 引用 楼主 mingxingming 的回复:最近在做一个项目，效果是在lcd屏幕上显示四行汉字或者英文字母，可是问题是，显示的这些字母或汉字上下行会有重叠，显示不全，屏幕大小是128*48，要求是字体大小不能再修改了，行数（四行）不能改变了，每行的行距必须是等宽的（保持美观），有没有有效的解决办法呢？？？？？谢谢您们了！！！！ 不够就自己处理,128*48的矩阵很大么?

user: user-2
content: 是用的点阵字库吗，字体大小是多大的，按这个屏幕分辨率，要显示四行字体高度不能超过12。
user-0 提问: linux下的c程序，变量怎么可以随便定义

回复:
user: user-1
content: 为什么在vc6.0中写如下代码时，调用函数bioskey()无法获取键盘键码，头文件bios.h已经包含进来了。求大神指点

user: user-2
content: 引用 3 楼 u013666035 的回复:[quote=引用 2 楼 akirya 的回复:] C89下是 GCC扩展 C99 直接规定可以随意定义了。  那vs2010为什么还是不可以[/quote] VS全系列不支持C99

user: user-3
content: 引用 3 楼 u013666035 的回复:[quote=引用 2 楼 akirya 的回复:] C89下是 GCC扩展 C99 直接规定可以随意定义了。  那vs2010为什么还是不可以[/quote] 说明VS2010支持c89

user: user-4
content: 引用 3 楼 u013666035 的回复:[quote=引用 2 楼 akirya 的回复:] C89下是 GCC扩展 C99 直接规定可以随意定义了。  那vs2010为什么还是不可以[/quote] VC++6.0也不可以 编译器不同，对标准的支持程度也不同

user: user-0
content: 引用 2 楼 akirya 的回复:C89下是 GCC扩展 C99 直接规定可以随意定义了。  那vs2010为什么还是不可以

user: user-2
content: C89下是 GCC扩展 C99 直接规定可以随意定义了。

user: user-5
content: C语言中的变量就是可以随时定义的啊，不只是在Linux中
user-0 提问: C语言字符数组输出问题

回复:
user: user-0
content: 引用 6 楼 xdayong 的回复:有几个错误 第一,这里有优先级的问题，需要加小括号 while((ch=getchar())!='\n') 第二，在while循环里，在wile循环开始，需要判断i是否大于20，否则的话，会造成对内存的非法访问 { if( i>20) break; str[i]=ch; i++; } 第三，如果需要已字符串形式输出，则最好在开始初始化数组 str[i]={0},这时在while循环里，需要判断是否大于19，否则的话，字符串输出的话，多输出一些字符。  回复的很细致，受教了。没注意那么多。

user: user-1
content: 有几个错误 第一,这里有优先级的问题，需要加小括号 while((ch=getchar())!='\n') 第二，在while循环里，在wile循环开始，需要判断i是否大于20，否则的话，会造成对内存的非法访问 { if( i>20) break; str[i]=ch; i++; } 第三，如果需要已字符串形式输出，则最好在开始初始化数组 str[i]={0},这时在while循环里，需要判断是否大于19，否则的话，字符串输出的话，多输出一些字符。

user: user-2
content: 改为 while((ch=getchar())!='\n')  引用 楼主 u011656266 的回复:int j,i=0,n=0; 	char ch,str[20]; 	while(ch=getchar()!='\n') 	{ 		str[i]=ch; 		i++; 	} 	for(j=0;j<5;j++) 		printf("%c",str[j]); 这是源代码，想输出str，可是一直没法输出。感觉对着，不明白怎么回事？求解答一下。还有那个字符流读取时怎么回事？

user: user-0
content: 引用 1 楼 user-4 的回复:字符输出用:  int j,i=0,n=0; 	char ch,str[20] = {0}; 	while((ch=getchar())!='\n')//注意这里的括号，优先级顺序会错!=优先级比=高，ch变成条件判断的结果0或1 	{ 		str[i]=ch; 		i++; 	} 	str[i] = '\0'; 	printf("%s\n",str);//输入字符串  另外这里的str[20]要注意下，别输入长度超过上限。  明白了，谢谢

user: user-3
content: while(ch=getchar()!='\n') 应改为 while((ch=getchar())!='\n')

user: user-4
content: printf("%s\n",str);//输出字符串 上面的笔误：）

user: user-4
content: 字符输出用:  int j,i=0,n=0; 	char ch,str[20] = {0}; 	while((ch=getchar())!='\n')//注意这里的括号，优先级顺序会错!=优先级比=高，ch变成条件判断的结果0或1 	{ 		str[i]=ch; 		i++; 	} 	str[i] = '\0'; 	printf("%s\n",str);//输入字符串  另外这里的str[20]要注意下，别输入长度超过上限。
user-0 提问: 这个问题把我搞疯了!求指教

回复:
user: user-1
content: 是不是lz不小心误删了什么文件啊？前两天我就是不小心删了一个文件结果重新装了好几次VS2012和VS2013，都不行，唉，只好用VC6.0现在

user: user-2
content: 总是发现Path环境变量被某些软件安装时错误修改。比如带空格的目录名未加引号、带汉字的目录引起目录查找混乱等问题，严重影响系统查找可执行文件和dll。 编译此源代码，生成PathShortener.exe，然后在cmd窗口里面运行PathShortener.exe>path.txt，打开path.txt，手动将其内容拷贝粘贴覆盖修改‘我的电脑、属性、高级、环境变量、系统变量、Path、编辑、变量值’即可纠正设置错误的Path http://download.csdn.net/detail/zhao4zhong1/2652343

user: user-3
content: 引用 楼主 u011665073 的回复:我用的是visual 2010,一直出现不是内部或外部命令，也不是可运行的程序 或批处理文件。 请按任意键继续. . .这样的问题，该怎么办呢 环境变量里路径没配置，添加进去就行了

user: user-4
content: 引用 3 楼 u011665073 的回复:我是建立的32位控制台应用程序！应该没有问题！我想问一下自己亲自编程序有时候不出现问题，但是自己打开别人的或者有时候自己写的程序经常出现....exe不是内部或外部命令,也不是可运行程序或批处理文件?有时候不出现问题 我猜应该是设置问题。 楼主可以试着自己创建一个项目，再把别人写的代码导入进来。

user: user-0
content: 我是建立的32位控制台应用程序！应该没有问题！我想问一下自己亲自编程序有时候不出现问题，但是自己打开别人的或者有时候自己写的程序经常出现....exe不是内部或外部命令,也不是可运行程序或批处理文件?有时候不出现问题

user: user-5
content: 简单，卸掉不用2010不就好了，或者装VS2008， 2005一样好用，再不行VC6.0，再没有直接text编辑就好了啊。

user: user-6
content: 引用 楼主 u011665073 的回复:我用的是visual 2010,一直出现不是内部或外部命令，也不是可运行的程序 或批处理文件。 请按任意键继续. . .这样的问题，该怎么办呢你设置的启动项，或者你创建的工程是应用程序？确认可别是dll或者其它哦。
user-0 提问: c语言 关于do while 问题 

回复:
user: user-1
content: 在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。

user: user-2
content: 引用 6 楼 lin5161678 的回复:[quote=引用 5 楼 ansonzxy 的回复:] [quote=引用 4 楼 lin5161678 的回复:] [quote=引用 3 楼 ansonzxy 的回复:] 这个是 空格符 的问题，具体参照 《C PREMIER》这本书。 只要这样 scanf (" %c", &char);  //要在 %c前面加一个空格就可以了。。。。nice 就是这样 [/quote]  其实我只是知道，不知道为什么，不知道大神可否稍微解释一下？[/quote]scanf 的格式控制字符串中  空格比较特殊 它匹配0个或多个连续空白字符 [\t \r \n 空格等等] [/quote]  好！谢谢老师！！！

user: user-3
content: 引用 5 楼 ansonzxy 的回复:[quote=引用 4 楼 lin5161678 的回复:] [quote=引用 3 楼 ansonzxy 的回复:] 这个是 空格符 的问题，具体参照 《C PREMIER》这本书。 只要这样 scanf (" %c", &char);  //要在 %c前面加一个空格就可以了。。。。nice 就是这样 [/quote]  其实我只是知道，不知道为什么，不知道大神可否稍微解释一下？[/quote]scanf 的格式控制字符串中  空格比较特殊 它匹配0个或多个连续空白字符 [\t \r \n 空格等等]

user: user-2
content: 引用 4 楼 lin5161678 的回复:[quote=引用 3 楼 ansonzxy 的回复:] 这个是 空格符 的问题，具体参照 《C PREMIER》这本书。 只要这样 scanf (" %c", &char);  //要在 %c前面加一个空格就可以了。。。。nice 就是这样 [/quote]  其实我只是知道，不知道为什么，不知道大神可否稍微解释一下？

user: user-3
content: 引用 3 楼 ansonzxy 的回复:这个是 空格符 的问题，具体参照 《C PREMIER》这本书。 只要这样 scanf (" %c", &char);  //要在 %c前面加一个空格就可以了。。。。nice 就是这样

user: user-2
content: 这个是 空格符 的问题，具体参照 《C PREMIER》这本书。 只要这样 scanf (" %c", &char);  //要在 %c前面加一个空格就可以了。。。。

user: user-2
content: 又或者   char ch; while ( (ch = getchar() ) !=  '\n') continue;  也可以

user: user-4
content: 谭浩强书上写的清楚，看下吧。

user: user-5
content: 你的回车还在缓冲区呢，加个getchar()把回车读了，不然下一次循环给你读到回车！ #include <stdio.h> int main(void) {     char ch;     do {         scanf("%c",&ch);         getchar();         puts("sss");     } while(ch != 'a'); }

user: user-6
content: 在printf后面，调用下fflush(stdin);清下键盘缓冲区。清除那个回车。

user: user-7
content: 引用 楼主 u013808483 的回复:do{  }while（）；  不是说 先执行循环体一次，然后在判断while中的条件语句，若为真，在继续执行循环体吗 可是 看看这个程序，得到的结果 不是我想要的啊 求解 哪里错了    这里我输入a这个字符，while条件判断是真啊 然后应该继续循环 要求我再输入一次才对啊 怎么会这样呢？好吧 我C语言基础差 求高人们指点 弄不明白 挺纠结的。。。 这个问题吧，是因为你敲了回车，回车会存在输入缓冲区，待你下次scanf的时候获取。 这就是第二次不等你按键，就自己退出的原因。 解决办法很简单，加一个getchar();在scanf后面。 具体详细的介绍网上查下吧。
user-0 提问: 64位机器编译的SO,怎么能在32位机器上运行啊。

回复:
user: user-1
content: 无法运行。  引用 楼主 lgmsyy 的回复:64位机器编译的SO,怎么能在32位机器上运行啊。

user: user-2
content: 32位机上能不能安装个64位虚拟机？如果能，将64位SO放在此虚拟机中运行。
user-0 提问: printf函数为什么耗时？

回复:
user: user-1
content: 另外： printf 跟puts 比较起来也是很慢的，不过printf 比puts灵活多了

user: user-1
content: 重定向到文件，就快多了 写文件，比打印屏幕，快了好多倍； 话说，写文件跟，直接内存读写比起来要慢很多的倍的，但是比写屏幕要快很多。。 DOS，Windows 控制台程序 xxx.exe >xx.txt 比 xxx.exe 要快很多

user: user-2
content: 瓶颈一般都在设备IO那里。

user: user-3
content: 那是网络延迟问题吧，在服务器本地登录打印试试

user: user-4
content: 引用 4 楼 nj_wy 的回复:引用 1 楼 akirya 的回复:显示到屏幕上我要是把打印内容重定向到 /dev/null去，不知道能不能从质上改变这个状况？ 反正重定向到文件的话，会快很多很多

user: user-5
content: 感觉快没啥意思到底是给人看的，有影响的话考虑分派一个线程阻塞消磨去...

user: user-6
content: 我也没想过这事儿，学习一下

user: user-7
content: 你是telnet到设备上的吧，那个输出文字确实很慢的

user: user-8
content: printf涉及I/O

user: user-9
content: 楼主这么仔细，我从来没考虑这类问题。

user: user-10
content: 好像原来做项目的时候，printf也是非常耗性能。printf 在linux下需要系统调用write,向标准设备打印输出，这个就要从用户态向内核态切换 ，然后再从内核态切换回来，这个非常影响性能。  对于实际项目，一般不会用printf，这个影响性能，一般都用自己的一套输出函数。正式产品中不允许使用printf。 重定向可能无法改善，

user: user-11
content: 涉及到I/O就是一个耗时的动作了！

user: user-12
content: 引用 4 楼 nj_wy 的回复:引用 1 楼 akirya 的回复:显示到屏幕上我要是把打印内容重定向到 /dev/null去，不知道能不能从质上改变这个状况？ 不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！  有人说一套做一套，你相信他说的还是相信他做的？ 其实严格来说这个世界上古往今来所有人都是说一套做一套，不是吗？

user: user-13
content: 引用 4 楼 nj_wy 的回复:引用 1 楼 akirya 的回复:显示到屏幕上我要是把打印内容重定向到 /dev/null去，不知道能不能从质上改变这个状况？  应该没多大改观吧，想要了解具体细节的话，看汇编

user: user-0
content: 引用 1 楼 akirya 的回复:显示到屏幕上我要是把打印内容重定向到 /dev/null去，不知道能不能从质上改变这个状况？

user: user-12
content: 引用 1 楼 akirya 的回复:显示到屏幕上 尤其是在显示到屏幕上时需要将整个屏幕中以前显示的行上卷一行的时候！ 试对比命令行最后加“>NUL”或“>文件名”让printf的输出重定向到空设备或文件中后速度快了多少倍。

user: user-0
content: 我要是把打印内容重定向到 /dev/null去，不知道能不能从质上改变这个状况？

user: user-4
content: 显示到屏幕上
user-0 提问: 将一个数字转换为相应的字符？有不明白处，需解惑。

回复:
user: user-0
content: 果真是这样，谢谢大家了~

user: user-1
content: 就是一个函数声明吧，只不过他写在了itoa的函数内部。莫非是在这个文件中，reverse函数只想给itoa用，而对其它函数“隐藏”。所以选择在itoa的函数内部来声明？

user: user-2
content: 这种写法头一次见

user: user-3
content: 引用 楼主 u014082409 的回复:void itoa(int n, char s[]) { 	int i, sign; 	void reverse(char s[]);  	sign = n; 	i = 0; 	do{ 		s[i++] = abs(n % 10) + '0'; 	}while((n /= 10) != 0); 	if(sign < 0) 		s[i++] = '-'; 	s[i] = '\0'; 	reverse(s); }  其中，这步— void reverse(char s[ ]);貌似没有什么用。即使，把这一步直接跳过，程序一样正确。那这一步仅仅是做一个申明语句使用的？ 程序每次都是取的最右边一位数字,所以要反字符串。 如123，在上面程序中依次存入：s[0] = '3', s[1] = 2, s[2] = 3。 所以必须反转才能得出“正确”输出顺序。

user: user-4
content: 将函数原型写在另一个函数内部的人依我看都是生手。
user-0 提问: 约瑟夫问题

回复:
user: user-1
content: http://www.cnblogs.com/EricYang/archive/2009/09/04/1560478.html 搜到这个文章，写得不错

user: user-2
content: 也许，可以用数学公式，不过自己推导，估计没几个能轻易推导出来

user: user-3
content: 引用 4 楼 u010165006 的回复:约瑟夫问题好像是无法用数学公式来推理的，只能用计算机来模拟。 非也。 维基百科上搜搜看。

user: user-4
content: 约瑟夫问题好像是无法用数学公式来推理的，只能用计算机来模拟。

user: user-3
content: 规律维基百科上搜搜看。

user: user-3
content: 仅供参考：//假设有n个人团团围做，从第1个人开始数数，数到第m个人时候，第m个人出列， //然后继续从1开始数数，数到第m个人退出 #include <stdio.h> #include <conio.h> int i,k,t; int n,m; static char f[1001];//0该座位未出圈,1该座位已出圈 void main() {     while (1) {         printf("Input n m(1000>=n>=m>=1):");         fflush(stdout);         rewind(stdin);         if (2==scanf("%d%d",&n,&m)) {             if (1000>=n && n>=m && m>=1) break;         }     }     t=0;//已出圈总人数     i=1;//座位编号     k=1;//当前要数的数     while (1) {         if (0==f[i]) {             if (m==k) {                 t++;                 f[i]=1;                 printf("%3d ",i);                 if (0==t%10) printf("\n");                 if (t>=n) break;             }             k++;if (k>m) k=1;         }         i++;if (i>n) i=1;     }     cprintf("Press any key ...");     getch(); }

user: user-5
content: 这有啥原理，没意思
user-0 提问: [SWU]第四周课后的学生来信以及我的回复

回复:
user: user-0
content: 楼上说得很有道理。调试才是真正掌握的关键。 不过，很多程序员太依赖单步调试。作为程序的设计者，应该对程序流程和任何时刻的状态了如指掌。设计断点才是关键。在Linux终端下编程，使用printf比GDB更好用。

user: user-1
content: 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试是程序员必须掌握的技能之一。

user: user-2
content: 引用 2 楼 arthuryangsh 的回复:版主所讲甚是精要啊。我们还要继续努力。 厉害 牛牛的老师

user: user-3
content: 偶    fantanstic   baby

user: user-0
content: 版主所讲甚是精要啊。我们还要继续努力。

user: user-4
content: 老师的能力体现在讲课的时候如何忘却知识
user-0 提问: 求详细解释代码

回复:
user: user-0
content: 引用 1 楼 user-2 的回复:建议： 1. 单步调试。 2. 在代码中间插入打印语句。恩恩好

user: user-1
content: double mypower(double base, int exp) {     double power = 1;     if (exp < 0)         power = 1/mypower(base, -exp);//递归调用函数      else if (exp > 0)         while(exp-- > 0)//循环次数为exp              power *= base;//循环阶乘      else if(base != 0)          power = 1;     else             power = 1/base;//0的0次幂应是一个无意义数     return power; }  递归而已。。

user: user-2
content: 建议： 1. 单步调试。 2. 在代码中间插入打印语句。
user-0 提问: 为什么两个搜索LocItem1， LocItem2的返回地址p都是相同的啊？

回复:
user: user-1
content: #include <stdio.h> #include<malloc.h> typedef int elemtype; typedef struct node {   elemtype data;   struct node *next;//为什么是指针域？ }linklist;   linklist *Creatlist(void){ linklist*L; //改  linklist *Creatlist(linklist*L){   L=(linklist*)malloc(sizeof(linklist));   L->next=NULL;   return L; }   int Judge(linklist *L){   if(L->next==NULL)   {     printf("Creatlist is success.\n");   }   else     printf("Creatlist is fail.\n");   return 0; }  int Input(linklist *L,int n){   int i=1,x;   linklist *p,*r;   r=L;   if(L->next==NULL)   {     for(i=1;i<=n;i++)     {       printf("Input data %d:",i);       scanf("%d",&x);       p=(linklist*)malloc(sizeof(linklist));       p->data=x;       p->next=NULL;       r->next=p;       r=r->next;     }    }   else     printf("Input is fail.\n");   return 0; }  linklist *LocItem1(linklist *L,int n,int i){ //改  int LocItem1(linklist *L,int n,int i){   linklist *q,*p;   int j=0;   if(L->next==NULL)   {     printf("The linklist is empty\n");     return NULL;   }   else if(i>n)   {     printf("i>n is beyound\n");     return NULL;   }   else   {     q=L;     p=L->next;     while(p!=NULL&&j<i)     {       q=p;       p=p->next;       j++;     }   }   if(p==NULL)   {     printf("The node %d is not exist\n",i);     return NULL;   }   else     return p; }  linklist *LocItem2(linklist *L,int n,int item){//改  int LocItem2(linklist *L,int n,int item){   linklist *p,*q;   if(L->next==NULL)   {     printf("The linklist is empty\n");     return NULL;   }   else   {     q=L;     p=L->next;     while(p!=NULL)     {       if(p->data!=item)       {         q=p;         p=p->next;       }       else         break;     }   }   if(p==NULL)   {     printf("The node %d is not exist\n",item);     return NULL;   }   else     return p; } int main() {   int n,i,item;   long int k;   linklist *L;   L=Creatlist();//改  L=Creatlist(L);   Judge(L);   printf("Input nodes :");   scanf("%d",&n);   Input(L,n);   printf("Input i:");   scanf("%d",&i);   k=(long int)LocItem1(L,n,i); //改  k=LocItem1(L,n,i);   printf("The i %d address is %ld\n",i,k);   printf("Input item:");   scanf("%d",&item);   k=(long int)LocItem2(L,n,item);//改  k=LocItem2(L,n,item);   printf("The item %d address is %ld\n",item,k);   return 0; }

user: user-2
content: 1.为什么是指针，建议看看链表的定义 2.两个函数返回相同的地址，是不是你输入的比较巧合。上运行的结果看下
user-0 提问: 函数中形参的引用和不引用的区别？

回复:
user: user-1
content: 引用和不引用？？ 啥意思，引用参数，非引用参数之间的区别？？  还是，只有声明，函数实现的时候，没有使用；和声明的参数都用到了之间的区别？？  1） 前者，引用参数，非引用参数？？ 是地址传递（引用传递），和值传递的区别。  2）后者，只有声明，函数实现的时候，没有使用 不需要使用的数据，可以不写形式参数的名字。  有了名字，没有使用，会有警告产生。  多余的警告或者错误信息，会干扰调试的思路。。有时候要求必须去掉多余的警告。

user: user-2
content: 不用引用将是按值传递，按值传递会（在函数调用堆栈上）产生一份实参值的副本，因此在被调函数中不会对原始数据造成任何影响，因为修改的是副本，而不是原始数据。  用引用将是按引用传递，按引用传递使得被调函数可以直接访问原始数据，在被调函数中修改的数据是原始数据。

user: user-3
content: 一般形参使用const引用，防止参数拷贝带来的性能损耗。

user: user-4
content: 拷贝和不拷贝  不引用会产生不必要的拷贝，而且在函数内的修改不会影响外部的实参，比如一个swap 引用会避免拷贝，但内部的修改，会直接影响外部的实参。如果你的确不想修改外部的值，请用const引用，避免不小心修改了。  一般来说函数的参数只要非内部类型：int char等等，都应该用引用，避免不必要的拷贝。

user: user-5
content: 引用传指针；非引用传值，如果形成的size足够大，栈会爆掉。

user: user-6
content: 引用效率高。

user: user-7
content: 形参引不引用就是有没有副本的问题。如果是引用，那么实际上函数里边的参数就是调用函数时传的那个实参，如果不是引用，一般都是复制一个实参的内容给函数内的那个形参（两者值相同，但不是同一个对象）
user-0 提问: 【ＳＷＵ】　　求助

回复:
user: user-0
content: 引用 1 楼 user-1 的回复:h=s/m;   s=1;m=1;   printf("%d ",h); 这样增加两个语句应该行了     我已经明白了，不过还是谢谢。

user: user-1
content: h=s/m;   s=1;m=1;   printf("%d ",h); 这样增加两个语句应该行了
user-0 提问: 输入输出的一个函数运行出问题

回复:
user: user-1
content: 要确保目录下有你输入的那个文件

user: user-2
content: 引用 6 楼 devilplus 的回复:if(fp = NULL) 改为 if(fp == NULL)  这个正解,我调试了一下，也发现不能进入到 printf("Failed to open file. Bye\n"); 		exit(1); 里面去。

user: user-3
content: if(fp = NULL) 改为 if(fp == NULL)

user: user-0
content: 引用 1 楼 richyhuang 的回复:怎么个报错法，报什么错误，有图么   我就在这个执行文件的目录下，我建立一个TXT格式的，但是还是报错！

user: user-0
content: [quote=引用 楼主 ly114kuang 的回复:] # include <stdio.h> # include <stdlib.h>  int main() { 	int ch; 	FILE * fp; 	char fname[50];  	printf("Enter the name of the file: "); 	scanf("%s", fname);//执行到这句时，当我输入一个文件名的时候，文件名我是随便打，直接报错！ 	fp = fopen(fname, "r"); 	if(fp = NULL) 	{ 		printf("Failed to open file. Bye\n"); 		exit(1); 	}

user: user-4
content: 文件不存在的时候，fopen失败，自然会报错

user: user-2
content: 怎么个报错法，报什么错误，有图么
user-0 提问: 编写了.h和.c文件，准备生成SO文件报错如下：

回复:
user: user-0
content: 是没有引入#include <stdbool.h>  引用 4 楼 tuzhutuzhu 的回复:[quote=引用 3 楼 lgmsyy 的回复:] [quote=引用 1 楼 tuzhutuzhu 的回复:] DETECTION_STRUCT *candi-->struct DETECTION_STRUCT *candi  int testFromBuffer(int imgSize, struct DETECTION_STRUCT *candi);这个更改没问题了，但是我又加入一个布尔类型，怎么还报之前的错误呢  int testFromBuffer(int imgSize, struct DETECTION_STRUCT *candi,bool flag);[/quote] 代码跟编译报的错贴上来看看[/quote]

user: user-1
content: 引用 3 楼 lgmsyy 的回复:[quote=引用 1 楼 tuzhutuzhu 的回复:] DETECTION_STRUCT *candi-->struct DETECTION_STRUCT *candi  int testFromBuffer(int imgSize, struct DETECTION_STRUCT *candi);这个更改没问题了，但是我又加入一个布尔类型，怎么还报之前的错误呢  int testFromBuffer(int imgSize, struct DETECTION_STRUCT *candi,bool flag);[/quote] 代码跟编译报的错贴上来看看

user: user-0
content: 引用 1 楼 tuzhutuzhu 的回复:DETECTION_STRUCT *candi-->struct DETECTION_STRUCT *candi  int testFromBuffer(int imgSize, struct DETECTION_STRUCT *candi);这个更改没问题了，但是我又加入一个布尔类型，怎么还报之前的错误呢  int testFromBuffer(int imgSize, struct DETECTION_STRUCT *candi,bool flag);

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

user: user-1
content: DETECTION_STRUCT *candi-->struct DETECTION_STRUCT *candi