Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 求大家帮忙做一下这道程序设计题

回复:
user: user-1
content: //楼上是枪手 //鉴定完毕

user: user-2
content: //-------------------------------------------------- // //	功能：从键盘为一维整型数组输入10个整数，调用fun 函 //	数找出其中最小的数，并在main函数中输出。。 // //------------------------------------------------*/  #include "stdio.h" 	void wwjt();  int fun(int x[],int n) {   	/**********Program**********/   	int nMin = x[0];  	for (int i = 1;i < n; i++) 	{ 		if (nMin > x[i]) 			nMin = x[i]; 	}  	return nMin; 	/**********  End  **********/   } void main(){ 	int a[10],i,min; 	for(i=0;i<10;i++) 		scanf("%d",&a[i]); 	for(i=0;i<10;i++) 		printf("%3d",a[i]); 	printf("\n"); 	min=fun(a,10); 	printf("%d\n",min);   	wwjt(); }     void wwjt() { 	FILE *IN,*OUT; 	int in[4],out; 	IN=fopen("in.dat","r"); 	if(IN==NULL)    printf("Read FILE Error"); 	OUT=fopen("out.dat","w"); 	if(OUT==NULL)   printf("Write FILE Error");  	for(int j=0;j<5;j++) 	{  		for(int i=0;i<4;i++) 		{    			fscanf(IN,"%d",&in[i]); 		}    		out=fun(in,4); 		fprintf(OUT,"%d\n",out); 	} 	fclose(IN); 	fclose(OUT); }

user: user-2
content: /*------------------------------------------------ // 【程序设计】 // -------------------------------------------------- //  //功能：用函数求N个[10,60]上的整数中能被5整除的最大 //       的数，如存在则返回这个最大值，如果不存在则 //       返回0。 // //------------------------------------------------*/  #define N 30  #include "stdlib.h"  #include <stdio.h>  void  wwjt();    int find(int arr[],int n)  {     int m=0;    /**********Program**********/    m = arr[0];    for (int i = 1;i < N;i++)    { 	   if (0 == arr[i]%5) 	   { 		   if (m < arr[i]) 			   m = arr[i]; 	   }    }        /**********  End  **********/    return(m);  }   int main()  {    int a[N],i,k;    for(i=0;i<N;i++)      a[i]=rand()%(51)+10;    for(i=0;i<N;i++)    {      printf("%5d",a[i]);      if((i+1)%5==0) printf("\n");    }    k=find(a,N);    if(k==0)       printf("NO FOUND\n");    else      printf("the max is:%d\n",k);    wwjt();     return 0;  }   void wwjt()  {    FILE *IN,*OUT;    int n;    int i[5];    int o;    IN=fopen("in.dat","r");    if(IN==NULL)    {      printf("Read FILE Error");    }    OUT=fopen("out.dat","w");    if(OUT==NULL)    {      printf("Write FILE Error");    }    for(n=0;n<5;n++)    {          fscanf(IN,"%d",&i[n]);    }    o=find(i,5);    fprintf(OUT,"%d\n",o);    fclose(IN);    fclose(OUT);  }

user: user-3
content: 引用 4 楼 IWSo920 的回复:[quote=引用 3 楼 xihu1364 的回复:] //楼上是枪手 //鉴定完毕   "枪手"? 什么意思？[/quote] 就是帮人打手枪

user: user-0
content: 引用 3 楼 xihu1364 的回复://楼上是枪手 //鉴定完毕   "枪手"? 什么意思？
user-0 提问: 程序改错题

回复:
user: user-1
content: 第一题 a==NULL 改成 a=NULL  ,  if ( r == p ) 改成if(*r==*p)  ,if ( *r ='\0' ) a = s;改成if ( *r =='\0' ) a = s;  第二题   case 12:             len=31;             /**********FOUND**********/             break  //这里加分号;      switch(yy)改成 switch(mm)   default //加冒号：            printf("input error!\n");            break;
user-0 提问: 使用的fat32文件系统创建的文件不能读取

回复:
user: user-1
content: 推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。  试对比利用实际可用的FAT32系统创建的文件和自己创建文件的FAT表和目录表的字节差异。

user: user-2
content: 类似的东东我做过，也遇到的同样的错误，后来证实还是簇号的错误。
user-0 提问: 请教个问题！

回复:
user: user-1
content: 引用 13 楼 u012207185 的回复:赵老师，你研究过linux内核吗？ 没

user: user-0
content: 引用 9 楼 zhao4zhong1 的回复:对学习编程者的忠告： 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步对应汇编一行！  单步类的实例“构造”或“复制”或“作为函数参数”或“作为函数返回值返回”或“参加各种运算”或“退出作用域”的语句对应的汇编代码几步后，就会来到该类的“构造函数”或“复制构造函数”或“运算符重载”或“析构函数”对应的C/C++源代码处。  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对应的汇编并单步执行观察相应内存和寄存器变化。） 赵老师，你研究过linux内核吗？

user: user-0
content: 引用 11 楼 junlinfushi 的回复:[quote=引用 10 楼 u012207185 的回复:] [quote=引用 8 楼 zhao4zhong1 的回复:] 计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构…… 离散数学要不要学？[/quote]离散没用到还是别自学吧。[/quote] 本科必修的一门课哦。怎么用不到呢？

user: user-2
content: 引用 10 楼 u012207185 的回复:[quote=引用 8 楼 zhao4zhong1 的回复:] 计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构…… 离散数学要不要学？[/quote]离散没用到还是别自学吧。

user: user-3
content: 参加计算机竞赛吧！ 这样就有很多机会，敲代码了。

user: user-0
content: 引用 8 楼 zhao4zhong1 的回复:计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构…… 离散数学要不要学？

user: user-1
content: 对学习编程者的忠告： 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步对应汇编一行！  单步类的实例“构造”或“复制”或“作为函数参数”或“作为函数返回值返回”或“参加各种运算”或“退出作用域”的语句对应的汇编代码几步后，就会来到该类的“构造函数”或“复制构造函数”或“运算符重载”或“析构函数”对应的C/C++源代码处。  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: 计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……

user: user-4
content: The C program language

user: user-5
content: 《The C program language》->《c专家编程》、《c陷进和缺陷》->《Unix环境高级编程》

user: user-6
content: 建议看下 C和指针

user: user-7
content: http://bbs.csdn.net/topics/390638386  楼主看看这个

user: user-7
content: 看看 c和指针和The C program language，上面的例程都敲敲，写写代码，  有了一定的基础之后再看c专家编程，c陷进和缺陷！

user: user-0
content: 《The C program language》应该不用学了吧！
user-0 提问: 请教个问题！

回复:
user: user-1
content: 引用 7 楼 u012207185 的回复:[quote=引用 4 楼 max_min_ 的回复:] 1 执行的时候 后面跟 文件1 和文件2 2 两个文件都必须存在，且当前有权限进行读操作 3 两个文件路径必须在当前可执行目录下 当前可执行目录下指的是什么？哪个目录？[/quote]就是你当前目录下，比如C:\Users\Administrator>"……"这句 > 左边的就是你所在的目录了。dos应该会用的吧，盘符切换的话用d:就可以了，用cd XXX（文件夹路径）切换目录。

user: user-2
content: Directory Control These routines access, modify, and obtain information about the directory structure.  Directory-Control Routines  Routine Use  _chdir, _wchdir Change current working directory  _chdrive Change current drive  _getcwd, _wgetcwd Get current working directory for default drive  _getdcwd, _wgetdcwd Get current working directory for specified drive  _getdrive Get current (default) drive  _mkdir, _wmkdir Make new directory  _rmdir, _wrmdir Remove directory  _searchenv, _wsearchenv Search for given file on specified paths

user: user-3
content: 引用 1 楼 u012207185 的回复:运行结果如下：   运行不成功

user: user-0
content: 引用 4 楼 max_min_ 的回复:1 执行的时候 后面跟 文件1 和文件2 2 两个文件都必须存在，且当前有权限进行读操作 3 两个文件路径必须在当前可执行目录下 当前可执行目录下指的是什么？哪个目录？

user: user-0
content: 引用 2 楼 user-6 的回复:你贴的图写的清清楚楚！ Usage: C:\xxx\xx.exe file1 file2 意思就是说，只需要2个命令行参数！而你给了三个！！  你不加任何参数的时候，argc为1，加一个的时候argc为2，第一个argv不需要你输入，可以自动获取，就是你的可执行文件。 谢谢你啊，执行成功了！

user: user-0
content: 引用 4 楼 max_min_ 的回复:1 执行的时候 后面跟 文件1 和文件2 2 两个文件都必须存在，且当前有权限进行读操作 3 两个文件路径必须在当前可执行目录下 我那两个文件在我的文档里，和执行文件不在一个目录下。 我现在把他们剪切到和执行文件一个目录下，运行不了了，Could not open file！

user: user-4
content: 1 执行的时候 后面跟 文件1 和文件2 2 两个文件都必须存在，且当前有权限进行读操作 3 两个文件路径必须在当前可执行目录下

user: user-5
content: 应该是和你的执行文件在同一路径下吧~~~

user: user-6
content: 你贴的图写的清清楚楚！ Usage: C:\xxx\xx.exe file1 file2 意思就是说，只需要2个命令行参数！而你给了三个！！  你不加任何参数的时候，argc为1，加一个的时候argc为2，第一个argv不需要你输入，可以自动获取，就是你的可执行文件。

user: user-0
content: 运行结果如下：
user-0 提问: 关于feof()函数的一个问题

