Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: [求助]：winTC编译环境下如何透过winIO读取底层CMOS数值

回复:
user: user-1
content: winio.h #ifndef WINIO_H #define WINIO_H  #ifdef WINIO_DLL #define WINIO_API _declspec(dllexport) #else #define WINIO_API _declspec(dllimport) #endif  extern "C" {   WINIO_API bool _stdcall InitializeWinIo();   WINIO_API void _stdcall ShutdownWinIo();   WINIO_API PBYTE _stdcall MapPhysToLin(PBYTE pbPhysAddr, DWORD dwPhysSize, HANDLE *pPhysicalMemoryHandle);   WINIO_API bool _stdcall UnmapPhysicalMemory(HANDLE PhysicalMemoryHandle, PBYTE pbLinAddr);   WINIO_API bool _stdcall GetPhysLong(PBYTE pbPhysAddr, PDWORD pdwPhysVal);   WINIO_API bool _stdcall SetPhysLong(PBYTE pbPhysAddr, DWORD dwPhysVal);   WINIO_API bool _stdcall GetPortVal(WORD wPortAddr, PDWORD pdwPortVal, BYTE bSize);   WINIO_API bool _stdcall SetPortVal(WORD wPortAddr, DWORD dwPortVal, BYTE bSize);   WINIO_API bool _stdcall InstallWinIoDriver(PSTR pszWinIoDriverPath, bool IsDemandLoaded = false);   WINIO_API bool _stdcall RemoveWinIoDriver(); }  extern bool IsNT; extern HANDLE hDriver; extern bool IsWinIoInitialized;  bool _stdcall StartWinIoDriver(); bool _stdcall StopWinIoDriver();  #endif  winiotest.cpp #include <windows.h> #include <stdio.h> #include "winio.h"  void main() {   DWORD dwPortVal;   DWORD dwMemVal;   bool bResult;   HANDLE hPhysicalMemory;   PBYTE pbLinAddr;    // Call InitializeWinIo to initialize the WinIo library.    bResult = InitializeWinIo();    if (bResult)   {     // Under Windows NT/2000/XP, after calling InitializeWinIo,     // you can call _inp/_outp instead of using GetPortVal/SetPortVal      GetPortVal(0x378, &dwPortVal, 4);      SetPortVal(0x378, 10, 4);      // Map physical addresses 0xA0000 - 0xAFFFF into the linear address space     // of the application. The value returned from the call to MapPhysToLin is     // a linear address corresponding to physical address 0xA0000. In case of     // an error, the return value is NULL.      pbLinAddr = MapPhysToLin((PBYTE)0xA0000, 65536, &hPhysicalMemory);      if (pbLinAddr)     {       // Now we can use pbLinAddr to access physical address 0xA0000        *pbLinAddr = 10;        // When you're done with pbLinAddr, call UnmapPhysicalMemory        UnmapPhysicalMemory(hPhysicalMemory, pbLinAddr);     }      // Instead of using MapPhysToLin, we can use GetPhysLong/SetPhysLong      GetPhysLong((PBYTE)0xA0000, &dwMemVal);      SetPhysLong((PBYTE)0xA0000, 10);      // When you're done using WinIo, call ShutdownWinIo      ShutdownWinIo();   }   else   {     printf("Error during initialization of WinIo.\n");     exit(1);   } }

user: user-0
content: 好吧，艰难的放弃win_tc,选择VC.

user: user-1
content: Win-TC天生和WinIO不兼容。 VC+WinIO才行。
user-0 提问: c快学完了，有点茫然，请大家指教

回复:
user: user-1
content: 引用 26 楼 u010913001 的回复:引用 25 楼 aa5566f4 的回复:我覺得要學彙編語言最近看了一点，但我觉得汇编挺深的，只能结合c反汇编理解，你是台湾人？  是阿 我是中國台灣人

user: user-2
content: 顶一个吧……话说我大三的时候C语言有没有写到500行都是个问题……我觉得大学还是尽量打好基础吧。 如果对软件架构、大型软件之类的有兴趣，以后想当架构师什么的，学好C++，了解设计模式，多看些经典书籍，多用一些现有的框架MFC、QT、ACE之类，有时间也可以研究下代码，培养自己面向对象的设计思想……这样一步步来，而且这些都是基础……路很长。 如果对驱动有兴趣，学下相关驱动的知识（linux的系统原理啊、内核的部分知识啥的），从一些简单的驱动开始（串口啊、USB啊之类的），嵌入式的话很多都是linux。 如果自认为数学不错，可以试着弄下算法。  最最重点的，能找到一个项目去做，或者自己鼓捣一个开源项目（比如丢个HTTP协议到网上什么的给大家用）。 计算机是门实践性学科，做项目是最为有效和快捷的提高方式。

user: user-3
content: 编程语言仅仅是一个形式，“内功课”也很重要：计算机操作系统、计算机网路、数据库、编译原理等，如果语言功底足够好，你的内功也练到家了，那么应该多练习一些项目。

user: user-4
content: 引用 30 楼 aa5566f4 的回复:引用 26 楼 u010913001 的回复:[quote=引用 25 楼 aa5566f4 的回复:] 我覺得要學彙編語言最近看了一点，但我觉得汇编挺深的，只能结合c反汇编理解，你是台湾人？  是阿 我是中國台灣人 [/quote] 看头像有点象香港人。

user: user-1
content: 我覺得要學彙編語言

user: user-5
content: 引用 22 楼 u010913001 的回复:[quote=引用 20 楼 lovesmiles 的回复:] 楼主看的书还是太少了。多看书吧。 侯捷的　STL源码剖析 Effective c++ ,  more Effective c++ 《Effective STL》 《Essential C++ 中文版》 《More Exceptional C++ 中文版》 深度探索 C++ 对象模型 <<UNIX环境高级编程>>  C++反汇编与逆向分析技术揭秘 一入STL深似海。。[/quote] stl就是个library而已

user: user-5
content: 引用更快速更高效的获取信息，像黑客一样纵横网络世界。可现在并没有实现一点，所以并不知道下一步怎么办  勤奋之外，还得有点天分，探索linux 内核吧。

user: user-0
content: 引用 20 楼 lovesmiles 的回复:楼主看的书还是太少了。多看书吧。 侯捷的　STL源码剖析 Effective c++ ,  more Effective c++ 《Effective STL》 《Essential C++ 中文版》 《More Exceptional C++ 中文版》 深度探索 C++ 对象模型 <<UNIX环境高级编程>>  C++反汇编与逆向分析技术揭秘 一入STL深似海。。

user: user-0
content: 引用 9 楼 zhao4zhong1 的回复:《Linux C编程一站式学习》 引用 9 楼 zhao4zhong1 的回复:《Linux C编程一站式学习》 我看到第三章，我想是 学C++的STL 还是学linux系统 ？windows系统编程？求教 我有C++标准库看了看难度挺大，看了mfc反而是vc++的封装比较简单，linux是网络方向的很多书 请指导

user: user-0
content: 引用 25 楼 aa5566f4 的回复:我覺得要學彙編語言最近看了一点，但我觉得汇编挺深的，只能结合c反汇编理解，你是台湾人？

user: user-6
content: 同感！给你我的大学学习计划，做个参考： 1、《离散数学》 2、《数据结构与算法》  3、《操作系统》、《汇编》 4、《编译原理》 5、《计算机网络》

user: user-7
content: 楼主看的书还是太少了。多看书吧。 侯捷的　STL源码剖析 Effective c++ ,  more Effective c++ 《Effective STL》 《Essential C++ 中文版》 《More Exceptional C++ 中文版》 深度探索 C++ 对象模型 <<UNIX环境高级编程>>  C++反汇编与逆向分析技术揭秘

user: user-8
content: 引用 4 楼 hust_123 的回复:大三写了2W行代码，不错了，大学本科还是好好学好基础高三写了1w行代码怎么破？

user: user-9
content: linux，一直在吃Windows这个饭碗想从事后台，，，，，再说一句，天下之大何苦做码农

user: user-10
content: lz 我没有其他意思哈 只是激励你一下 如果想要搞CC++的话，大三 500行的项目 太小了些  加油吧

user: user-11
content: 楼主学嵌入式，赶脚买个板子来学习吧，从单片机->带操作系统->wince linux大系统

user: user-11
content: 引用 6 楼 N_sev7 的回复:不过有两门课必须学好 一、数学。可能你听过很多遍，我上大学的时候也听过，但是想着写代码的和数学有多大关系，但是现在我知道我多幼稚了。 二、英语。可能你还是听过很多遍，我上大学的时候....。当你遇到一个技术难题时，你百谷到有用的都是外国人发的帖子的时候你就后悔英语没学好了。。。《The Intel 64 and IA-32 Architectures Software Developer's Manual》全英文的... 数学很重要，但跟方向很有关系，线性代数，微积分相关的算法，非专涉及相关领域基本用不到，到是一些排序，堆域概念，或数据校验，加解密等算法用得较多（专心学好《数据结构与算法》吧） 英语很重要，但是学校课本里的课文背得再熟，第一次看DATASHEET，规格书，库说明文档等，依然会头大，所以有方向后，专业的英语文档下些来学比过6级8级来得重要

user: user-0
content: 引用 2 楼 u013163178 的回复:linux 就是数据哗哗的在终端里面滚 欢迎你使用linux学习哦 linux涉及 嵌入式，嵌入式万一又是做手机，这不是不归路啊

user: user-0
content: 引用 9 楼 zhao4zhong1 的回复:《Linux C编程一站式学习》 好 看看，我决定还是学校选方向 选嵌入式，这些东西学学了解，还是主要写自己的程序

user: user-12
content: 个人认为：学习Linux，在更底层开发，更有趣，特别是使用很多命令，一个命令进去，就哗啦啦的一堆数据出来了，我自己学完的一本书，推荐下，人民邮电出版社《Linux C编程实战》
user-0 提问: nvidia  cuda toolkit和 cuda sdk

回复:
user: user-0
content: 为什么中文的网站只有2.3版本，而英文版有6.5版本 http://www.nvidia.cn/object/cuda_get_cn_old.html  https://developer.nvidia.com/cuda-toolkit

user: user-0
content: 有些答案说要安装cuda driver，官网找不到呢
user-0 提问: c语言数组问题

回复:
user: user-1
content: int a,b,c=0; 这种方式只初始化了c.

user: user-2
content: #include<stdio.h>  #include<conio.h>  #include <stdlib.h> int haha(char *p) { 	int a,b,c; 	a=b=c=0;//b没有初始化 	for(a=0;*(p+a)!='\0';a++) 	{ 		if(*(p+a)=='O') 		{ 			c++; 			b+=c; 		} 		else 		{ 			c=0;                              		} 	} 	return b;  }  int main() { 	int a,b,c,d=0; 	char p[100][100]; 	int sum[100]; 	scanf("%d",&a); 	for(b=0;b<a;b++){ 		getchar(); 		scanf(" %s",&p[b]); 	} 	for(b=0;b<a;b++){ 		sum[b]=haha(p[b]); 		printf("%s-->",p[b]); 		printf("%d\n",sum[b]);          	} 	getch();     	return 0; }
user-0 提问: 为什么用fwrite写入。然后读取TXT文件里面的内容显示乱码

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

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

user: user-2
content: 引用 3 楼 x_i_aofeng 的回复:没有。不过自己已经解决了。嘻嘻 。。谢谢了啊你是什么问题，又是怎么解决的呢，可否分享下经验

user: user-0
content: 没有。不过自己已经解决了。嘻嘻 。。谢谢了啊

user: user-2
content: 你是不是输入的数字和中文啊

user: user-0
user-0 提问: C语言初学者问题在线测试过不去 求教

回复:
user: user-0
content: 我才刚刚开始学 这章的内容就只有循环嵌套.能给点有用的思路行不行  我到现在连数组都没学 我编的'\b'又不给用  能不能只用循环  说一下这题的算法

user: user-1
content: 建议楼主学习或复习《编译原理》词法分析中的有限状态自动机。

user: user-2
content: 输入输出要完全和题目的一样，而且不能有多余的printf语句，输入和输出一般都是一次性完成的

user: user-0
content: 我现在只想知道如何编写在 '(' 到 ')' 不输出字符且不输出括号,而在 '(' 到 '\n' 输出字符且输出左括号

user: user-3
content: 引用 8 楼 u012061345 的回复:[quote=引用 6 楼 lovesmiles 的回复:] [quote=引用 5 楼 u012061345 的回复:] [quote=引用 1 楼 lovesmiles 的回复:] 错得离谱，题目是要求输入一行字符，你只能输入一个个字符。肯定通不过。  在线判题，这不是问题。不考虑效率的话。[/quote]  在线系统这才是关键问题，实现的功能必须和描术的一致，在线系统的测试数据就是一行一行输入。你处理不了就说明你不符号答案。  你有玩过这些在线系统没有？[/quote]  你可以做一个实验。[/quote] 只能呵呵了

user: user-4
content: 引用 6 楼 lovesmiles 的回复:[quote=引用 5 楼 u012061345 的回复:] [quote=引用 1 楼 lovesmiles 的回复:] 错得离谱，题目是要求输入一行字符，你只能输入一个个字符。肯定通不过。  在线判题，这不是问题。不考虑效率的话。[/quote]  在线系统这才是关键问题，实现的功能必须和描术的一致，在线系统的测试数据就是一行一行输入。你处理不了就说明你不符号答案。  你有玩过这些在线系统没有？[/quote]  你可以做一个实验。

user: user-5
content: #include <stdio.h> int main() { 	char str[1000]; 	int i=0,j; 	char ch; 	gets(str); 	while(str[i]) 	{ 		if (str[i]!='(') 		printf("%c",str[i]); 		else 		{ 			j=i+1; 			while(str[j++]!=')'); 			i=j-1; 		} 		i++; 		 	} 	return 0; }

user: user-3
content: 引用 5 楼 u012061345 的回复:[quote=引用 1 楼 lovesmiles 的回复:] 错得离谱，题目是要求输入一行字符，你只能输入一个个字符。肯定通不过。  在线判题，这不是问题。不考虑效率的话。[/quote]  在线系统这才是关键问题，实现的功能必须和描术的一致，在线系统的测试数据就是一行一行输入。你处理不了就说明你不符号答案。  你有玩过这些在线系统没有？

user: user-4
content: 引用 1 楼 lovesmiles 的回复:错得离谱，题目是要求输入一行字符，你只能输入一个个字符。肯定通不过。  在线判题，这不是问题。不考虑效率的话。

user: user-4
content: 括号嵌套的情况考虑过吗？

user: user-6
content: 引用 2 楼 wax14111205058 的回复:那怎么输入一行字符？cin.getline

user: user-0
content: 那怎么输入一行字符？

user: user-3
content: 错得离谱，题目是要求输入一行字符，你只能输入一个个字符。肯定通不过。
user-0 提问: 已知两个链表head1 和head2 各自有序，请把它们合并成一个链表依然有序

回复:
user: user-1
content: node *Merge(node *head1,node *head2) { 	node *p1,*p2,*head; 	if (head1->next->data<head2->next->data) 	{ 		head = head1; 		p1 = head1->next; 		p2 = head2->next; 	} 	else 	{ 		head = head2; 		p1 = head1->next; 		p2 = head2->next; 	} 	node *pcur = head; 	while(p1!=NULL&&p2!=NULL) 	{ 		if (p1->data<=p2->data) 		{ 			pcur->next = p1; 			pcur = p1; 			p1 = p1->next; 		} 		else 		{ 			pcur->next = p2; 			pcur = p2; 			p2 = p2->next; 		} 		if (p1!=NULL) 		{ 			pcur->next = p1; 		} 		if (p2!=NULL) 		{ 			pcur->next = p2; 		} 	} 	return head; }

user: user-2
content: 递归就更简单了  node *func(node *head1, node *head2) { 	node *head; 	node **pnode; 	if (NULL == head1) 	{ 		return head2; 	} 	if (NULL == head2) 	{ 		return head1; 	} 	pnode = head1->data < head2->data ? &head1 : &head2; 	head = *pnode; 	*pnode = (*pnode)->next; 	head->next = func(head1, head2); 	return head; }

user: user-3
content: 引用 4 楼 hello_world000 的回复:随手写了一个，没测试  node *func(node *head1, node *head2) { 	node *head, *cur; 	node **pnode; 	if (NULL == head1) 	{ 		return head2; 	} 	if (NULL == head2) 	{ 		return head1; 	} 	pnode = head1->data < head2->data ? &head1 : &head2; 	head = *pnode; 	*pnode = (*pnode)->next; 	for (cur = head; head1 && head2; cur = cur->next, *pnode = (*pnode)->next) 	{ 		pnode = head1->data < head2->data ? &head1 : &head2; 		cur->next = *pnode; 	}     cur->next = head1 ? head1 : head2; 	return head; } 随手引用一个，没测试

user: user-2
content: 随手写了一个，没测试  node *func(node *head1, node *head2) { 	node *head, *cur; 	node **pnode; 	if (NULL == head1) 	{ 		return head2; 	} 	if (NULL == head2) 	{ 		return head1; 	} 	pnode = head1->data < head2->data ? &head1 : &head2; 	head = *pnode; 	*pnode = (*pnode)->next; 	for (cur = head; head1 && head2; cur = cur->next, *pnode = (*pnode)->next) 	{ 		pnode = head1->data < head2->data ? &head1 : &head2; 		cur->next = *pnode; 	}     cur->next = head1 ? head1 : head2; 	return head; }

user: user-4
content: 太简单了，合并二有序链表，一搜一大把。

user: user-5
content: 假如从小到大排序，先比较head1和head2，将小的存入目标链表，并取出他的next，然后将next继续和较大的比较，以此类推

user: user-6
content: 每次从head1和head2中读一个较小的数放在head3.
user-0 提问: C语言阶乘递归调用，这个怎么解释？

回复:
user: user-1
content: 引用 4 楼 gold615 的回复:想起来了，这个有个执行顺序的问题，栈是后进先出，因此是先执行--n，然后才是 n*fun（--n）。  这个说法有问题。  支持1、2楼。

user: user-2
content: 想起来了，这个有个执行顺序的问题，栈是后进先出，因此是先执行--n，然后才是 n*fun（--n）。

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

user: user-4
content: 参考置顶帖   C,C++表达式求值顺序