回复:
user: user-0
content: 引用 1 楼 N_sev7 的回复:因为feof只是返回系统的一个statment的值，它是要fgetc fgets fread等等系统调用修改的。 fseek(fp, 0, SEEK_END)后文件指针指向size,如果此时feof(fp)的话，是不会返回非0的，原因就是根本没有系统调用改变了那个statment的值。所以还是返回0，这样如果不做判断直接fgetc的话，就会获得一个-1,当然也因为这个-1系统改变了statment的值，所以 先 fseek(fp, 0, SEEK_END 然后 fgetc（） 之后再 调用feof的时候就会返回非0  在百度上这样说： “ “C”语言的“feof()”函数和数据库中“eof()”函数的运作是完全不同的。数据库中“eof()”函数读取当前指针的位置，“C”语言的“feof()”函数返回的是最后一次“读操作的内容”。多年来把“位置和内容”相混，从而造成了对这一概念的似是而非。  那么，位置和内容到底有何不同呢？举个简单的例子，比如有人说“你走到火车的最后一节车箱”这就是位置。而如果说“请你一直向后走，摸到铁轨结束”这就是内容。也就是说用内容来判断会“多走一节”。这就是完全依赖于“while(!feof(FP)){...}”进行文件复制时，目标文档总会比源文档“多出一些”的原因。  ” 应该就是你说，指针先到位置，然后用fgetc()读取到这个位置的内容，才有这个statment的值，我这样理解对吧？

user: user-1
content: 引用 1 楼 N_sev7 的回复:因为feof只是返回系统的一个statment的值，它是要fgetc fgets fread等等系统调用修改的。 fseek(fp, 0, SEEK_END)后文件指针指向size,如果此时feof(fp)的话，是不会返回非0的，原因就是根本没有系统调用改变了那个statment的值。所以还是返回0，这样如果不做判断直接fgetc的话，就会获得一个-1,当然也因为这个-1系统改变了statment的值，所以 先 fseek(fp, 0, SEEK_END 然后 fgetc（） 之后再 调用feof的时候就会返回非0  学习了

user: user-2
content: int fgetc(FILE *stream) fgetc returns the next character of stream as an unsigned char (converted to an int), or EOF if end of file or error occurs. 次函数的运行导致文件指针结构体中的元素变化，此变化由下面的函数检测   int feof(FILE *stream) feof returns non-zero if the end of file indicator for stream is set.

user: user-3
content: 你先查一下feof和fgetc这两个函数：  fgetc: Returns the character currently pointed by the internal file position indicator of the specified stream. The internal file position indicator is then advanced to the next character.  If the stream is at the end-of-file when called, the function returns EOF and sets the end-of-file indicator for the stream (feof). feof: Check end-of-file indicator Checks whether the end-of-File indicator associated with stream is set, returning a value different from zero if it is.  This indicator is generally set by a previous operation on the stream that attempted to read at or past the end-of-file.

user: user-4
content: 这应该是feof函数的问题， http://baike.baidu.com/view/656648.htm

user: user-5
content: 因为feof只是返回系统的一个statment的值，它是要fgetc fgets fread等等系统调用修改的。 fseek(fp, 0, SEEK_END)后文件指针指向size,如果此时feof(fp)的话，是不会返回非0的，原因就是根本没有系统调用改变了那个statment的值。所以还是返回0，这样如果不做判断直接fgetc的话，就会获得一个-1,当然也因为这个-1系统改变了statment的值，所以 先 fseek(fp, 0, SEEK_END 然后 fgetc（） 之后再 调用feof的时候就会返回非0
user-0 提问: Linux下编写线性链表出现段错误，求解～～

回复:
user: user-1
content: 说错了，因该是指针本身是一个普通的变量（即指针本身是一个值传递），*p才表示你指针所指的变量（这个变量传递的是地址），而你的malloc操作是针对指针本身，和传进来的 变量的地址 是无关的，你可以用二维指针做参数（把指针的地址也传进来）来验证下。

user: user-2
content: 参考前面。。想通过参数返回指针，至少二级。。建议用函数返回值返回指针。。基础啊。。。。。。

user: user-3
content: 进程意外退出会在当前目录下产生‘core’文件或形如‘core.数字’的文件比如‘core.1234’ 使用命令 gdb 运行程序名 core或core.数字 进入gdb然后使用bt命令 可以查看进程意外退出前函数调用的堆栈，内容为从上到下列出对应从里层到外层的函数调用历史。 如果进程意外退出不产生core文件，参考“ulimit -c core文件最大块大小”命令

user: user-4
content: 参考一楼，创建链表的时候，返回值不太对

user: user-1
content: malloc之后，之前的指针地址就无效了，就是说操作的不是一块空间，所以即使是指针也是没用的，必须返回该指针。C++可以用引用，引用是变量的别名，和该变量一直绑定在一起，所以没关系。 参考1楼的代码就可以了。

user: user-5
content: #include<stdio.h> #include<malloc.h>  typedef struct LNode {         int data;         struct LNode *next; }LNode, *LinkList;          LinkList *CreateList_L(){         LinkList L = NULL;         L = (LinkList)malloc(sizeof(LNode));         L->data = 0;         L->next = NULL;         return L; }//CreateList_L  void ListInsert_L(LinkList L, int i, int e){         LinkList p = L;         LinkList s;         int j = 1;         while(p && j<i){                 p = p->next;                 ++j;         }         if( !p || j>i ){                 printf("error!\n");                 return;         }         s = (LinkList )malloc(sizeof(LNode));         s->data = e;         s->next = p->next;         p->next = s;         L->data = L->data + 1;         return; }//ListInsert_L          int main(){         LinkList La = CreateList_L();         ListInsert_L(La, 1, 10);         printf("%d\n", La->next->data);         return 0; }  粗略修改了下！
user-0 提问: 大神来支招！~TC下的代码在VS2012中怎么执行？

回复:
user: user-1
content: 自己去做吧。 估计也就写个动态库什么的。 虽然没有一一对应的，还是有大概对应的东西的。

user: user-2
content: http://www.easyx.cn

user: user-0
content: 1楼的回答没有明白我的意思，或许是我没有表达清楚我的意思吧！ 2楼的回答有点明白我的意思！其实我就是想问，既然VS2012不支持TC下的这些函数，是否有其它函数可以替代之，从而可以在VS2012下输出同样的结果！

user: user-3
content: 觉得没必要去深究那些函数，以后会学到更好的工具用来替代，当然写出来了也是挺有意思的（以前就是直接载TurboC编译器来写的）

user: user-4
content: VS2012不支持你用的conio；如果需要类似的功能可以使用ncurses，Windows上也有： Ncurses for Windows

user: user-5
content: 安装DOS 6.22虚拟机，在上面安装Turbo C2.0进行编译运行。  引用 楼主 yerssa 的回复:#include <stdio.h> #include <conio.h> void main() { int i; char * s[] = {"BLACK","BLUE","GREEN","CYAN","RED","MAGENTA","BROWN","LIGHTGRAY"}; textmode(C80); textbackground(0); clrscr(); for (i = 1 ; i < 8 ; i ++) { window(10 + i * 5 , 30 + i * 5 , 15 + i); textbackground(i); clrscr(); textcolor(7 + i); if (i % 2 == 0) { highvideo(); } else lowvideo(); cputs(s[i]); } getch(); } 这段在TC下编写的代码，想在VS2012中运行看下效果，但很多函数都不支持，怎么办呢？
user-0 提问: 指点迷津！加了头文件，为什么还提示未定义？

回复:
user: user-1
content: conio.h是DOS下的。  引用 楼主 yerssa 的回复:#include <stdio.h> #include <conio.h> int main(void) { textmode(BW80); cprintf("BW80"); getch(); textmode(C80); cprintf("C80"); getch(); textmode(BW40); cprintf("BW40"); getch(); textmode(C40); cprintf("C40"); getch(); textmode(MONO); cprintf("MONO"); getch(); return 0; } [/code]VS2012 ,不是加头文件了嘛，怎么还显示textmode（）函数未定义？

user: user-2
content: conio.h不是c语言标准函数库，不同编译环境下它的内容是不同的 楼主这段代码大概是在TC下编写的吧，在VS下没有textmode这个函数
user-0 提问: 请问：如何定义返回值为多维数组（例如二维）的地址函数？

回复:
user: user-1
content: char (*)retptr(char (*ptr)[MAX], int n)[MAX]｛  return ptr;  ｝ 这么处理，没问题。 #define MAX 1000  typedef char (*char_arr_ptr)[MAX]; char_arr_ptr retptr(char (*ptr)[MAX],int n){ return ptr; }

user: user-1
content: 记得好像要这么写！ char (*)retptr(char (*ptr)[MAX], int n)[MAX];

user: user-2
content: 引用 3 楼 mcmay 的回复:[quote=引用 1 楼 user-6 的回复:] ok的吧 warning而已，你run的时候有什么bug？ 也没有什么bug之类的，但需要有个正式的格式吧？如果是返回多维（超过两维）那不是需要多几个星号？[/quote]  不转型你的编译器只是给的warning？我的咋报error了呢，而且static_cast<char**>也不行，都必须是reinterpret_cast<char**>  #define MAX 20 char** retptr(char (*ptr)[MAX], int n) {     return ptr; }  In function 'char** retptr(char (*)[20], int)':| error: cannot convert 'char (*)[20]' to 'char**' in return|

user: user-3
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-4
content: 你这样写 char **retptr(char **ptr, int n) 就可以了。

user: user-0
content: 引用 2 楼 Ronux 的回复:没问题，不想看到warning，可以加上强制类型转换 如何加类型转换？

user: user-0
content: 引用 1 楼 user-6 的回复:ok的吧 warning而已，你run的时候有什么bug？ 也没有什么bug之类的，但需要有个正式的格式吧？如果是返回多维（超过两维）那不是需要多几个星号？

user: user-5
content: 没问题，不想看到warning，可以加上强制类型转换

user: user-6
content: ok的吧 warning而已，你run的时候有什么bug？
user-0 提问: 素数的Miller_Rabbin测试 问题！！！（希望都能看看~）

回复:
user: user-1
content: 引用 3 楼 xw514124205 的回复:[quote=引用 1 楼 FancyMouse 的回复:] >在a不等于1的时候，则d*2^r-1 = 0 没有人告诉你有这回事。指数函数不就是这样的吗，而且a的值一定大于2嘛，那指数只能为0了帮帮忙[/quote] 说明你不懂模算术。连你贴的第一句话的费马小定理都还没懂。你仔细读读你贴的这段文字第一行是啥。

user: user-0
content: 引用 1 楼 FancyMouse 的回复:>在a不等于1的时候，则d*2^r-1 = 0 没有人告诉你有这回事。指数函数不就是这样的吗，而且a的值一定大于2嘛，那指数只能为0了帮帮忙

user: user-2
content: 数论玩不起呀

user: user-0
content: 引用 4 楼 FancyMouse 的回复:[quote=引用 3 楼 xw514124205 的回复:] [quote=引用 1 楼 FancyMouse 的回复:] >在a不等于1的时候，则d*2^r-1 = 0 没有人告诉你有这回事。指数函数不就是这样的吗，而且a的值一定大于2嘛，那指数只能为0了帮帮忙[/quote] 说明你不懂模算术。连你贴的第一句话的费马小定理都还没懂。你仔细读读你贴的这段文字第一行是啥。[/quote] Miller和Rabin两个人的工作让Fermat素性测试迈出了革命性的一步，建立了Miller-Rabin素性测试算法。新的测试基于下面的定理：如果p是素数，x是小于p的正整数，且x2 mod p = 1，那么要么x=1，要么x=p-1。这是显然的，因为x2 mod p = 1相当于p能整除x2-1，也即p能整除(x+1)(x-1)。由于p是素数，那么只可能是x-1能被p整除(此时x=1)或x+1能被p整除(此时x=p-1)。 红色部分改成那么要么x=1 mod p，要么x=p-1 mod p 我就能好理解多了~

user: user-3
content: Finding prime numbers - Kenneth Haugland Different schemas for finding prime numbers explained with code http://www.codeproject.com/Article.aspx?tag=198374988322054872&

user: user-1
content: >在a不等于1的时候，则d*2^r-1 = 0 没有人告诉你有这回事。
user-0 提问: 【双十一到了，准备买书了么？】推荐几本c/c++入手的书籍

回复:
user: user-1
content: c pp怎么没有

user: user-2

user: user-3
content: 现在新手应该买什么书？？？

user: user-4
content: 谢谢楼主的分享！！！

user: user-5
content: 程序员要看这么多书

user: user-6
content: C++ primer真是永恒的经典……

user: user-7
content: 我也去买来看看

user: user-8
content: 真心不错啊，赞一个

user: user-9
content: 灰常好的，谢谢楼主

user: user-10
content: 遇见本贴必赞

user: user-11
content: 新手求教啊 顶个

user: user-12
content: 大家能否推荐几本入门级的DEV C++的书啊

user: user-13
content: 都是经典，希望能都好好阅读以下

user: user-14
content: 这些书真心不错，顶一个

user: user-15
content: 本打算想学C++,但一看到要看这么多书，顿时力不从心啊

user: user-16
content: mark一下，有时间看看，虽然离c++越来越远

user: user-17
content: 哈哈~~看经典书籍

user: user-18
content: 引用 36 楼 u012271055 的回复:都是杀死脑细胞的书！！！

user: user-19
content: mark, LZ thanks

user: user-20
content: 引用 7 楼 caozhy 的回复:今年快过完了，这本书是我看到的今年最佳（其实这书去年就出了）   非技术书。看过哎~~
user-0 提问: #define CMPAPIENTRY CMPEXPORT CMPRESULT CMPCALL

回复:
user: user-0
content: #define CMPAPIENTRY CMPEXPORT CMPRESULT CMPCALL 不好意思。

user: user-0
content: 引用一个个展开就好。  引用 1 楼 yunlongluo 的回复: C/C++ code  #define CMPAPIENTRY CMPEXPORT CMPRESULT CMPCALL  不好意思。 不好意思，还是不太明白，能举个例子解释下吗？

user: user-0
content: 不好意思，还是不太明白，能举个例子解释下吗？

user: user-1
content: 一个个展开就好。  引用 1 楼 yunlongluo 的回复:#define CMPAPIENTRY CMPEXPORT CMPRESULT CMPCALL 不好意思。
user-0 提问: 莱鸟求助：c语言写的复数四则运算！！——输入第二个时就不行了，为什么啊~~

回复:
user: user-0
content: [quote=引用 5 楼 zh19921107 的回复:谢谢 	float a,b,c,d; 	Complex   *c1,*c2,*Sum,*Sub,*Mul;  	//指针要先申请空间啊 	c1=(Complex*)malloc(sizeof(Complex)); 	c2=(Complex*)malloc(sizeof(Complex)); 	Sum=(Complex*)malloc(sizeof(Complex)); 	Sub=(Complex*)malloc(sizeof(Complex)); 	Mul=(Complex*)malloc(sizeof(Complex));[/quote]

user: user-0
content: 谢谢各位，已经改好了

user: user-1
content: float a,b,c,d; 	Complex   *c1,*c2,*Sum,*Sub,*Mul;  	//指针要先申请空间啊 	c1=(Complex*)malloc(sizeof(Complex)); 	c2=(Complex*)malloc(sizeof(Complex)); 	Sum=(Complex*)malloc(sizeof(Complex)); 	Sub=(Complex*)malloc(sizeof(Complex)); 	Mul=(Complex*)malloc(sizeof(Complex));

user: user-2
content: Complex   *c1,*c2,*Sum,*Sub,*Mul; //这些都是指针类型哦，没有给谈们分配内存的，所以错了  scanf()//为格式化函数，怎么的格式都要对应起来，

user: user-3
content: 你的输入有问题，输入提示说用空格隔开。scanf("%f %f",&a,&b);这句当中也是用空格隔开 但是你输入的时候却是用，隔开当然会错误了。 你改成scanf("%f%f",&a,&b);去掉当中的空格就可以任意格式了

user: user-0
content: 感谢指点，我再看一看

user: user-4
content: 呵呵，这是逻辑错误啊，你再捋一遍吧，不行就跟着一步一步的调试一下！
user-0 提问: 为什么说常量没有地址？

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

user: user-2
content: 引用 19 楼 drlsdrls 的回复:学过单片机的人一般都不会问这种问题 同意

user: user-3
content: 学习了 。。。。

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

user: user-4
content: 引用 5 楼 Adol1111 的回复:楼上的说法都是有问题的，C/C++只有文字常量区，保存的是"hello world"这类字符串。对于1、2、3、'a'这类的数，它们是存放在寄存器上的，没有所谓的内存地址。  C/C++只可以用指针取字符串常量的地址，该类被认为是左值，而其他的字面值常量（literal constant），则被认为是右值，不允许取地址。至于const常量，只能说是一个const修饰的只读变量，和字面值常量不同。

user: user-5
content: 有种东西叫立即数。

user: user-6
content: 有个印象，说是什么被分配在寄存器上面。好像就是常量吧

user: user-6
content: 常量被分配在寄存器上面，是这样不？

user: user-7
content: 引用 30 楼 hangang7403 的回复:常量分几种情况：1、用#define定义的宏，此时其实它是立即数，在编译的时候，会直接写入程序不会占空间 2、用定义一个变量存储了一个常数（其实这时候是一个变量了，要占RAM空间的）； 3、定义在ROM中，如“__ROM"来声明，这时候就占ROM,而不是RAM，我们所说的内存指RAM，所以不占内存。 +1

user: user-1
content: 不要纠结各种常量了，这个世界上唯一不变的就是变化。用API WriteProcessMemory还能修改正运行的其它进程的内存里面的所谓常量呢！

user: user-8
content: 常量存储在全局数据区，是有地址的。

user: user-9
content: 都是有地址的，自己看内存空间吧，好像可以在VC++6.0里调试时看！

user: user-10
content: 要说明这个问题，必须了解cpu的寻址模式，也就是获得数据的方式，一般有寄存器寻址、内存寻址、立即数寻址、变址寻址等方式 常量是会被编译成立即寻址的方式，所谓立即寻址就是常量值作为cpu执行指令的一部分，它不需要另外的寄存器或者内存的支持

user: user-11
content: 引用 22 楼 zhao4zhong1 的回复:因为说这句话的人不懂汇编。 http://bbs.csdn.net/topics/390627329 仔细看了下，屌炸了。 佩服了。

user: user-12
content: 什么是常量？ 什么是rvalue？

user: user-13
content: 涨知识了

user: user-14
content: 常量分几种情况：1、用#define定义的宏，此时其实它是立即数，在编译的时候，会直接写入程序不会占空间 2、用定义一个变量存储了一个常数（其实这时候是一个变量了，要占RAM空间的）； 3、定义在ROM中，如“__ROM"来声明，这时候就占ROM,而不是RAM，我们所说的内存指RAM，所以不占内存。

user: user-15

user: user-16
content: 引用 6 楼 mr_chenping 的回复:我只说两点： 1、字符串常量是有地址的 p="fuck". 2、数据常量如5、6等，不需要地址存放，它作用是来初始化或者赋值， 左值就成了它的地址，如 int fuck=5.我们使用时是使用fuck，而不是使用5.非要用这个单词吗？为何这样教坏小朋友，可以用gan、cao、cha等简单的单词呀

user: user-17
content: 常量可以有地址，也可以没有。 因此，取常量的地址，可能是错误的。 尤其是，C++整型常量。 最好不要取常量的地址。
user-0 提问: 求助大神，这个程序为什么错了？

回复:
user: user-1
content: 这道题目目的是什么你都不说··

user: user-2
content: for(p=a;p<a+10;p++) if(*p>*(p+1)) //当p指向最后一个数组元素时, p+1越界 { t=*p; *p=*(p+1); *(p+1)=t; }  另外排序遍历时可以减少一次循环. 整个升序排序改动如下   for(i=1;i<10;i++){ 			for(p=a;p<a+10-i;p++){ 				if(*p>*(p+1)) 				{ 					t=*p; 					*p=*(p+1); 					*(p+1)=t; 				} 			} 		}
user-0 提问: majority算法的执行过程到底是怎么样的啊？？？

回复:
user: user-1
content: 女神来这里问问题了。。。

user: user-2
content: 核心思想就是:如果某个数在数组中占多数,那么同时去除一个和该数不同的数,该数仍然在数组中占多数。 巜编程之美＞＞中有寻找发帖水王的例子正是该算法的一个例子。

user: user-3
content: lz为什么不先搜索一下呢，相信下面的链接可以帮到你： http://hi.baidu.com/gfang/item/5706373b65a88ec7392ffa94
user-0 提问: 函数递归的问题

回复:
user: user-1
content: 改成尾递归。 少用全局变量或static

user: user-2
content: 引用 9 楼 lm_whales 的回复:静态变量，定义在递归函数内部时，无法多次初始化。 当其它函数，调用递归函数两次以上时，就会出问题。 初始化放在其他地方呢？

user: user-3
content: 静态变量，定义在递归函数内部时，无法多次初始化。 当其它函数，调用递归函数两次以上时，就会出问题。

user: user-3
content: 另外这个函数，写的有问题 float res ;  res 没有初始化,a >= b  的时候，返回值不确定。 这应该不是，这个函数所需要的吧。   写成这样是否能达到你的目的？  float fun(int a,float b) {     float res = 0;     float sqrt();     if (a < b)         res = sqrt(1 + (a + 1)* fun(a + 1,b));     else         return res; }

user: user-3
content: 其实可以写个函数，调用那个递归函数，外部不使用递归函数。

user: user-3
content: 引用 10 楼 wanglui1990 的回复:[quote=引用 9 楼 lm_whales 的回复:] 静态变量，定义在递归函数内部时，无法多次初始化。 当其它函数，调用递归函数两次以上时，就会出问题。 初始化放在其他地方呢？[/quote] 全局变量，或者文件静态变量之类的，是可以的。  需要在，每次外部调用递归函数之前，重新把这个变量初始化（赋值） 这样一来，还不如传递参数简单。

user: user-4
content: if (a < b)         res = sqrt(1 + (a + 1)* fun(a + 1)); //人品不差，不过改return较妥...     else         return res; //这个值貌似未初始化，也拼人品是么...

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

user: user-6
content: 静态肯定可以，但你应该没a++之类的语句吧，使a增长吧。而且没看出来哪里递归了。

user: user-0
content: 引用 6 楼 max_min_ 的回复:[quote=引用 5 楼 manjucaka 的回复:] [quote=引用 1 楼 user-9 的回复:] 将a设置为static变量就可以了 int a = 1;改为 static int a = 1静态变量不行[/quote]  可以的吧！ 静态变量！  传参数也行， 全局变量也行！[/quote] 试过了，不行，全局也是不行

user: user-7
content: 引用 5 楼 manjucaka 的回复:[quote=引用 1 楼 user-9 的回复:] 将a设置为static变量就可以了 int a = 1;改为 static int a = 1静态变量不行[/quote]  可以的吧！ 静态变量！  传参数也行， 全局变量也行！

user: user-0
content: 引用 1 楼 user-9 的回复:将a设置为static变量就可以了 int a = 1;改为 static int a = 1静态变量不行

user: user-0
content: 引用 2 楼 baichi4141 的回复:把a和b一起传给函数 可以了

user: user-3
content: 引用 2 楼 baichi4141 的回复:把a和b一起传给函数++

user: user-8
content: 把a和b一起传给函数

user: user-9
content: 将a设置为static变量就可以了 int a = 1;改为 static int a = 1
user-0 提问: c语言两个指针可以传递地址吗

回复:
user: user-1
content: 学习了，谢谢大家，每人十分

user: user-2
content: a+0 是一个地址，也就是一个常量，不能被修改的。

user: user-3
content: 这个和数组不可以做左值的意思差不多。数组名只是一个标识，或者这儿认为其就是一个地址值。既然，地址值是常量，怎么可以做左值呢。

user: user-4
content: a+0 = a+3; a+3 = b; 这样做不行的！数组名不能作左值，数组名是常量指针的！ 加一个指针来作中间变量吧！

user: user-5
content: 引用 2 楼 gigglesun 的回复:a+0不是变量名，是一个具体的值了，常值不能被赋值  更进一步：数组名不是变量，不能做 左值

user: user-6
content: 不知道你想干什么 首先：  if (*(a+0) < *(a+3)) { b = a+0;  // 这个赋值是可以的 a+0 = a+3;// a+0是常量不能被修改，就是a=a+3;也不行，a是数组首地址，是const的，不能修改 a+3 = b;  // 错, 同上 }  如果你想交换3和54，可以用  int n = *a; a[0] = a[3]; a[3] = n;

user: user-7
content: a+0不是变量名，是一个具体的值了，常值不能被赋值

user: user-8
content: a+0 = a+3; a+3 = b; 这两句是有问题的，=左边的a+0和a+3都是右值是不可能赋值的，你想交换内容的话，应该是 b=a[0];//或者b=*(a+0) a[0]=a[3]; a[3]=b;swap的方法还有很多，自己多试试。不过注意下数组地址是不能修改的，不要用a=b之类的语句。
user-0 提问: 关于C语言的一道题

回复:
user: user-1
content: 上面少些个大括号，不好意思  char* decode(char* dest, const char* src) {     char c, *p = dest;     for(; c = *src; ++src, ++p){         if(c == ' ') *p = 'j';         else if(c > 'z' || c < 'a') *p = c;         else if(c - 'a' <= 9) *p = c - 'a' + '0';         else if(c - 'a' <= 18) *p = c - 10;         else{              switch(c){                  case 't': *p = '@'; break;                  case 'u': *p = '#'; break;                  case 'v': *p = '$'; break;                  case 'w': *p = '%'; break;                  case 'x': *p = '&'; break;                  case 'y': *p = '!'; break;                  case 'z': *p = '*'; break;             }         }     }     *p = '\0';     return dest; }

user: user-1
content: lz刚学C吗，字节要多练哦，下面的代码仅供参考  char* decode(char* dest, const char* src) {     char c, *p = dest;     for(; c = *src; ++src, ++p){         if(c == ' ') *p = 'j';         else if(c > 'z' || c < 'a') *p = c;         else if(c - 'a' <= 9) *p = c - 'a' + '0';         else if(c - 'a' <= 18) *p = c - 10;         else switch(c){                  case 't': *p = '@'; break;                  case 'u': *p = '#'; break;                  case 'v': *p = '$'; break;                  case 'w': *p = '%'; break;                  case 'x': *p = '&'; break;                  case 'y': *p = '!'; break;                  case 'z': *p = '*'; break;              }         }     }     *p = '\0';     return dest; }

user: user-2
content: 说说我的思路，建立一个电文和译文一一对应的线性表，由于a,b,c,...，z是顺序的可以用数组结构，查表复杂度为O（1）。对已给定序列依次取出其中元素，如果遇到空格则转换为j，如果不是空格则查表取得对应转换的字符，知道电文末尾
user-0 提问: c语言文件问题

回复:
user: user-1
content: 先分清楚2进制模式和文本模式的差别...

user: user-2
content: 写文件错误 屯是0xcdcd，明显是在VS的调试模式下把未赋值的栈内存写进去了

user: user-3
content: 你的文件不支持，---- 实际是操作系统，或者编辑器不支持---双字节字符，直接.txt 格式查看。

user: user-4
content: 代码太少，你应该看看你文件操作部分（打开、读取、关闭），是不是都是正确的。我想应该是你读取文件了，但是操作之前应该判断读出来的是否是你想要的，毕竟字段之间还有空格或者tab键。这写内容也是会读出的。但是显示的时候课可能就是乱码了。
user-0 提问: 以每行一个单词的形式打印其输出，用数组时输出的每行的一个字符都是取址符？？

回复:
user: user-0
content: a!it should be s[0]=c!! 又犯二了

user: user-1
content: c=s[0] ???  s[0] == ?????????

user: user-0
content: 自己帮顶一下~ 弱菜新手好纠结~~
user-0 提问: c语言 文件

回复:
user: user-1
content: 桌面上？你的源文件放在那里？

user: user-0
content: 太感谢了！！

user: user-2
content: if((fp=fopen("file1.txt","w"))==NULL) { printf("meichaodao\n"); fprintf(stderr, "%d : %s\n", __LINE__, strerror(errno)); getch(); exit(1); } 不好意思，有问题，现在改过来了。

user: user-2
content: printf("meichaodao\n"); 这条语句是否打印，如果打印了那是没建立文件。你也可以加上一句  if((fp=fopen("file1.txt","w"))==NULL) { printf("meichaodao\n"); fprintf(stderr, "%d : %s\n", strerror(errno)); getch(); exit(1); }   如果没打印那句话，那么查看一下你的文件保存路径。
user-0 提问: 如何灵活快捷的存储多媒体缓存

回复:
user: user-1
content: P2P是将文件分块存储的，元信息(meta)无非就是一个文件有多少块，每块多大，每块的sha1/md5。

user: user-2

user: user-3
content: 日哦，搞终端的，虽然经常接触流，但也只会用，不会编啊，坐等big cow

user: user-0
content: 自顶 就关注。。。

user: user-0
content: 自顶 就关注。。。
user-0 提问: 程序的效率问题

回复:
user: user-0
content: 引用 3 楼 cfjtaishan 的回复:效率上考虑，需要从时间和空间两方面考虑的吧。 但从时间上考虑，第二种循环的次数较第一种循环次数少哦。所以，第二种效率稍微高一些。 确实是这样的，但是有没有更高的方法呢？

user: user-1
content: 效率上考虑，需要从时间和空间两方面考虑的吧。 但从时间上考虑，第二种循环的次数较第一种循环次数少哦。所以，第二种效率稍微高一些。

user: user-0
content: 引用 1 楼 user-2 的回复:都不高，判断是否是质数，只要从2到 根号n就可以，第二个虽然是i不会超过根号n，但是循环每次都做乘法，没有必要 int mMax=sqrt(n); for(i=2;i<=mMax;i++)   if(n % i==0) return false; return true; 额，这个我也知道，只是不想调用math头文件了

user: user-2
content: 都不高，判断是否是质数，只要从2到 根号n就可以，第二个虽然是i不会超过根号n，但是循环每次都做乘法，没有必要 int mMax=sqrt(n); for(i=2;i<=mMax;i++)   if(n % i==0) return false; return true;

user: user-1
content: 引用 4 楼 siaswj 的回复:[quote=引用 3 楼 cfjtaishan 的回复:] 效率上考虑，需要从时间和空间两方面考虑的吧。 但从时间上考虑，第二种循环的次数较第一种循环次数少哦。所以，第二种效率稍微高一些。 确实是这样的，但是有没有更高的方法呢？[/quote] 你的第二种方法和调用数学库函数sqrt很相似，或者说就是一个思路。
user-0 提问: 麻烦各位前辈进来帮我找下错误-关于建立一个矩阵

回复:
user: user-1
content: 额  我以为你要求矩阵中最大的数，看错了，不好意思

user: user-0
content: 引用 4 楼 N_sev7 的回复:[quote=引用 2 楼 sbtxt 的回复:] 谢谢大哥，你是我的恩人。才开始学C语言，很多地方不还不懂。太感谢你了。 以后像这样的判断是否相等的表达式，最好写成  NULL == p[i]    ////这样即使你不注意少写一个"="号，编译器也能帮你检查出来错误 [/quote] 嗯 谢谢你的指导。

user: user-0
content: 引用 3 楼 N_sev7 的回复:[quote=引用 2 楼 sbtxt 的回复:] 谢谢大哥，你是我的恩人。才开始学C语言，很多地方不还不懂。太感谢你了。 貌似你的打印的最大值的行列结果是错误的...[/quote] 是错的吗？我重新试了下，没错啊。

user: user-1
content: 引用 2 楼 sbtxt 的回复:谢谢大哥，你是我的恩人。才开始学C语言，很多地方不还不懂。太感谢你了。 以后像这样的判断是否相等的表达式，最好写成  NULL == p[i]    ////这样即使你不注意少写一个"="号，编译器也能帮你检查出来错误

user: user-1
content: 引用 2 楼 sbtxt 的回复:谢谢大哥，你是我的恩人。才开始学C语言，很多地方不还不懂。太感谢你了。 貌似你的打印的最大值的行列结果是错误的...

user: user-0
content: 谢谢大哥，你是我的恩人。才开始学C语言，很多地方不还不懂。太感谢你了。

user: user-1
content: if(p[i]=NULL)  //////p[i] = NULL 确定不是  p[i] == NULL { printf("No enough memory!\n"); freeMemory(p,row); return; }
user-0 提问: c语言结构体和指针的问题

回复:
user: user-0
content: 太感谢了！！

user: user-1
content: 没有分配内存，非法访问， 看看 已经帮你修改过来了  #include<stdio.h> #include<stdlib.h>  struct inf { 	int num;	 	char name[12]; };  int main() { 	FILE *fp; 	struct inf *p = (struct inf *)malloc(sizeof(struct inf)); 	scanf("%d",&p->num); 	scanf(" %s",p->name); 	fp=fopen("test.txt","wb");  	if (fp == NULL)   	{   	    printf("open the file failed!\n"); 	    return 0;	      } 	fwrite(p,sizeof(struct inf),1,fp);// 检查下返回值  	 	printf("%d \n",p->num); 	printf("%s\n",p->name); 	fclose(fp); 	return 0; }

user: user-2
content: struct inf *p; 你这个指针指向谁呢？你没有实际定义
user-0 提问: c语言链表中的文件问题

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

user: user-2
content: n = sizeof(*fp)错了，n不是那个文件的大小，而是FILE的大小。FILE在C里面自己有一个结构体，主要记录的是缓存区的一些信息。你要取整个文件大小的话估计要读取一遍把。不然你直接依次读取一个struct inf大小，结束判定条件是是否为空。

user: user-3
content: n=sizeof(*fp);获取到的就不是文件大小！

user: user-4
content: ftell(fp)应该可以！

user: user-1
content: n=sizeof(*fp); 应改为 n=_filelength(_fileno(fp));//仅windows下

user: user-5
content: rb是以二进制的方式读取文件。留住存放的时候是以这种形式存放的嘛？而且存储的结构体 楼主没有贴出代码，不知道是不是定长，或者结构体对齐。 如果楼主是手动写的文件，一行一条的话 那就直接以r的方式打开。 用fscanf就可以了。

user: user-6
content: "sizeof不能测fp所指向的全体的大小吗？"  sizeof(*fp)不能测fp所指向的全体的大小。sizeof(*fp)返回类型FILE的大小。  以下代码可得到fp所指向的文件的大小：    fseek(fp, 0L, SEEK_END);   n = ftell(fp);//n是文件的字节总数   fseek(fp, 0L, SEEK_SET);

user: user-7
content: 文件里2进制数据是整个结构大小的若干倍数，字符数组部分比实际使用量要大，所以你会看到一些多于的东西，不过正常操作之下没影响。另外，你要重新申请空间再读入数据，文件里原有的next数据过时无效的，不可以直接引用，得用新申请的空间地址替换...

user: user-0
content: 那这个问题呢： 一个文件里有n个结构体，想把这写结构体从文件中读出并打印到屏幕上，如果写成： while(fread==1) {     fread(p,sizeof(struct inf),1,fp);     p=p->next; } /*p,struct 之前均有定义*/ 所有p不是都一样的吗？ 还有还有，为什么打在屏幕上正常的东西在文件里看就是“屯屯屯”呢

user: user-7
content: 换个思路，不管文件大小，也不fseek，循环检测fread的返回值不是1就停止...

user: user-8
content: 不知道这样对不对  fseek(fp,0,SEEK_SET); fseek(fp,0,SEEK_END); long longBytes=ftell(fp);// longBytes就是文件的长度

user: user-0
content: 那怎么测指针所指向内容所占字节数呢？

user: user-9
content: 貌似sizeof（*fp），这是在计算一个指针所占的字节数，并不是等于指针所指向内容所占字节数。

user: user-0
content: 真的啊！n和x一直相等，但是为什么呢？sizeof不能测fp所指向的全体的大小吗？

user: user-10
content: n=sizeof(*fp); x=sizeof(struct inf); // 确定这里循环是可以满足循环条件的么？不确定的话，在循环前打印下 n 和x的值各是多少吧 for(i=0;i<(n/x);i++) { fseek(fp,i*sizeof(struct inf),0); fread(p,sizeof(struct inf),1,fp); printf("%d号：\t姓名：%s\t电话：%s\n\n",p->num,p->name ,p->tel); }
user-0 提问: 急求单片机C语言编程密码锁

回复:
user: user-1
content: 1、单片机这端驱动矩阵键盘和12864显示屏； 2、单片机这端驱动蜂鸣器和密码锁并检测密码锁的状态； 3、单片机把密码信息写入FLASH或者是EEPROM； 4、单片机通过串口与计算机通讯，通讯信息适当加密。  引用 楼主 u012767000 的回复:用C语言编程，矩阵键盘输入，12864显示信息。设置的密码发送到计算机存储起来，开锁是输入的密码和存储的密码进行比较正确的话开锁，错误三次，蜂鸣器报警。锁是用按键模拟的，直接接的IO口，根据高低电平的检测判断是否锁上，谢谢大家了！

user: user-2
content: 先根据功能划分各个module,再细分文件和函数，搞清楚哪部分自己目前可以完成，哪部分需要学习

user: user-3
content: 网上搜索下 银行的基本项目源码，参考里面的密码验证机制！ 很简单的处理方式，自己多动手写写！
user-0 提问: 新手求助

回复:
user: user-0
content: 把两个if去掉就可以了，真无语，还是毕结了吧。

user: user-1
content: #include<stdio.h>  int main() {     int a,b,n,i;      scanf("%d",&i);     while(i--)     {         scanf("%d",&n);         for(a=1;a<=n;a+=2)             printf("%d ",a);//用空格分开         printf("\n");         for(b=2;b<=n;b+=2)             printf("%d ",b); //用空格分开         printf("\n");     }     return 0; }

user: user-0
content: 还是不知道程序通不过的原因，唉

user: user-2
content: 引用 4 楼 qqchildren 的回复:引用 3 楼 cfjtaishan 的回复:[quote=引用 2 楼 qqchildren 的回复:] [quote=引用 1 楼 cfjtaishan 的回复:] 不知道你的ACM系统是什么，有什么要求？是南阳理工学院ACM，要求不知道啊，要求应该就在题目中吧。 从网上搜到了，呵呵，不过也没看明白。程序没有多大问题，就是“硬代码”有点多。比如10000,这些建议你使用宏定义。[/quote]什么是硬代码啊？宏定义就是“#define"之类的？[/quote] 嗯，可以这么理解。

user: user-0
content: 引用 3 楼 cfjtaishan 的回复:引用 2 楼 qqchildren 的回复:[quote=引用 1 楼 cfjtaishan 的回复:] 不知道你的ACM系统是什么，有什么要求？是南阳理工学院ACM，要求不知道啊，要求应该就在题目中吧。 从网上搜到了，呵呵，不过也没看明白。程序没有多大问题，就是“硬代码”有点多。比如10000,这些建议你使用宏定义。[/quote]什么是硬代码啊？宏定义就是“#define"之类的？

user: user-2
content: 引用 2 楼 qqchildren 的回复:引用 1 楼 cfjtaishan 的回复:不知道你的ACM系统是什么，有什么要求？是南阳理工学院ACM，要求不知道啊，要求应该就在题目中吧。 从网上搜到了，呵呵，不过也没看明白。程序没有多大问题，就是“硬代码”有点多。比如10000,这些建议你使用宏定义。

user: user-0
content: 引用 1 楼 cfjtaishan 的回复:不知道你的ACM系统是什么，有什么要求？是南阳理工学院ACM，要求不知道啊，要求应该就在题目中吧。

user: user-2
content: 不知道你的ACM系统是什么，有什么要求？
user-0 提问: 数据结构线性表的一个问题

回复:
user: user-1
content: 求给分！加油，共勉！

user: user-1
content: #include <stdio.h> #include <stdlib.h> #include <malloc.h> //#include <stdbool.h>  #define MAXSIZE 50 #define LIST_INIT_SIZE 10 #define LISTINCREMENT 2  typedef struct{ 	char title[MAXSIZE]; 	float rating; }ElemType; typedef struct{ 	ElemType *elem; 	int length; 	int listsize; }List;  //初始化线性表  bool InitList(List * L);  //向表中插入元素  bool ListInsert(List *, int, ElemType *);  //判断表是否为空  bool ListIsEmpty(const List * L);  //输入元素 //void input(List L); List input(List L);  int main(void) { 	List L; 	bool x; 	 	x = InitList(&L); 	if(x == true) 	{ 		printf("初始化成功！\n"); 		printf("初始化之后, L.elem = %u, L.length = %d, L.listsize = %d\n",  		L.elem, L.length, L.listsize); 	} 	else 	{ 		fprintf(stderr, "初始化失败\n"); 		exit(1); 	} 	//input(L); 	L=input(L); 	printf("L.length = %d, L.listsize = %d, L.elem = %p\n", L.length, L.listsize, L.elem); 	x = ListIsEmpty(&L); 	//之所以输出L为空，问题出在你的input()函数，你的形参是List变量而不是引用或者指针， 	//形参在input()函数中改变了但是实参却没有改变，所以还应将形参返回给实参；或者使用其他传参方式。 	if(x == true) 		puts("L为空\n"); 	else 		puts("L不为空\n");  	return 0; }  List input(List L) { 	bool x; 	for(int i = 1; i <= 3; i++) 	{ 		ElemType * e; 		e = (ElemType *)malloc(sizeof(ElemType)); 		puts("请输入电影名称："); 		gets(e->title); 		fflush(stdin); 		puts("请输入你对该电影的评分："); 		//先初始化，参见：http://bbs.csdn.net/topics/80025379 		e->rating=0; 		scanf("%f", &e->rating); 		fflush(stdin); 		x = ListInsert(&L, i, e); 		if(x == true) 			printf("插入元素成功\n"); 		else 		{ 			fprintf(stderr, "i的值错误，插入元素失败"); 			exit(1); 		} 		free(e); 	} 	return L; } bool InitList(List * L) { 	L->elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType)); 	if(L->elem == NULL) 		return false; 	else 	{ 		L->length = 0; 		//L->listsize = 0;//?size  		L->listsize = LIST_INIT_SIZE; 		return true; 	} }  bool ListInsert(List * L, int i, ElemType * e) { 	ElemType * p, * q, * newbase; 	if(i < 1 || i > L->length + 1) 		return false; 	if(L->length >= L->listsize) 	{ 		newbase = (ElemType *)realloc(L->elem, L->listsize + LISTINCREMENT * sizeof(ElemType)); 		if(newbase == NULL) 		{ 			fprintf(stderr, "表中内存已满，新内存分配失败！\n"); 			exit(1); 		} 		L->elem = newbase;//?这样做是直接将指针指向新申请的空间，原来的空间你要怎么访问？ 		L->listsize += LISTINCREMENT; 	} 	q = L->elem + i - 1; 	p = L->elem + L->length - 1; 	for(; p >= q; p--) 		*(p+1) = *p; 	*q = *e; 	L->length++; 	return true; }  bool ListIsEmpty(const List * L) { 	if(L->length == 0) 		return true; 	else 		return false; }

user: user-2
content: p = L->elem + L->length - 1;     for(; p >= q; p--)         *(p+1) = *p;     *q = *e;     L->length++;  改成:      p = L->elem + L->length - 1;     for(; p >= q; p--)         (p+1) = p;     q = e;     L->length++;

user: user-3
content: printf("初始化之后, L.elem = %u, L.length = %d, L.listsize = %d\n",         L.elem, L.length, L.listsize); 修改为: printf("初始化之后,L.length = %d, L.listsize = %d\n",          L.length, L.listsize);
user-0 提问: 关于进程问题

回复:
user: user-1
content: 引用 3 楼 AnYidan 的回复:[quote=引用 2 楼 max_min_ 的回复:] 输出几种可能性是因为fork函数无法确认父子进程，到底哪个进程先执行而已！ 可能因为环境的不同，父子进程前后执行的顺序不同。 环境关乎操作系统，编译环境等条件，没有发生变化，所以结果也没有变！  ++[/quote]

user: user-2
content: 引用 2 楼 max_min_ 的回复:输出几种可能性是因为fork函数无法确认父子进程，到底哪个进程先执行而已！ 可能因为环境的不同，父子进程前后执行的顺序不同。 环境关乎操作系统，编译环境等条件，没有发生变化，所以结果也没有变！  ++

user: user-3
content: 输出几种可能性是因为fork函数无法确认父子进程，到底哪个进程先执行而已！ 可能因为环境的不同，父子进程前后执行的顺序不同。 环境关乎操作系统，编译环境等条件，没有发生变化，所以结果也没有变！

user: user-4
content: 应该根据的编译器的调度算法吧
user-0 提问: c语音统计execl表格中信息 求高手进来说下。

回复:
user: user-1
content: 引用 4 楼 jerry_dqh 的回复:[quote=引用 楼主 ccc43542876 的回复:]   比如有这样的一个表格。我想统计某一路公交车的人流量。也就是说比如1022路公交车。我只统计上车的人次，也就是2次。怎么统计？求个思路 这种的应用不要用c,直接用excel自带的vba实现更好。当然，对你这个需求，连程序都不需要，直接用EXCEL提供的数据透视表或者数据透视图直接可以统计出来。[/quote] ++看到标题我就想说的 标题还打错了。。

user: user-0
content: 引用 6 楼 jerry_dqh 的回复:[quote=引用 5 楼 ccc43542876 的回复:] [quote=引用 4 楼 jerry_dqh 的回复:] [quote=引用 楼主 ccc43542876 的回复:]   比如有这样的一个表格。我想统计某一路公交车的人流量。也就是说比如1022路公交车。我只统计上车的人次，也就是2次。怎么统计？求个思路 这种的应用不要用c,直接用excel自带的vba实现更好。当然，对你这个需求，连程序都不需要，直接用EXCEL提供的数据透视表或者数据透视图直接可以统计出来。[/quote]不知道怎么操作。哎。。c都是泪啊。。[/quote] 如果不是没有办法，肯定不能用C啊.纯属自虐啊。直接用数据透视表吧，搜索一下 excel 数据透视表，就有教程了。我做一个简单的你看下：这是原始数据，101线有上车两次  这是直接的统计结果，上面的原始数据变化，统计数据也会变化，全是excel自有功能，可以看到101有两次上车消费  [/quote]非常感谢。。确实用c写有点自虐。。我现在好不容易读出数据了。也出现乱码的情况了。不知道怎么办了都。。你这个方法我去试试

user: user-2
content: 引用 楼主 ccc43542876 的回复:  比如有这样的一个表格。我想统计某一路公交车的人流量。也就是说比如1022路公交车。我只统计上车的人次，也就是2次。怎么统计？求个思路 这种的应用不要用c,直接用excel自带的vba实现更好。当然，对你这个需求，连程序都不需要，直接用EXCEL提供的数据透视表或者数据透视图直接可以统计出来。

user: user-0
content: 引用 2 楼 JiMoKuangXiangQu 的回复:可参考这个链接，比较复杂： http://www.codeproject.com/search.aspx?q=c+code+read+excel&sbo=kw http://www.codeproject.com/script/Articles/ViewDownloads.aspx?aid=13852  这个是Excel格式的文档： http://www.openoffice.org/sc/excelfileformat.pdf  建议不要直接用c来操作，太复杂。可以借助成熟的模块，如com，python等之类脚本来处理比较合适。如果不是execl，如果是文本文档。每个字段之间用空格或者制表符间隔。怎么处理？

user: user-3
content: 可参考这个链接，比较复杂： http://www.codeproject.com/search.aspx?q=c+code+read+excel&sbo=kw http://www.codeproject.com/script/Articles/ViewDownloads.aspx?aid=13852  这个是Excel格式的文档： http://www.openoffice.org/sc/excelfileformat.pdf  建议不要直接用c来操作，太复杂。可以借助成熟的模块，如com，python等之类脚本来处理比较合适。

user: user-4
content: python读取很方便。先把全部数据按行读取出来，写个函数根据线路获菆数据，然后不就好处理了么。

user: user-2
content: 引用 5 楼 ccc43542876 的回复:[quote=引用 4 楼 jerry_dqh 的回复:] [quote=引用 楼主 ccc43542876 的回复:]   比如有这样的一个表格。我想统计某一路公交车的人流量。也就是说比如1022路公交车。我只统计上车的人次，也就是2次。怎么统计？求个思路 这种的应用不要用c,直接用excel自带的vba实现更好。当然，对你这个需求，连程序都不需要，直接用EXCEL提供的数据透视表或者数据透视图直接可以统计出来。[/quote]不知道怎么操作。哎。。c都是泪啊。。[/quote] 如果不是没有办法，肯定不能用C啊.纯属自虐啊。直接用数据透视表吧，搜索一下 excel 数据透视表，就有教程了。我做一个简单的你看下：这是原始数据，101线有上车两次  这是直接的统计结果，上面的原始数据变化，统计数据也会变化，全是excel自有功能，可以看到101有两次上车消费

user: user-0
content: 引用 4 楼 jerry_dqh 的回复:[quote=引用 楼主 ccc43542876 的回复:]   比如有这样的一个表格。我想统计某一路公交车的人流量。也就是说比如1022路公交车。我只统计上车的人次，也就是2次。怎么统计？求个思路 这种的应用不要用c,直接用excel自带的vba实现更好。当然，对你这个需求，连程序都不需要，直接用EXCEL提供的数据透视表或者数据透视图直接可以统计出来。[/quote]不知道怎么操作。哎。。c都是泪啊。。

user: user-0
content: 顶一个先。。。 或者JAVA也行！
user-0 提问: 帮忙看一下。。要交作业。实在找不出了。为什么那个in函数下面执行不了

回复:
user: user-1
content: 清空一下stdio流  如果是windows 下面可以在c = getchar();后面加上fflush(stdin); 如果是linux下面你可以参照  http://blog.csdn.net/csu305/article/details/3321084

user: user-0
content: #include<stdio.h> #include<stdlib.h> #define STACKSIZE 100	//初始栈的大小 #define INCREAMSIZE 10	//增加栈 #define TURE 1 #define FALSE 0  typedef struct sqstack{ 	int *top,*base; 	int stacksize; }stack;  int init_stack(stack *S){							//初始化栈 	S->base = (int *)malloc(STACKSIZE*sizeof(int)); 	if(!S->base){ 		printf("初始化失败"); 		return -1; 	} 	S->top = S->base; 	S->stacksize = STACKSIZE; 	return 0; }  int get_top(stack S){				//取栈顶元素 ，返回值 	int a; 	if(S.base == S.top){ 		printf("栈为空1"); 		return -1; 	} 	else{ 		a =*(S.top-1);	 	} 	return a; } int pop(stack *S){					//退栈 	int e; 	if(S->base == S->top){ 		printf("栈为空2"); 		return -1; 	} 	else{ 		e = *S->top--; 	} 	return e; }							 int push(stack *S,int e){				//入栈 	if(S->top - S->base == S->stacksize){ 		S->base = (int *)realloc(S->base,(INCREAMSIZE+S->stacksize)*sizeof(int)); 		S->top = S->base + INCREAMSIZE; 		S->stacksize += INCREAMSIZE; 	} 	*S->top++ = e; 	return 0; }  int precede(int op1,int op2){     //比较栈的优先级 	switch(op1){	 		case '+': 		case '-': 			switch(op2){ 				case '*': 				case '/': 				case '(': 					return '>'; 					break; 				default:return '>'; 					break; 			} 			break; 		case '*': 		case '/': 			switch(op2){ 			case '(': 				return '<'; 				break; 			default: 				return '>'; 				break; 			} 			break;  		case '(': 			switch(op2){ 			case ')': 				return '='; 				break; 			default : 				return '<'; 				break; 			} 			break; 		case ')': 			switch(op2){ 			default: 				return '>'; 				break; 			} 			break; 		case '#': 			switch(op2){ 			case '#': 				return '='; 				break; 			default: 				return '<'; 				break; 			} 			break; 			default: 				return '<'; 				break;  	} }  int in(char c){					//判断栈是不是操作符 	switch(c){ 	case '+': 	case '-': 	case '*': 	case '/': 	case '(': 	case ')': 	case '#': 		return TURE; 		break; 	default: 		return FALSE; 		break; 	} } 									 int operate(int a,int theta,int b){		//计算四则运算的值 	switch(theta){ 	case '+': 		return a+b; 		break; 	case '-': 		return a-b; 		break; 	case '*': 		return a*b; 		break; 	case '/': 		return a/b; 		break; 	} } int main(){ 	int theta,d,e,f; 	char c; 	stack OPTR,OPND; 	init_stack(&OPTR);				//初始化操作数栈和操作符栈。 	init_stack(&OPND); 	push(&OPTR,'#');		//#压入操作符栈 	c = getchar(); 	while(c !='#' || get_top(OPTR) !='#'){ 		if(in(c)){ 			push(&OPND,c); 			c = getchar(); 			printf("sdf"); 		} 		else 		switch(precede(get_top(OPTR),c)){ 			case '<': 				push(&OPTR,c); 				c=getchar(); 				break; 			case '=': 				e=pop(&OPTR); 				c = getchar(); 				break; 			case '>': 				theta = pop(&OPTR); 				d = pop(&OPND); 				f = pop(&OPND); 				push(&OPND,operate(f,theta,d)); 				break; 		}//switch  	}//while 			printf("%d",get_top(OPND)); }

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

user: user-3
content: 请描述清楚问题
user-0 提问: Usage:%s filename是什么意思？

回复:
user: user-1
content: 类似于软件使用帮助。

user: user-2
content: ++  引用 1 楼 lunat 的回复:Usage:%s filename  打印一条帮助信息，告诉你这个应用程序的用法，argv[0]就是你的应用程序名称；  if(argc<2) { fprintf(stderr,"Usage:%s filename\n",argv[0]); exit(-1); }  这句话的意思是，如果没有任何命令行参数（第一个命令行参数为应用程序本身，如果制定了一个命令行参数，则argc为2），则打印一句提示信息：Usage: [你的应用程序名称] filename，即告诉你要指定一个命令行参数代表filename。

user: user-3
content: Usage:%s filename  打印一条帮助信息，告诉你这个应用程序的用法，argv[0]就是你的应用程序名称；  if(argc<2) { fprintf(stderr,"Usage:%s filename\n",argv[0]); exit(-1); }  这句话的意思是，如果没有任何命令行参数（第一个命令行参数为应用程序本身，如果制定了一个命令行参数，则argc为2），则打印一句提示信息：Usage: [你的应用程序名称] filename，即告诉你要指定一个命令行参数代表filename。

user: user-4
content: 引用 1 楼 lunat 的回复:Usage:%s filename  打印一条帮助信息，告诉你这个应用程序的用法，argv[0]就是你的应用程序名称；  if(argc<2) { fprintf(stderr,"Usage:%s filename\n",argv[0]); exit(-1); }  这句话的意思是，如果没有任何命令行参数（第一个命令行参数为应用程序本身，如果制定了一个命令行参数，则argc为2），则打印一句提示信息：Usage: [你的应用程序名称] filename，即告诉你要指定一个命令行参数代表filename。  console 程序常用

user: user-0
content: 原来是这个意思，谢谢大神  引用 1 楼 lunat 的回复:Usage:%s filename  打印一条帮助信息，告诉你这个应用程序的用法，argv[0]就是你的应用程序名称；  if(argc<2) { fprintf(stderr,"Usage:%s filename\n",argv[0]); exit(-1); }  这句话的意思是，如果没有任何命令行参数（第一个命令行参数为应用程序本身，如果制定了一个命令行参数，则argc为2），则打印一句提示信息：Usage: [你的应用程序名称] filename，即告诉你要指定一个命令行参数代表filename。
user-0 提问: 请教C语言实现文件的传输

回复:
user: user-1
content: 网络参考下FTP文件传输啊！很多这样的例程的！

user: user-0
content: 引用 2 楼 max_min_ 的回复:网络参考下FTP文件传输啊！很多这样的例程的！ 能给个链接么？

user: user-2
content: 源代码可以去code project 上面去找找

user: user-3
content: 引用 3 楼 mychenphotos01 的回复:[quote=引用 2 楼 max_min_ 的回复:] 网络参考下FTP文件传输啊！很多这样的例程的！ 能给个链接么？[/quote]  开源代码，google

user: user-4
content: 这个最简单的就是： 服务端传文件到客户端，服务端程序读取文件中的数据依次发送到客户端，客户端程序接收到数据后写入到文件。

user: user-0
content: 如果可以，请发到我的QQ邮箱，378592402@qq.com，谢谢了。
user-0 提问: 请教fgetpos函数的几个问题

回复:
user: user-0
content: 引用 1 楼 bjtbjt 的回复:1 指针的指针，  代表CHAR  2 地址  fgetpos：取得当前文件的句柄函数 函数原型：int fgetpos( FILE *stream, fpos_t *pos ); 头文件：#include<stdio.h> 是否是标准函数：是 函数功能：取得当前文件的指针所指的位置，并把该指针所指的位置数存放到pos所指的对象中。pos值以内部格式存储,仅由fgetpos和fsetpos使用。其中fsetpos的功能与fgetpos相反，为了详细介绍，将在后节给与说明。 返回值：成功返回0，失败返回非0，并设置errno。 例程如下：应用fgetpos函数取得当前文件的指针所指的位置。  3  %c %s %c 你说能是多余的吗。看看函数的定义和使用方法。  第一和第二个问题，你解释了，第三个问题，回答得很白痴，类似于那些QQ群里面灌水的人常说的那种：你去看看什么什么书吧。。。故意装大师

user: user-1
content: 问题1：argv[1][0]表示第一个参数的第一个字符 问题2：&pos的意思是传入pos地址，以便fgetpos(fp,&pos)可以通过地址改写pos的值 问题3："号需要转译符\，否则编译器无法正确识别  引用 楼主 zaixiankaifa 的回复:#include <stdio.h> #include <stdlib.h> char buf[132];  int main(int argc, char *argv[]) { 	FILE *fp; 	fpos_t pos; 	if(argc!=2) 	{ 		printf("usage: %s mode \n",argv[0]); 		return 1; 	} 	if(argv[1][0]!='a') 	{ 		if((fp=fopen("testfile","w+"))==NULL) 		{ 			printf("fopen failed!\n"); 			return 2; 		} 	} 	else 	{ 		if((fp=fopen("testfile","a+"))==NULL) 		{ 			printf("fopen failed!\n"); 			return 3; 		} 	} 	fputs("1234567890",fp); 	fputs("abcdefghij",fp); 	fseek(fp,0,SEEK_END); 	fgetpos(fp,&pos); 	printf("current file end position is %ld \n",pos); 	fseek(fp,30,SEEK_END); 	fgetpos(fp,&pos); 	printf("call fseek(fp,30,SEEK_END)\n"); 	printf("current file position is %ld \n",pos); 	fputs("abcdefg",fp); 	printf("write %c %s %c \n",'\"',"abcdfg",'\"'); 	fgetpos(fp,&pos); 	printf("current position of file is %ld \n",pos); 	fclose(fp); }  问题1：if(argv[1][0]!='a')这里，为什么多了一个[0]? argv[1]是参数名称，那么argv[0][1]代表什么呢？ 问题2：fgetpos(fp,&pos);pos只是fpos_t类型的变量，这里&pos取其地址是什么意思呢？ 问题3：printf("write %c %s %c \n",'\"',"abcdfg",'\"');这里的"\"","和"\"是不是多余的？  以上三个方面不是很懂，望大神指点。。。。

user: user-2
content: ls 解释了 lz 从不看语法吗？

user: user-3
content: 1 指针的指针，  代表CHAR  2 地址  fgetpos：取得当前文件的句柄函数 函数原型：int fgetpos( FILE *stream, fpos_t *pos ); 头文件：#include<stdio.h> 是否是标准函数：是 函数功能：取得当前文件的指针所指的位置，并把该指针所指的位置数存放到pos所指的对象中。pos值以内部格式存储,仅由fgetpos和fsetpos使用。其中fsetpos的功能与fgetpos相反，为了详细介绍，将在后节给与说明。 返回值：成功返回0，失败返回非0，并设置errno。 例程如下：应用fgetpos函数取得当前文件的指针所指的位置。  3  %c %s %c 你说能是多余的吗。看看函数的定义和使用方法。
user-0 提问: 学习数据结构的一个问题求大神

回复:
user: user-0
content: 用vs编译不出来 啊

user: user-0
content: 谢谢楼上，很详细

user: user-1
content: typedef int Status;  # define TRUE 1  # define FALSE 0  # define OK 1  # define ERROR 0  # define INFEASIBLE -1  # define OVERFLOW -2  # define STACK_INIT_SIZE 100  # define STACKINCREMENT 10  typedef struct   {   int *base;   int *top;   int stacksize;   }   SqStack;  /*构造一个空的堆栈*/  Status InitStack(SqStack S)   {   S.base=(int *)malloc(STACK_INIT_SIZE*sizeof(int));   if(!S.base)exit(OVERFLOW);   S.top=S.base;   S.stacksize=STACK_INIT_SIZE;   return OK;    }  /*取栈顶元素*/  Status GetTop(SqStack S,int *e)   {   if(S.top==S.base) return ERROR;   *e=*(S.top-1);   return OK;   }   /*入栈*/  Status Push(SqStack S,int e)   {   if(S.top-S.base>=S.stacksize)   {   S.base=(int *)realloc (S.base,(S.stacksize+STACKINCREMENT)*sizeof(int));   if(!S.base) exit(OVERFLOW);   S.top=S.base+S.stacksize;   S.stacksize+=STACKINCREMENT;   }   *S.top++=e;   return OK;   }  /*出栈*/  Status Pop(SqStack S,int *e)   {   if(S.top==S.base)return ERROR;   else    {   S.top--;   *e=*S.top;   return OK;   }   }   /*判断栈是否为空*/  Status StackEmpty(SqStack S)   {   if(S.top==S.base)return OK;   return ERROR;   }   /*进制转换*/   # include <stdio.h>  void main()  {   long tN;   int N,e;   char test;   SqStack S;   InitStack(S);   scanf("%ld",&tN);   if (tN<0&&tN>=-32768)    {   test='-';   N=(int)-tN;   }    else if(tN>=0&&tN<=32767)   {   test='';   N=(int)tN;   }   else {   printf("overflow\n");    exit(OVERFLOW);   }   while(N)   {   Push(S,N%8);   N=N/8;   }   printf("the number in 8-form is:\n%c",test);  while(S.top>S.base)    {   Pop(S,&e);   printf("%d",e);   }   printf("\n");   }

user: user-0
content: 就是求一个数转换成2进制
user-0 提问: 能消除闪烁的API函数是什么

回复:
user: user-1
content: 提醒：使用任何技术交替显示全屏白和全屏黑都会闪烁的。

user: user-2
content: 首先你要知道闪烁是怎么产生的

user: user-3
content: 你只是想消除视角上的  闪烁。

user: user-4
content: 消除窗口上清除背景的闪烁没有什么函数，一般都是使用缓冲技术，即，在内存dc上做好图，然后Bitblt到目标dc

user: user-5
content: 是不是太快了 就闪了 你控制下闪烁的频率试试 好使不

user: user-6
content: TC的东西吧，老古董了都。

user: user-7
content: 引用 4 楼 zhao4zhong1 的回复:提醒：使用任何技术交替显示全屏白和全屏黑都会闪烁的。 ++
user-0 提问: 学习单片机C语言什么书比较好，对C有一定了解

回复:
user: user-1
content: 引用 1 楼 user-8 的回复:淘宝买个板子，自己做。老板会给很多电子版的资料。  这个比较好。

user: user-2
content: 51单片机应用从零开始

user: user-3
content: 郭天祥的新概念51单片机c语言教程！！

user: user-4
content: 引用 楼主 abc594986308 的回复:rt，求神级推荐，好书成就一生 学单片机的C，不如学那个#include<reg51.h>的东东

user: user-5
content: 51单片机c语言创新教程 然后自己买个本子，倒弄到弄！

user: user-6
content: (对C有一定了解) 相关MCU 的手册

user: user-7
content: C primer plus果断此书

user: user-8
content: 淘宝买个板子，自己做。老板会给很多电子版的资料。
user-0 提问: C问题

回复:
user: user-0
content: 谢谢帮忙，不胜感激

user: user-1
content: int SortPrint(int val[],int valLen,int sum_number,int ch) { 	int i; 	struct record_st{ 		float fre; 		int posxy; 	}; 	struct record_st record[26]; 	//先初始化 	for(i = 0; i < valLen; i++ ) 	{ 		record[i].fre = val[i]*100/(float)sum_number; 		record[i].posxy = i; 	} 	//给record 排序 	for(i = 0; i < valLen; i++) 	{ 		for(int j = i+1;j < valLen; j++) 		{ 			if(record[i].fre > record[j].fre) 			{ 				//swap 				struct record_st tmp = record[j]; 				record[j] = record[i]; 				record[i] = tmp; 			} 		} 	} 	printf("++++++++++++++++++++\n"); 	for(i = 0; i < valLen; i++) 	{ 		int pos = record[i].posxy; 		if(val[pos] > 0)  			printf(" %c :\t%d次。\t频率：%f \n",pos + ch,val[pos],record[i].fre);	 	} 	return 0; } // SortPrint(LowerQuantity,26,len,'a'); SortPrint(CapQuantity,26,len,'A'); SortPrint(Arab,9,len,'0'); //楼主试试这个吧。 //