user: user-4
content: return n*fun(--n);  编译器有可能先处理--n，改变了n的值，结果就变成了(n-1) * fun(n-1)
user-0 提问: C通过popen模拟shell命令遇到的问题

回复:
user: user-1
content: int iRet = asprintf(&cmd, "ls -lh /root/Project/programing/bak/ |grep a.out  | awk -F'->' '{print $1}' | awk -F' ' '{print $9}' | xargs rm -f "); /* 改为 */ int iRet = asprintf(&cmd, “%s", "ls -lh /root/Project/programing/bak/ |grep a.out  | awk -F'->' '{print $1}' | awk -F' ' '{print $9}' | xargs rm -f ");

user: user-0
content: 引用 2 楼 slx_391987 的回复:看下pclose函数有没有报错？  没报错，返回0

user: user-0
content: 引用 1 楼 r_Jimy 的回复:你用ls命令怎么删除呢？ rm?  xargs

user: user-2
content: 看下pclose函数有没有报错？

user: user-3
content: 你用ls命令怎么删除呢？ rm?

user: user-0
content: 问题已解决！

user: user-0
content: 引用 5 楼 mymtom 的回复: int iRet = asprintf(&cmd, "ls -lh /root/Project/programing/bak/ |grep a.out  | awk -F'->' '{print $1}' | awk -F' ' '{print $9}' | xargs rm -f "); /* 改为 */ int iRet = asprintf(&cmd, “%s", "ls -lh /root/Project/programing/bak/ |grep a.out  | awk -F'->' '{print $1}' | awk -F' ' '{print $9}' | xargs rm -f ");   问题已解决，不是串拼接的问题，是rm删除的路径不对
user-0 提问: C语言中关于调和级数代码哪步错了？

回复:
user: user-1
content: 你的所有变量都是整数，所以运算结果也全都是整数。比如，1/i会得到0 是不是要把H改成double，然后H=H+1.0/i ;输出用%lf代替%d

user: user-1
content: for (i==2;i<n;i++)  // 多了个等号
user-0 提问: 有一个浮点型变量 X,如何判断它是否为 0 ？用除法可以吗？

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

user: user-2
content: 直接判断他的绝对值是否小于一个很小的数（比如：0.000001），如果成立，就可以认为这个浮点数是0，浮点数没有绝对的值，要考虑精确度问题

user: user-3
content: fabs(x) < 0.0000001;则为零。后面精度自己控制。

user: user-4
content: float x  if(x>= -0.000001 && x<= 0.000001)

user: user-5
content: 浮点数还是不要用 == 判断吧

user: user-6
content: 直接判断它是否等于0就行了。另：你的X需要初始化 #include <stdio.h> int main(void) {     float x;     while(scanf("%f",&x)!=EOF) 	(x==0)?printf("X is zero!\n"):printf("X isn't zero!\n");     return 0; }
user-0 提问: 大神看看我的程序错哪了，判断一个字符数组是否为回文，数据结构

回复:
user: user-0
content: 谢谢大家，是我忘了清除键盘缓冲区了

user: user-1
content: getchar()是当用户输入回车后，它才会开始一个一个的读取字符，但是回车不会被丢弃，会被作为一个字符赋给变量。

user: user-0
content: 我是不明白为什么再输入值的时候，它会给我自己赋一个空值，再让我输入下一个

user: user-1
content: for(i=0;i<20;i++)  if(p1[i]!=p2[i])  flag=0; 你这个for循环判断，每次都判断够20次，如果你输入的字符串不够20个字符，多出来的不就是未知的值吗？那样p1和p2就不会一样，flag就会等于0. 应该在m=!时，把字符串p1和p2最后一位置'\0',判断的时候使用  for(i=0;p1[i]!='\0';i++)  就行了

user: user-2
content: 输出某一区间的回文数，仅供参考…… #include <iostream>  using namespace std;  int arry[] = {1, 10, 100, 1000, 10000, 100000};	//若还有更大的数，依次直接加10的n次方即可 int func2(int num, int n);  int func (int num) { 	int numtmp = num; 	int count = 0; 	while(numtmp) 	{  		count++;  		numtmp = numtmp /10;		 	} 	 	for(int i = 0; i <count; i++) 	{ 		if ( func2(num, i+1) != func2(num, count--)) 			return -1; 	} 	cout << num << '\t';	 	return 0;	  }  //返回一个数中的第n位是多少 int func2(int num, int n)	//n，要返回的第n位数 { 	if (num / arry[n -1] == 0) 	{ 		printf("error\n"); 		return -1;	 	} 	 	int tmp = num % arry[n]; 	tmp = tmp / arry[n-1];	 	return tmp;		 }  int main(void) { 	int count = 0; 	for (int i = 1; i < 100000; i++) 	{ 		if (func(i) == 0) 		{ 			count++; 		} 	} 	cout << endl << "\nThe range 1 --- " << i << " couunt is: " << count << endl; }

user: user-3
content: 分配的char数组没有清0操作  换成  char p1[20]={0},p2[20]={0};  就可以了

user: user-0
content: 我知道啊 我就是一个一个的把它们输进去，然后调试的的时候就是不对

user: user-4
content: void panduan(seq *s) { 	int flag=1; 	char p1[20],p2[20]; 	int i=0; 	char m; 	printf("请输入："); 	m=getchar(); 	for(;m!='!';)//输入！号时结束 	{ 		p1[i]=m; 		push(s,m); 		printf("请输入："); 		m=getchar(); 		i++; 	} 	i=0; 	while(s->top!=-1) 	{ 		pop(s,&p2[i]); 		i++; 	} 	for(i=0;i<20;i++) 		if(p1[i]!=p2[i]) 			flag=0; 	if(flag==1) 		printf("该字符串是回文！\n"); 	else 		printf("该字符串不是回文！\n"); }  逻辑太混乱了，你的输入是单个字符。还是好好改一改吧
user-0 提问: 在PE编程遇到的问题

回复:
user: user-0
content: 突然明白了，数据是重新定位才出现的

user: user-0
content: 这是ollydebug数据区 这是ollydebug代码区 实际只是想取到数据区一个指定地址里（注：0x1000940c）的一行十六进制数据 显示到Data inpretation列
user-0 提问: 来位大牛帮看看哪里错了啊~

回复:
user: user-1
content: out_arr[j]=s->pos;//改 out_arr[++j]=s->pos;   for(i=0;i<=j;i++) //改 for(i=0;i<len;i++)     printf("%d ",out_arr[i]); //改 printf("%d",out_arr[i]);    scanf("%d", &m);//改 scanf("%d",m);

user: user-2
content: 是实现链表吧 你下面这句错了 scanf("%d",m); 应该是 scanf("%d",&m); 其他没看，还有问题跟我说下吧

user: user-3
content: void achieve(int len,int in_arr[],int m,int out_arr[])要实现什么？怎么逻辑那么乱……
user-0 提问: 关于《深入理解计算机系统》官方主页如何有效使用？

回复:
user: user-0
content: 引用 5 楼 zhao4zhong1 的回复:英语也是一门计算机语言的说。说的极是啊，现在越来越有这种感觉了！！

user: user-0
content: 引用 7 楼 ypzhong 的回复:[quote=引用 4 楼 u013163178 的回复:] [quote=引用 3 楼 u013457146 的回复:] 我买了，已经看了好多了，可以上面的家庭作业有点难度，官方网站上可以下载到解决方案。网站全是英文的还要注册账号，进来问下高手，网站上哪里下载作业答案？？ 建议你还是先看写基础的书，不然对你是一种很大的打击[/quote] 其实这就是基础书籍啦。只需要c语言基础和一点汇编基础，况且汇编里面还有教，以及简单的Linux操作命令。有这些基础啃完完全OK。[/quote] 就是的，我都快看完了感觉都是很基础的东西，内容比较广书有点厚，也没那么吓人的。

user: user-1
content: 引用 3 楼 u013457146 的回复:我买了，已经看了好多了，可以上面的家庭作业有点难度，官方网站上可以下载到解决方案。网站全是英文的还要注册账号，进来问下高手，网站上哪里下载作业答案？？ 建议你还是先看写基础的书，不然对你是一种很大的打击

user: user-2
content: 引用 4 楼 u013163178 的回复:[quote=引用 3 楼 u013457146 的回复:] 我买了，已经看了好多了，可以上面的家庭作业有点难度，官方网站上可以下载到解决方案。网站全是英文的还要注册账号，进来问下高手，网站上哪里下载作业答案？？ 建议你还是先看写基础的书，不然对你是一种很大的打击[/quote] 其实这就是基础书籍啦。只需要c语言基础和一点汇编基础，况且汇编里面还有教，以及简单的Linux操作命令。有这些基础啃完完全OK。

user: user-3
content: 英语

user: user-4
content: 英语也是一门计算机语言的说。

user: user-0
content: 我买了，已经看了好多了，可以上面的家庭作业有点难度，官方网站上可以下载到解决方案。网站全是英文的还要注册账号，进来问下高手，网站上哪里下载作业答案？？

user: user-1
content: 你没有买那本书吗
user-0 提问: C语言问题

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

user: user-0
content: while那里改为 while(1) {  scanf("%d",&num);    switch(num)  {  case 1:limit=17850.0;break;  case 2:limit=23900.0;break;  case 3:limit=29750.0;break;  case 4:limit=14875.0;break;  case 5:printf("Done!\n");  return 0;  default :printf("Please enter a valid figure:\n");  return num;  } } 这样就可以实现输入不在正确数字时一直循环，但是回不到switch， 除了直接continue，这种为何不能实现   2）   if (m <= limit)   tax = m * RATE1;   else  tax = limit * RATE1 + (m - limit) * RATE2; 这种语句为何还需要加大括号 麻烦了

user: user-0
content: 你好，我改了一下，其实我主要疑问有二 一，如果default那里return num为何不起作用，我知道直接continue更好。 二，在if里面第一个语句不加{}就会显示错误，不解，不是只有一句吗

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

user: user-0
content: 多谢老师回复。。 我也试过设断点处理，但是还是不能理解 if语句里面只有一行为何还提示以下 error C2181: illegal else without matching if warning C4552: '*' : operator has no effect; expected operator with side-effect  代码 	 	if (m <= limit)  		tax = m * RATE1;	 	 	else 		tax = limit * RATE1 + (m - limit) * RATE2; 	 	printf("tax is %.2lf\n",tax); 再怎么想也想不通

user: user-2
content: 把while去掉就行了。 改成scanf("%d",&num)；

user: user-2
content: 输入1，2，3，4 一直在while里面循环吧。
user-0 提问: 浮点数在内存中的存储

回复:
user: user-1
content: 引用 4 楼 zhao4zhong1 的回复:http://bbs.csdn.net/topics/390676437 正解！

user: user-2
content: 引用 3 楼 yanzi150207348 的回复:好的 我试试  谢谢！ 也就是说实际的十六进制数就是IEEE754标准表示的吗？ 当然是呀！

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

user: user-0
content: 好的 我试试  谢谢！ 也就是说实际的十六进制数就是IEEE754标准表示的吗？

user: user-3
content: 浮点数进printf会提升到double。你如果需要它原本的值的话那要*(int*)(&tempV)

user: user-0
content: 没有人遇到这样问题吗？

user: user-2
content: #include <stdio.h>  typedef union fu_s {     float f;     unsigned int u; } fu_t;  int main(int argc, char *argv[]) {     fu_t fu;      fu.f = 0.700012;     printf("%.24f\n", fu.f);     printf("%08X\n", fu.u);       return 0; } /* 输出为 0.700012028217315673828125 3F3333FD  说明: S-符号 E-阶码 F-尾数 3F        33        33        FD 0011 1111 0011 0011 0011 0011 1111 1101  0 01111110 011 0011 0011 0011 1111 1101 S E        F  S = 0 E = 126 - 127 = -1 F = 1 + 2^-2 + 2^-3    + 2^-6 + 2^-7   + 2^-10 + 2^-11   + 2^-14 + 2^-15    + 2^-16 + 2^-17 + 2^-18 + 2^-19   + 2^-20 + 2^-21 + 2^-23   = 1.40002405643463134765625 V = 1.40002405643463134765625 * 2^-1   = 0.700012028217315673828125 */
user-0 提问: void * 指针的问题，和网上的一致说法不一样

回复:
user: user-1
content: 引用 3 楼 wangjun403 的回复:[quote=引用 1 楼 CKRGD 的回复:] 不知楼主听说过自动类型转换没有 数字的自动类型转换（当数字范围变化时）都会有warning [/quote]  这个范围应该是变大了吧

user: user-0
content: 引用 1 楼 CKRGD 的回复:不知楼主听说过自动类型转换没有 数字的自动类型转换（当数字范围变化时）都会有warning

user: user-2
content: .c和.cpp不是一回事！

user: user-1
content: 不知楼主听说过自动类型转换没有
user-0 提问: 关于strcpy

回复:
user: user-1
content: 楼主看下面代码,发现错误了吗#include<stdio.h> int main() {  int *p=NULL;  *p=3;//error } #incolude<stdio.h> int main() { int a=9; int *p=&a; *p=10; return 0; }

user: user-1
content: 你悬挂指针了，你s指针没有指向任何地址，怎么可能作为buufer呢 在main函数里面加一句,s指针应该改名为buf，这样看起来直观一点点， s =(char *)malloc(20); #include <string.h>  void Strcpy(char *to, char *from) { strcpy(to, from); }  int main() { char *s=NULL; s= (char *)malloc(20); Strcpy(s,"abcdefg"); return(0); }

user: user-2
content: strcpy的实质是对一个一个字符的拷贝，你把一个字符串拷贝到一个没有内存空间的NULL指针上，不出错才怪！

user: user-3
content: strcpy(char* to, const char * from) {   whille(to++ = from++); }  strcpy的c语言实现就上面一句代码。你的to 指向了null，对它的写操作肯定会出错。

user: user-4
content: C语言实际上建立在一个抽象的层次上，它没有涉及某一个具体的硬件结构（C语言的宗旨之一就是通用－－通用于任何计算机），对NULL而言，只是表示地址范围中的一个特殊点，它不可访问－－表示无效地址。 至于它是不是0，0地址处是什么？这就要涉及到具体的计算机硬件结构了，这是另一个层次的问题了。 一个具体的编译器负责NULL与一个具体硬件结构地址的关联。没有记错的话，看看“C的495个问题” 摘自——http://bbs.csdn.net/topics/380080326?page=1  为啥要这么用strcpy呢？

user: user-5
content: 操作NULL指针

user: user-6
content: 编译不会出错，因为函数里传进去的是形参，不会改变s在main里的值
user-0 提问: C语言新手求解

回复:
user: user-0
content: return 8000不是返回值咩

user: user-0
content: 用了楼上的还是不对啊....

user: user-1
content: 整个程序怎么一个提示性质的语句都没有，也不知道输入的都是什么 而且没有消除非法输入的语句啊

user: user-2
content: 没有返回值。。。 #include <stdio.h>  int yideng(int a,int c) {     if(a>80&&c>1)         return 8000 ;     return 0; } int erdeng(int a,int b) {     if(a>85&&b>80)         return 4000 ;     return 0; } int sandeng(int a) {     if(a>90)         return 2000 ;     return 0; } int sideng(int a,char b) {     if(a>85&&b=='Y')         return 1000 ;     return 0; } int wudeng(int a,char b) {     if(a>80&&b=='Y')         return 850 ;     return 0; }  int main() {     char p[100][20];     int h[100][3];     char y[100][3];     int sum[100];     int a,b,c,d,m,n ;     scanf("%d",&b);     for(a=0;a<b;a++)     {         scanf("%s",p[a]);         scanf("%d%d%d",&h[a][0],&h[a][1],&h[a][2]);         scanf("%c%c",&y[a][0],&y[a][1]);     }     for(a=0;a<b;a++)     {         sum[a]+=yideng(h[a][0],h[a][2]);         sum[a]+=erdeng(h[a][0],h[a][1]);         sum[a]+=sandeng(h[a][0]);         sum[a]+=sideng(h[a][0],y[a][1]);         sum[a]+=wudeng(h[a][0],y[a][0]);     }     d=0 ;     m=0 ;     n=0 ;     for(c=0;c<b;c++)         if(sum[c]>d)         {             m=c ;             n=sum[c];         }     printf("%s\%d",p[m],n);     return 0 ; }

user: user-0
content: 哪里错了 出来一些垃圾值
user-0 提问: 新手问个问题，关于判断栈是否溢出的

回复:
user: user-1
content: Pointer Arithmetic Additive operations involving a pointer and an integer give meaningful results only if the pointer operand addresses an array member and the integer value produces an offset within the bounds of the same array. When the integer value is converted to an address offset, the compiler assumes that only memory positions of the same size lie between the original address and the address plus the offset.  This assumption is valid for array members. By definition, an array is a series of values of the same type; its elements reside in contiguous memory locations. However, storage for any types except array elements is not guaranteed to be filled by the same type of identifiers. That is, blanks can appear between memory positions, even positions of the same type. Therefore, the results of adding to or subtracting from the addresses of any values but array elements are undefined.  Similarly, when two pointer values are subtracted, the conversion assumes that only values of the same type, with no blanks, lie between the addresses given by the operands.

user: user-2
content: 顺序存储实现栈，意味着这栈空间是连续分配出来的，top-base就等于栈的目前实际使用容量。  实际使用容量跟栈最大容量相等，不就是栈满了吗？

user: user-0
content: 引用 1 楼 lovesmiles 的回复:top和base又不一定是指针。  比如top=10,base=0; 栈的大小是stacksize=10; 那top-base自然就知道是不是满了。  top可能就是一个说明栈顶在第几个位置。所以无须连接空间也可以我的意思就是指针，不是整型计数器

user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:因为top总是每次加1的。那指针相减到底是什么相减，还是不太明白，希望老师能详细解释一下，谢谢老师

user: user-1
content: 因为top总是每次加1的。

user: user-3
content: top和base又不一定是指针。  比如top=10,base=0; 栈的大小是stacksize=10; 那top-base自然就知道是不是满了。  top可能就是一个说明栈顶在第几个位置。所以无须连接空间也可以
user-0 提问: 用C语言实现串口通信

回复:
user: user-0
content: 那么我有了这些代码，具体要怎么实现，就是要下载VC的软件吗？用wintc不行吗

user: user-1
content: STDAFX.CPP, STDAFX.H  These files are used to build a precompiled header file PROJNAME.PCH and a precompiled types file STDAFX.OBJ. It is important that you neither define nor undefine any of the _AFX_NO_XXX macros in stdafx.h. See the Knowledge Base article "PRB: Problems Occur When Defining _AFX_NO_XXX". You can find Knowledge Base articles on the MSDN Library CD, or at http://www.microsoft.com/kb/.

user: user-2
content: 看第一个头文件可知是用vc或vs编译的

user: user-2
content: 不是所有的代码都用wintc编译的

user: user-0
content: 引用 7 楼 zhao4zhong1 的回复:VS 是Microsoft Visual Studio吗

user: user-1
content: VS

user: user-0
content: 引用 5 楼 zhao4zhong1 的回复:[quote=引用 4 楼 z530650681 的回复:] 那么我有了这些代码，具体要怎么实现，就是要下载VC的软件吗？用wintc不行吗 不行。 [/quote] 那要用什么样的软件，是不是串口通信的软件呢？试了一下，不太会，该用什么软件？

user: user-1
content: 引用 4 楼 z530650681 的回复:那么我有了这些代码，具体要怎么实现，就是要下载VC的软件吗？用wintc不行吗 不行。
user-0 提问: 新手求大神帮忙

回复:
user: user-1
content: 参考MSDN98\SAMPLES\VC98\SDK\SDKTOOLS\IMAGE\DRWATSON\DISASM.C

user: user-2
content: 一种汇编语言，不懂这个 楼主可以先把内容输出的程序先写出来，然后从网上找这个汇编的一些资料

user: user-3
content: 不就是个反汇编器。
user-0 提问: C语言的一点小问题 

回复:
user: user-1
content: 可以使用malloc函数啊

user: user-2
content: 二维动态数组？  int **p; p = new int*[10];    //注意，int*[10]表示一个有10个元素的指针数组 for (int i = 0; i != 10; ++i) {     p[i] = new int[5]; } //当数组使用完毕，释放空间的代码是： for(int i = 0; i != 5; i++) {     delete[] p[i]; }  delete[] p;

user: user-3
content: 用calloc函数。 calloc （待分配内存大小，要分多少块）  这里 第一个参数 你可以用strlen 算出来    第二个参数你用n 表示  下面为其赋值

user: user-4
content: 可以尝试用链表

user: user-5
content: 用链表。。。

user: user-6
content: http://bbs.csdn.net/topics/340075990 参考这个帖子吧

user: user-7
content: LONGLONG正好是八个BYTE 读到一个LONGLONG数组中(LONGLONG *pLL 然后 BYTE* = (BYTE*)(&pLL[x])

user: user-0
content: 最好能给一个具体点的代码
user-0 提问: 截取两个特定字符串之间的内容

回复:
user: user-0
content: 非常感谢几位热心帮助。

user: user-1
content: 给你说下strstr这个函数的用法 函数原型： char *strstr( char *str, char * substr );   函数的作用也就是，返回在str里搜索 substr 第一次出现的位置， 并返回该位置。。  举个例子吧。  #include<stdio.h>  #include<string.h>  int main() {  char *str = "bbs.csdn.net/";   char *substr = "csdn";  char *s = strstr(str, substr);  printf("%s\n", s); return 0; } 那么输出结果就是 ： csdn.net/

user: user-2
content: 用strstr进行子串的查找。看看strstr的使用说明，不难

user: user-3
content: 使用strstr， 参考一下

user: user-4
content: C++的 用string类型存放整串  string str = “........select distinct guiydh from bgydl a,pdsdl b  where faredm = :FRDM_BGYDL and jiaoym='7301'..........;”; string::size_type Pos_From = str.find( "from",0 ); string::size_type Pos_Where = str.find( "where",0 ); string strDis = str.substr( Pos_From,Pos_Where );  C的话就用指针遍历字符串，记住找到“from” Pos1 和“where”的位置Pos2 memcpy( );size为Pos2 - Pos1

user: user-5
content: #include <stdio.h> #include <string.h>  int main() {   char *src = "........select distinct guiydh from bgydl a,pdsdl b  where faredm = :FRDM_BGYDL and jiaoym='7301'..........;";   char dest[100] = {0};   char *p1, *p2;   p1 = strstr(src, "from ");   p2 = strstr(src, " where");   if (p1 == NULL || p2 == NULL || p1 > p2) {     printf("Not found\n");   } else {     p1 += strlen("from ");     memcpy(dest, p1, p2 - p1);     printf("%s\n", dest);   }   return 0; }
user-0 提问: 数组和指针问题

回复:
user: user-0
content: 引用 6 楼 u012421456 的回复:#include <stdio.h> #include <string.h>> #include <ctype.h>  void ToLowerCase(char *s) {  	for(int i=0; i<strlen(s); i++)     	s[i] = tolower(s[i]);/////////// } int main() {         char s[] = "HELLOWORLD";         ToLowerCase(s);         printf("%s\n", s);         return 0; } ++i效率会更好点， 恩核心还是字符串常量不允许修改，修改就是未定义啦， 但指向字符串常量的指针可以修改

user: user-0
content: 引用 7 楼 u012421456 的回复:其实这样的问题百度谷歌可以找到的，楼主要善于利用搜索啊 恩  知道了 ：）

user: user-1
content: 其实这样的问题百度谷歌可以找到的，楼主要善于利用搜索啊

user: user-1
content: #include <stdio.h> #include <string.h>> #include <ctype.h>  void ToLowerCase(char *s) {  	for(int i=0; i<strlen(s); i++)     	s[i] = tolower(s[i]);/////////// } int main() {         char s[] = "HELLOWORLD";         ToLowerCase(s);         printf("%s\n", s);         return 0; }

user: user-2
content: 引用 4 楼 xigangcpp 的回复:[quote=引用 1 楼 brookmill 的回复:] char *s = "HELLOWORLD"; // 这是常量字符串，不允许修改的 改成 char s[] = "HELLOWORLD";  恩 那么如何将request请求转换成小写呢[/quote]         while(*s){                 *s  = tolower(*s);                 s++;         } *s  = tolower(*s++); 这种写法有调戏编译器之嫌，参考置顶帖“C,C++表达式求值顺序 ” http://bbs.csdn.net/topics/370153775

user: user-0
content: 引用 1 楼 brookmill 的回复:char *s = "HELLOWORLD"; // 这是常量字符串，不允许修改的 改成 char s[] = "HELLOWORLD";  恩 那么如何将request请求转换成小写呢

user: user-0
content: 那么怎么把request请求的字符串转换成小写呢？

user: user-3
content: char *s = "HELLOWORLD";字符串常量不允许修改，你可以改成char s[] = "HELLOWORLD";

user: user-2
content: char *s = "HELLOWORLD"; // 这是常量字符串，不允许修改的 改成 char s[] = "HELLOWORLD";
user-0 提问: 软件工程的问题，画了一通宵用例图，求我下面的用例图有没问题，谢谢谢

回复:
user: user-1
content: 用例图已经N年没有画过了。不过，刚才百度了一下  空心三角形箭头应该是一个泛化(Inheritance)的关系。 就是父类和子类的关系。  但是你图中的空心三角形箭头好像不是这个意思。  各种箭头是不能够乱用的。

user: user-0
content: 谢谢谢谢谢谢！！

user: user-2
content: 不知道楼主是什么基础的，好像用况图的基本概念都没弄清楚  下面有一个简单的例子，仅供参考： 如有一个自动饮料销售系统，功能如下，用户可以自动购买饮料，供货员负责增加饮料，收银员负责收钱，而供货员和收钱人员都可以打开和关闭系统，画出该用况图。（下图没考虑用况包含与扩展关系）

user: user-3
content: 华师大? 这张图画一通宵？。。 哎，楼主，装个roseration或者vs的那什么在里头画吧
user-0 提问: PROC 编译出错问题

回复:
user: user-1
content: 是不是makefile的单条命令太长了。

user: user-0
content: 顶一下，盼复

user: user-1
content: 这样的问题很难帮你，你去其它的板块问问吧。

user: user-0
content: 现在报错为： INTERNAL ERROR: Failed assertion [PGE Code=90105]  网上查询说是没有oracle用户权限，我已经将我测试用户加入oracle组了，怎么还是不行

user: user-2
content: 引用 2 楼 yzg001212 的回复:[quote=引用 1 楼 zlloct 的回复:] [quote=引用 楼主 yzg001212 的回复:] 采用oracle proc 编译的时候报错： PCC-F-02044, CMD-LINE:  Illegal or out of range value for option  这种问题是Makefile文件问题吗？暂时没有找到头绪，忘指点，谢谢！  命令行超出可接受范围 PCC-02044: CMD-LINE: Illegal or out of range value for option: option string  Cause: A value specified for a command-line option was not within the accepted range. For example, the range for the MAXOPENCURSORS option is 5 to 256. If a value outside this range is specified, this message is triggered.   Action: See the Programmer's Guide to the Oracle Precompilers for the ranges that option values can take.[/quote]  这个错误解释我也查了，但是应该不是它所描述的问题，代码段本身是没有问题的，应该还是编译配置问题[/quote] 这个放在这个版块不是很合适，帮你挪一下

user: user-0
content: 引用 1 楼 zlloct 的回复:[quote=引用 楼主 yzg001212 的回复:] 采用oracle proc 编译的时候报错： PCC-F-02044, CMD-LINE:  Illegal or out of range value for option  这种问题是Makefile文件问题吗？暂时没有找到头绪，忘指点，谢谢！  命令行超出可接受范围 PCC-02044: CMD-LINE: Illegal or out of range value for option: option string  Cause: A value specified for a command-line option was not within the accepted range. For example, the range for the MAXOPENCURSORS option is 5 to 256. If a value outside this range is specified, this message is triggered.   Action: See the Programmer's Guide to the Oracle Precompilers for the ranges that option values can take.[/quote]  这个错误解释我也查了，但是应该不是它所描述的问题，代码段本身是没有问题的，应该还是编译配置问题

user: user-2
content: 引用 楼主 yzg001212 的回复:采用oracle proc 编译的时候报错： PCC-F-02044, CMD-LINE:  Illegal or out of range value for option  这种问题是Makefile文件问题吗？暂时没有找到头绪，忘指点，谢谢！  命令行超出可接受范围 PCC-02044: CMD-LINE: Illegal or out of range value for option: option string  Cause: A value specified for a command-line option was not within the accepted range. For example, the range for the MAXOPENCURSORS option is 5 to 256. If a value outside this range is specified, this message is triggered.   Action: See the Programmer's Guide to the Oracle Precompilers for the ranges that option values can take.
user-0 提问: 怎么把 指针b的指向的地址作为值 放到指针a指向的地址里？

回复:
user: user-0
content: 好像是这个意思，1楼的答案不错，谢谢哈

user: user-1
content: 中间加上：              long lbPos = (long)&(*b); 	unsigned short wRemain; 	a[0] = '0'; 	a[1] = 'x'; 	for(unsigned short wTemp = 0; wTemp < 8; wTemp++) 	{ 		wRemain = lbPos % 16; 		lbPos = lbPos / 16; 		if (wRemain < 10) 		{ 			a[9 - wTemp] = '0' + wRemain; 		} 		else 		{ 			a[9 - wTemp] = 'a' + wRemain - 10; 		} 	} 不知道楼主是不是这个意思？

user: user-2
content: http://www.cplusplus.com/reference/cstring/memset/

user: user-3
content: char* a=(char*)malloc(10);  char* b="ddd";  *(int*)a=(int)b;  printf("0x%x\n", *(int*)a);//能打印出b的地址
user-0 提问: 求答案，求大神

回复:
user: user-1
content: 围观。。。。

user: user-2
content: 如果m，n，k都很大的话，由于 m^n%k的余数肯定会循环，因此空间换时间即可 按x从1到k-1计算m^x%k,如果之前这个余数已经存在则记录循环数目和余数，最后用%求下即可

user: user-3
content: 支持1楼

user: user-4
content: http://blog.csdn.net/code_pang/article/details/7989356

user: user-5
content: 支持1楼 ！！

user: user-6
content: 是m xor n吗?还是pow(m,n)?

user: user-7
content: #include<stdio.h>  int main() { 	int m,n,k; 	scanf("%d%d%d",&m,&n,&k); 	printf("%d\n",((m^n)%k));  	return 0;	 }    输入你的数值，，就可以得到答案 ，这样快吗？

user: user-8
content: 一个表达式，还最快速度？

user: user-9
content: m^n%k==(m%k)^n%k
user-0 提问: 求大神指教。。。。。

回复:
user: user-0
content: 引用 3 楼 cs290473786 的回复:[quote=引用 1 楼 u012421456 的回复:] 你想问什么？ int mian (void) 这句是不是错了？？！ 哈哈。眼神不错，楼主想mian（面）吃了。[/quote]   确实是这里。多谢各位。。哥们眼神真好。。赞一个。

user: user-1
content: 引用 1 楼 u012421456 的回复:你想问什么？ int mian (void) 这句是不是错了？？！ 哈哈。眼神不错，楼主想mian（面）吃了。

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

user: user-3
content: 你想问什么？ int mian (void) 这句是不是错了？？！
user-0 提问: 这段程序有什么问题

回复:
user: user-1
content: 2楼很有道理啊

user: user-2
content: 顶二楼，二楼正解，还是自己亲自调试

user: user-3
content: 二楼是对的...

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

user: user-5
content: if(c==*y*)  标点符号错了。 我都不明白你的程序能编译通过？

user: user-6
content: 你會單步調試嗎? 不然告你你答案學不會那麼快
user-0 提问: 求大神解惑

回复:
user: user-1
content: http://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&tn=baidu&wd=LC3%E6%B1%87%E7%BC%96%E5%99%A8&rsv_enter=0&rsv_sug3=6&rsv_sug4=254&rsv_sug1=2&inputT=14385

user: user-0
content: 如果可以的话，能帮我写下可以完成我这个例子的代码吗，主要是我不知道lc3汇编语言是啥...所以完全没头绪

user: user-2
content: 这个要会汇编

user: user-2
content: 试试debug

user: user-3
content: 反汇编原理吧，我记得有一本书c++反汇编与逆向分析技术揭秘 这本书的前面有讲到如何实现的，只是一个翻译，挺 简单

user: user-4
content: 用c读取一个文件中的4位16进制数字，然后输出相应的LC3汇编语言 后面还有示例 完全没有头绪？？？
user-0 提问: 为什么用vc++6.0写程序时出现找不到

回复:
user: user-1
content: 为什么用vc++6.0写程序时要能找到system.h？

user: user-2
content: #include <system.h> 是linux的东西吧？ 你在window上面编程自然找不到了。

user: user-3
content: #include <stdio.h> #include <conio.h> //#include <system.h> # include <stdlib.h> # include <windows.h>  int main(void) { 	while(!kbhit()) { 	    int i,j,k,l; 		for(k=0;k<20;k++) { 			printf("\n"); 		   	printf(" "); 		} 		printf("Press any key to return:"); //		delay(60000); 		Sleep(60000); 		printf("."); //		delay(60000); 		Sleep(60000); 		k++; 		if(k=6) { 			k=0; 			system("cls"); //		   	clrscr(); 		} 	} 	 	return 0; } ——http://zhidao.baidu.com/link?url=HvU6sjoj2vEsK18lPiBtRURMzsDarnoRmkXrxrWOZa51em00Bh88h_qgAlufqJiyhYyUExhWN39cZdo8tV_SlK
user-0 提问: 关于函数传址调用的问题

回复:
user: user-0
content: 引用 3 楼 relaxisland 的回复:因为你要返回的是地址， 不是结构体 所以， 你的函数声明要是 fun(STU a[],STU **s) *s = &t[j] m的声明则必须指针 STU *m = null；   如果只是为了得到结构体 fun(STU a[],STU *s) *s = t[j] 嗯，输出没问题了！我再看看结果

user: user-1
content: 因为你要返回的是地址， 不是结构体 所以， 你的函数声明要是 fun(STU a[],STU **s) *s = &t[j] m的声明则必须指针 STU *m = null；   如果只是为了得到结构体 fun(STU a[],STU *s) *s = t[j]

user: user-2
content: 更simple的描述方式会加速你的解答过程

user: user-0
content: #include<stdio.h> #include<string.h> #define N 10 typedef struct ss { 	char num[10]; 	int s; }STU; fun(STU a[],STU *s) { 	int i,j; 	STU *t; 	t=a; 	for(i=0;i<N;i++) 		for(j=i+1;j<N;j++) 			if(t[i].s>t[j].s) s=&t[j]; 	return s->s; } main() { 	STU a[N]={ 		{"A01",81}, 		{"A02",89}, 		{"A03",66}, 		{"A04",87}, 		{"A05",77}, 		{"A06",90}, 		{"A07",79}, 		{"A08",61}, 		{"A09",80}, 		{"A10",71} 	},m; 	int i; 	printf("***** The original data ***** \n"); 	for(i=0;i<N;i++) 		printf("NO=%s  Mark=%d\n",a[i].num,a[i].s); 	fun(a,&m); 	printf("***** The Result ***** \n"); 	printf("The lowest:  %s  ,  %d\n",m.num,m.s); 	getchar(); }
user-0 提问: CSDN在线编程挑战 F(x)~C  提交出错

回复:
user: user-1
content: 输入输出有问题啊，是一次性输入，一次性输出。不是分开的

user: user-2
content: 你输入个稍微大点的数看看，比如111

user: user-3
content: 多组数据，每组第一行有一个整数n, 0 < n <= 10^11。    while(scanf("%d",&m))     {         if((m<=0)||(m>110))         {             return 0;         }
user-0 提问: opencv  openmp  人脸检测

回复:
user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。  从调试状态进入，崩溃之后像上面那张图，没办法进入调试。

user: user-1
content: 选中断试试看。

user: user-1
content: 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。
user-0 提问: C语言遍历文件夹中的文件

回复:
user: user-1
content: int AddFileIntoStream(char *basePath,struct *st) { 	DIR *dir; 	struct dirent *ptr; 	char base[1000];  	if ((dir=opendir(basePath)) == NULL){ 		return -1; 	}  	while ((ptr=readdir(dir)) != NULL){ 		if(strcmp(ptr->d_name,".")==0 || strcmp(ptr->d_name,"..")==0)	 ///current dir OR parrent dir 			continue; 		else if(ptr->d_type == 8)	 /*file*/ 		{	 		   // 当前目录文件 		} 		else if(ptr->d_type == 10)	  /*link file*/ 		{ 	 		}  		else if(ptr->d_type == 4)	 /*dir*/ 		{ 			memset(base,'\0',sizeof(base)); 			strcpy(base,basePath); 			strcat(base,"/"); 			strcat(base,ptr->d_name); 			AddFileIntoStream(base , st); 		} 	} 	closedir(dir); 	return 1; }

user: user-2
content: system("dir /b /a-d c:\\*.* >d:\\allfiles.txt"); //读文件d:\\allfiles.txt的内容即C:\\下所有文件的名字 system("dir /b /a-d /s c:\\*.* >d:\\allfilesinsub.txt"); //读文件d:\\allfilesinsub.txt的内容即C:\\下所有文件的名字包含子目录 system("dir /b /ad  c:\\*.* >d:\\alldirs.txt"); //读文件d:\\alldirs.txt的内容即C:\\下所有子目录的名字 请记住，能用shell命令获取文件、文件夹信息或者操作文件、文件夹最好用shell命令获取或者操作，而不要用各种API获取或者操作，因为当遇到非法文件夹名或非法文件名或非法文件长度、非法文件日期、压缩文件、链接文件、稀疏文件……等各种意料之外的情况时，API会处理的不全面或陷入死循环，而shell命令不会。

user: user-2
content: Windows下用dir Linux下用ls

user: user-3
content: 引用 4 楼 slx_391987 的回复:linux下可以使用readdir函数。参考代码如下：  int travelDir(const char *pcDirName) {     struct dirent *pstDirent = NULL;     DIR* pDir = NULL;           if (NULL == pcDirName)     {         return -1;     }      pDir = opendir(pcDirName);     if (NULL == pDir)     {         return -1;     }      while (NULL != (pstDirent=readdir(pDir)))     {         printf("%s\n", pstDirent->d_name);     }      return 0; }   忘记 closedir 了，呵呵

user: user-3
content: linux下可以使用readdir函数。参考代码如下：  int travelDir(const char *pcDirName) {     struct dirent *pstDirent = NULL;     DIR* pDir = NULL;           if (NULL == pcDirName)     {         return -1;     }      pDir = opendir(pcDirName);     if (NULL == pDir)     {         return -1;     }      while (NULL != (pstDirent=readdir(pDir)))     {         printf("%s\n", pstDirent->d_name);     }      return 0; }

user: user-4
content: C语言标准库里面没有关于文件夹的操作的函数，所以只能使用系统本身提供的操作函数。Windows和Linux提供的文件夹函数差别很大，不能稍微修改就能在Linux上使用。

user: user-5
content: 1. 可以用findfirst findnext http://bbs.csdn.net/topics/10288987 2. 没有linux和windows通用的方法吧？两个不同的系统，各有其接口，应该不能通用的。如果有的话，我也很想知道。 linux里面用opendir readdir之类的
user-0 提问: fflush(stdin)问题？

回复:
user: user-1
content: linux下使用 setbuf(stdin, NULL);

user: user-2
content: 那就再读一次，把没有回车的扔掉。不要钻牛角尖

user: user-0
content: 麻烦你看认真看下我的问题行么？   char cmdbuf[1024]; fgets(cmdbuf,sizeof(cmdbuf),stdin);  //就算按照你说的，定义cmdbuf[1024]大小，如果输入超过1024个字符，那么输入缓冲区里依然有没有读完的数据。 我的问题是如何清空没读完的数据。。。。。

user: user-3
content: 引用 3 楼 xpdavis 的回复:char cmdbuf[1024]; fgets(cmdbuf,sizeof(cmdbuf),stdin); 它不是说非要读满1024个字节才返回的，它是碰到回车就返回，如果输入超过四个字符，就可以直接取前四个，剩下的都在缓冲区里面，不用就是了+1

user: user-2
content: char cmdbuf[1024]; fgets(cmdbuf,sizeof(cmdbuf),stdin); 它不是说非要读满1024个字节才返回的，它是碰到回车就返回，如果输入超过四个字符，就可以直接取前四个，剩下的都在缓冲区里面，不用就是了

user: user-0
content: 问题是如何清空没读完的数据。

user: user-2
content: 你多读一些，只取前四个字符就可以了啊
user-0 提问: 2^100%100=?

回复:
user: user-1
content: 引用 3 楼 zxh707wk 的回复:#include <stdio.h>  int function() {     int i;     int temp=1;     for(i=0;i<100;i++)         temp=(temp*2)%100;     return temp; }  int main() {     printf("%d\n",function());     return 0; } 仅供参考   可是答案是i对的， 不知道为什么啊。 我刚学C。  能把具体思路给我说一下吗 详细一点 谢谢！

user: user-1
content: 引用 3 楼 zxh707wk 的回复:#include <stdio.h>  int function() {     int i;     int temp=1;     for(i=0;i<100;i++)         temp=(temp*2)%100;     return temp; }  int main() {     printf("%d\n",function());     return 0; } 仅供参考   这个是不是 错了啊？   在循环第5次时候   temp = 2^6 = 64   第六次： temp = （2^7）%100 = 28 第七次： temp = （28*2）%100=56  到这儿就错了啊。 没有保证 括号里直接叠加到 2^100 次方 。

user: user-2
content: 引用 8 楼 DelphiGuy 的回复:2^100=16^25=16^12*16^13 所以：2^100%100=(16^12%100 * 16^13%100)%100，int64可以直接计算。

user: user-3
content: 引用 13 楼 shizhong_q 的回复:[quote=引用 3 楼 zxh707wk 的回复:] #include <stdio.h>  int function() {     int i;     int temp=1;     for(i=0;i<100;i++)         temp=(temp*2)%100;     return temp; }  int main() {     printf("%d\n",function());     return 0; } 仅供参考   可是答案是i对的， 不知道为什么啊。 我刚学C。  能把具体思路给我说一下吗 详细一点 谢谢！[/quote]只是要个位和十位的数，所以只保留这两位的数就行了

user: user-4
content: 2^100%100 = (2^10^10)%100 = 1024^10^100 = 24^10 % 100 = 24^2^5^100=76^5%100=76

user: user-5
content: 实际上这题用int都可以计算：((16^5%100)^5)%100

user: user-5
content: 2^100=16^25=16^12*16^13 所以：2^100%100=(16^12%100 * 16^13%100)%100，int64可以直接计算。

user: user-6
content: 100本身就不大，根本用不到快速幂取模，还可以简化下：2^100=1024^10,顺序循环求24^10就是了

user: user-7
content: 引用 2 楼 u012061345 的回复:快速幂取模，可以在对数时间解决。很基本的算法。 Mark下， 学习了！

user: user-8
content: ？你就没次乘以2都对100取余，高位是多少不用关心

user: user-9
content: 本帖子已过去太久远了，不再提供回复功能。

user: user-3
content: #include <stdio.h>  int function() {     int i;     int temp=1;     for(i=0;i<100;i++)         temp=(temp*2)%100;     return temp; }  int main() {     printf("%d\n",function());     return 0; } 仅供参考

user: user-10
content: 快速幂取模，可以在对数时间解决。很基本的算法。

user: user-11
content: 这个可以用递归，或者你直接用math头文件，里面有幂函数。
user-0 提问: C语言列出素数求解

回复:
user: user-1
content: [quote=引用 5 楼 zxh707wk 的回复:] [quote=引用 3 楼 learner66 的回复:] 可以啊，但是这个小程序不需要用调用函数了吧

user: user-2
content: 引用if(b=a-1)  if (b == a -1)

user: user-3
content: 引用 3 楼 learner66 的回复:#include<stdio.h> int main() { int i,n,count; for(n=1;n<=100;n++) { count=0; for(i=2;i<n;i++) {if(n%i==0)count++;} if(count==0)  printf("%3d\n",n); } return 0; } 我也编写了一个，和你的不一样，供你发散思维。方法不止一种，希望共同学习做成函数然后调用不好吗，虽然运行要多花一些时间

user: user-3
content: 引用 2 楼 u010030181 的回复:根据你的例子稍微改写的，仅供参考！记住for循环怎么循环，if绝大多数是用来判断的，不是用来赋值的…… #include<stdio.h> int main() {         int a,b,c,d,e,f;          c=2;          for(a=3;a<100;a++)     {     	for(b=2;b<a;b++)        	{         	if(a%b==0) 		  	{ 		  		break; 		  	} 			if(b==a-1)     			printf("\n%d",a);   		  			           	}                     	       	}    getchar();    return 0; }+1

user: user-1
content: #include<stdio.h> int main() { int i,n,count; for(n=1;n<=100;n++) { count=0; for(i=2;i<n;i++) {if(n%i==0)count++;} if(count==0)  printf("%3d\n",n); } return 0; } 我也编写了一个，和你的不一样，供你发散思维。方法不止一种，希望共同学习

user: user-4
content: 根据你的例子稍微改写的，仅供参考！记住for循环怎么循环，if绝大多数是用来判断的，不是用来赋值的…… #include<stdio.h> int main() {         int a,b,c,d,e,f;          c=2;          for(a=3;a<100;a++)     {     	for(b=2;b<a;b++)        	{         	if(a%b==0) 		  	{ 		  		break; 		  	} 			if(b==a-1)     			printf("\n%d",a);   		  			           	}                     	       	}    getchar();    return 0; }

user: user-4
content: 你想完成什么功能？getch()最好改成getchar()
user-0 提问: 怎样把结构的大小扩大到一定的尺寸？

回复:
user: user-1
content: 引用 15 楼 wangjun403 的回复:[quote=引用 14 楼 wgmhj328 的回复:] [quote=引用 11 楼 SXJIAKE 的回复:] // 大小固定為128字節，可隨時擴充。 typedef union {     struct {         int a;         int b;         int c;     };     BYTE dummy[128]; } ABCSTRUCT;  ABCSTRUCT abc; abc.a = 1; abc.b = 2; abc.c = 3;   正解[/quote] 万一a，b，c的大小超过了128byte呢[/quote] 支持，一切皆有可能。

user: user-2
content: 引用 14 楼 wgmhj328 的回复:[quote=引用 11 楼 SXJIAKE 的回复:] // 大小固定為128字節，可隨時擴充。 typedef union {     struct {         int a;         int b;         int c;     };     BYTE dummy[128]; } ABCSTRUCT;  ABCSTRUCT abc; abc.a = 1; abc.b = 2; abc.c = 3;   正解[/quote] 万一a，b，c的大小超过了128byte呢

user: user-3
content: 引用 11 楼 SXJIAKE 的回复:// 大小固定為128字節，可隨時擴充。 typedef union {     struct {         int a;         int b;         int c;     };     BYTE dummy[128]; } ABCSTRUCT;  ABCSTRUCT abc; abc.a = 1; abc.b = 2; abc.c = 3;   正解

user: user-4
content: 在这个结构的开始添加一个 cbSize 成员。 根据这个成员就可以判断 结构的版本了。

user: user-1
content: 楼主不会用realloc

user: user-5
content: // 大小固定為128字節，可隨時擴充。 typedef union {     struct {         int a;         int b;         int c;     };     BYTE dummy[128]; } ABCSTRUCT;  ABCSTRUCT abc; abc.a = 1; abc.b = 2; abc.c = 3;

user: user-6
content: typedef struct abc_t abc;; abc* ctor();  use(abc* p); dtor(abc*);   只需要修改函数实现就是可以做到随意扩展，这就是抽象。

user: user-7
content: 引用 7 楼 derekrose 的回复:[quote=引用 6 楼 screen12 的回复:] [quote=引用 3 楼 derekrose 的回复:]  struct ABC { int a; int b; int c; void* extra; };  这个只是在最后添加一个指针变量，能把结构的大小扩大到128字节吗？ [/quote] 如果你只是要结构体所占大小扩大到128字节，那么办不到  但是在逻辑层面上，这做法不仅能扩大到128  而且扩大到逻辑上的任何size[/quote]+1

user: user-8
content: 引用 1 楼 user-11 的回复:我一般是在最后加一个变量 char reserve[128-16];  支持。 还可以使用union以方便访问。

user: user-9
content: 引用 6 楼 screen12 的回复:[quote=引用 3 楼 derekrose 的回复:]  struct ABC { int a; int b; int c; void* extra; };  这个只是在最后添加一个指针变量，能把结构的大小扩大到128字节吗？ [/quote] 如果你只是要结构体所占大小扩大到128字节，那么办不到  但是在逻辑层面上，这做法不仅能扩大到128  而且扩大到逻辑上的任何size

user: user-0
content: 引用 3 楼 derekrose 的回复: struct ABC { int a; int b; int c; void* extra; };  这个只是在最后添加一个指针变量，能把结构的大小扩大到128字节吗？

user: user-0
content: 引用 2 楼 u010030181 的回复:这个不懂啥意思，干嘛要呢去分配结构体的大小？你加减成员，自动就会相应的变化啊…… 这个很有用的。比如一个结构，里面的数据很复杂，而且将来你可能会添加新的变量。但是，如果你的软件已经发布出去了，用户已经使用你这个结构了，并且已经把他的数据保存到硬盘上了，结果你新程序中添了一个变量，结构大小不同了。结果从硬盘中读取数据来初始化你这个结构，就一塌胡涂了。

user: user-0
content: 引用 1 楼 user-11 的回复:我一般是在最后加一个变量 char reserve[128-16]; 最后加变量有个缺点，就是你添加一个新变量的时候，你最后加的这个变量就要减去相应的值，稍不注意，就使得结构大小与原来不同。

user: user-9
content: struct ABC { int a; int b; int c; void* extra; };

user: user-10
content: 这个不懂啥意思，干嘛要呢去分配结构体的大小？你加减成员，自动就会相应的变化啊……

user: user-11
content: 我一般是在最后加一个变量 char reserve[128-16];
user-0 提问: 关于gets函数的一个小问题

回复:
user: user-1
content: C语言里不要用gets函数，请用fgets

user: user-2
content: [quote=引用 7 楼 k91191 的回复:] #include "stdio.h" #include <stdlib.h> int main(void) {     while (getchar()=='\n')     {         printf("Good\n");     }     printf("hello world\n");     return 0; }  不知道你要的是不是这样的输出，不过在输出hello world 时，你需要先用一个键跳出循环，再按enter 输出helloworld ，你可以试一下，多加交流

user: user-0
content: 引用 5 楼 zhao4zhong1 的回复:Enter,Ctrl+Z,Enter 按下Enter会直接打印good,并且每按一次都是打印一次good，而不是表示被判定为空，而打印hello world

user: user-0
content: 引用 3 楼 learner66 的回复:#include "stdio.h" #include <stdlib.h> #define SIZE 45 char input [SIZE]; int main(void) {     while ( gets(input )==NULL)     {         printf("Good\n");     }     printf("hello world\n");     return 0; } 不知道楼主是不是要这样的结构，把不等改成等号就行了 不是，我是希望按下Enter则表示输入为空，然后打印hello world

user: user-3
content: Enter,Ctrl+Z,Enter

user: user-4
content: 引用 3 楼 learner66 的回复:#include "stdio.h" #include <stdlib.h> #define SIZE 45 char input [SIZE]; int main(void) {     while ( gets(input )==NULL)     {         printf("Good\n");     }     printf("hello world\n");     return 0; } 不知道楼主是不是要这样的结构，把不等改成等号就行了+1

user: user-2
content: #include "stdio.h" #include <stdlib.h> #define SIZE 45 char input [SIZE]; int main(void) {     while ( gets(input )==NULL)     {         printf("Good\n");     }     printf("hello world\n");     return 0; } 不知道楼主是不是要这样的结构，把不等改成等号就行了

user: user-5
content: 你定义的input完全没意义啊，那还不如用getchar（）来检测输入

user: user-6
content: 键盘上  不是 不能输入  null 吧 一般大家都是用 eof 来判断  可以用CTRL+z来结束输入
user-0 提问: 【参考算法】从N个数字中选出K个数字构成一组组合

回复:
user: user-1
content: 仅供参考#include <stdio.h> #include <stdlib.h> #define MAX_NUM 26 int comb[MAX_NUM]; int c1,c2; void combination(int m,int n) {     int i,j;      for (i=m;i>=n;i--) {         comb[n]=i; /* 选择当前的“头”元素 */         if (n>1) {             combination(i-1,n-1); /* 进入下一次更小的组合问题 */         } else { /* 满了需要的组合数，输出 */             for (j=comb[0];j>0;j--) printf("%c",'A'+c1-comb[j]);             printf("\n");         }     }     return; } int main(int argc,char **argv) {     if (argc<3) {         printf("%s 组合下标 组合上标\n",argv[0]);         return 1;     }     c1=atoi(argv[1]);     if (c1<1 || MAX_NUM<c1) {         printf("1<=组合下标<=%d\n",MAX_NUM);         return 2;     }     c2=atoi(argv[2]);     if (c2<1 || c1<c2) {         printf("1<=组合上标<=组合下标\n");         return 3;     }     comb[0]=c2;     combination(c1,c2);     return 0; }
user-0 提问: 急！大家帮忙看看代码哪里出了错；

回复:
user: user-1
content: 引用 1 楼 u012421456 的回复:你看一下s的值是多少，是0 因为1/2的值取整以后就是0 s=1/2*(x+y+z);这一句中程序先计算1/2，因为1和2都是整型的，所以1/2的结果等于0，0接着作为乘数，0乘任何数得0，于是s=0。s又作为乘数参与area值的运算（area=sqrt(s*(s-x)*(s-y)*(s-z));），故area的值等于0.

user: user-2
content: 自己调试一下不就知道为啥是0了

user: user-3
content: 对了，楼主代码格式看起来挺不方便的，最后return 0比较好

user: user-3
content: 你看一下s的值是多少，是0 因为1/2的值取整以后就是0
user-0 提问: C语言新手求解

回复:
user: user-1
content: scanf("%s")是错的，应该是%c，另外如果能说出这个程序解决什么问题，可能更好讨论出错的地方。

user: user-0
content: 为啥我运行会崩溃 求解。。题目在下面 是英文的

user: user-2
content: 你想问什么？