Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 四叉树的问题

回复:
user: user-0
content: 可算绕出来了，谢谢各位！

user: user-1
content: 等比数列求和公式可以用在这里，很容易算出最后一层的节点数是(3n+1)/4 然后空指针数再＊4 http://baike.baidu.com/link?url=HXEsRDz6ys1KJ5EVGaavIS4o7SB2acCYM76pK9t6Vt6fwBL61s0xbEVsKNPTcqtzMQ1zWWHWTMJ-_n75xU4rNq

user: user-2
content: 因为每个树都有一个头结点。头结点下面是4个子结点，然后每个子结点又有4个子节点。 例如一个2层的四叉树，就会有5个结点，但头结点并不能计算进去。他的4个子节点下面接的都是空指针，可以得出空指针的个数为4*4=16个。这个时候n=5，则4*n-(n-1)=4*5-(5-1)=16。

user: user-3
content: 最简单的理解就是，n个节点一定就有4n个指针。 除了root节点，所有的节点都用了一个指针，就是用了n-1个 所以答案就是 4n -n +1 = 3n +1
user-0 提问: 学生党一枚，求各位大神debug

回复:
user: user-1
content: 动态规划的问题很麻烦的。 刷题的话，不会做的题到网上搜题目基本上都能搜到题解的。

user: user-2
content: 自己百度找个正确代码

user: user-0
content: 二楼补上题目 在讲述DP算法的时候，一个经典的例子就是数塔问题，它是这样描述的：   有如下所示的数塔，要求从顶层走到底层，若每一步只能走到相邻的结点，则经过的结点的数字之和最大是多少？
user-0 提问: 2道题目!!求大神给看看 谢谢

回复:
user: user-0
content: 引用第二题可以用指数对数转换，不过有些时候会有误差 lg(n^n)=n*lgn,然后去掉整数部分假定为x，计算10^x,取最高位 这个是什么原理 做是做出来了 就是不懂为什么可以这样做  x那里不懂?

user: user-1
content: 第二题可以用指数对数转换，不过有些时候会有误差 lg(n^n)=n*lgn,然后去掉整数部分假定为x，计算10^x,取最高位

user: user-2
user-0 提问: 用C自己写了个简易推箱子游戏，但是感觉自己设计地图的时候步奏太繁琐，求指教

回复:
user: user-1
content: 推箱子游戏VC6源代码 仓库番游戏VC6源代码 http://download.csdn.net/detail/zhao4zhong1/3230945
user-0 提问: 我想写一个程序，自动启动，无法关闭，请问能实现吗

回复:
user: user-1
content: http://www.baidu.com/s?wd=%E5%8D%B8%E8%BD%BD%E8%B6%8B%E5%8A%BF%E6%9D%80%E6%AF%92&rsv_bp=0&ch=&tn=baidu&bar=&rsv_spt=3&ie=utf-8&rsv_sug3=8&rsv_sug4=687&rsv_sug1=9&oq=%E5%8D%B8%E8%BD%BD%E8%B6%8B%E5%8A%BF&rsv_sug2=1&f=3&rsp=1&inputT=11109

user: user-1
content: 奉劝楼主不要把有限的生命浪费在无限的加密解密死循环中！

user: user-2
content: 守护进程在应用层解决不了问题，但是如果都到驱动层那又是矛和盾的问题了， 但是如果对方在应用层，你在驱动层，任何R3层的程序都无法操作你的进程， HANDLE都打不开，更何况干掉

user: user-3
content: 通常, 在这种情况下, 赵老师会说: 不要把有限的生命,浪费在无限的加密解密中.  确实, 你能想到的防结束方法, 安全软件也能想对结束的方法, 只是看哪个的技术能力更强.

user: user-4
content: rootkit 搜索搜搜索 这个 对你有帮助地

user: user-5
content: 正确的做法是hook，lz这样的简单，hook掉任务管理器就行了  守护什么是不靠普的，呵呵呵

user: user-6
content: 我也想到的是守护进程！

user: user-7
content: 最简单的就是开个守护进程了，检测你的程序挂了的话，就重启。

user: user-8
content: QQ电脑管家 在任务管理器中就无法删除... 同问 如何让任务管理器等管理软件无法删除启动的程序？

user: user-9
content: 给个建议，当然可能躲不过杀毒软件之类的啊！  用守护的方式，弄两个应用程序， 两个程序里面添加个功能就是相互监视，发现对方被K掉了 就启动对方。再把两个程序都添加到系统的开机自动启动项目里面。 或者是把一个程序做成服务程序，用服务程序来监视你自己的程序是否在运行。  这个可以让任务管理器没法杀死，但是躲不过杀毒软件

user: user-0
content: 引用 4 楼 user-11 的回复:楼主在哪个流氓软件公司工作 冤枉

user: user-0
content: 引用 5 楼 u012421456 的回复:lz想干啥啊做想做的事

user: user-0
content: 引用 3 楼 zhuobattle 的回复:[quote=引用 2 楼 cjwcommonuse 的回复:] [quote=引用 1 楼 zhuobattle 的回复:] 无法关闭是指用任务管理器无法结束？这个也只是相对的。 能无法用任务管理器关闭最好， 不能的话可以退一步：关闭后又能够复活 求教。。。[/quote] 会写驱动不？[/quote]没写过

user: user-10
content: lz想干啥啊

user: user-11
content: 楼主在哪个流氓软件公司工作

user: user-2
content: 引用 2 楼 cjwcommonuse 的回复:[quote=引用 1 楼 zhuobattle 的回复:] 无法关闭是指用任务管理器无法结束？这个也只是相对的。 能无法用任务管理器关闭最好， 不能的话可以退一步：关闭后又能够复活 求教。。。[/quote] 会写驱动不？

user: user-0
content: 引用 1 楼 zhuobattle 的回复:无法关闭是指用任务管理器无法结束？这个也只是相对的。 能无法用任务管理器关闭最好， 不能的话可以退一步：关闭后又能够复活 求教。。。

user: user-2
content: 无法关闭是指用任务管理器无法结束？这个也只是相对的。
user-0 提问: 为什么求B出现次数的sum函数出错？

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

user: user-2
content: 你的count2即表示字符串长, 又表示B的个数, 冲突了. 需要定义成2个变量.
user-0 提问: 我用c生成out文件去编译另一个c 说没main？

回复:
user: user-0
content: 引用 1 楼 truelance 的回复:你源代码编译有问题,不是程序执行的问题. 多行字符串每一行都用引号对括起来, 比如"AAABBB"可以写成 "AAA" "BBB"恩恩～～～

user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:19行前加一句fclose(p);谢谢！！！确实如此～～～我现在都一对对写了

user: user-1
content: 19行前加一句fclose(p);

user: user-2
content: 你源代码编译有问题,不是程序执行的问题. 多行字符串每一行都用引号对括起来, 比如"AAABBB"可以写成 "AAA" "BBB"
user-0 提问: 结构体初始化影响入参的值，求帮助！！！

回复:
user: user-1
content: 贴出来的代码是没有任何问题的！只可能是别的地方对pstDataCell这个指针进行了操作。多线程下要特别注意

user: user-0
content: 但是那个值没有发生过改写，我用GDB跟踪到(*pstDataCell)->read = (*pstDataCell);这个的时候那个值就发生变化了

user: user-2
content: 引用 4 楼 xiaohuh421 的回复:memcpy((*pstDataCell)->pstDataPoint, pstPointData, sizeof(DATA_POINT_S));  问题就在于这句  因为long *plData;是一个指针, memcpy就只复制了指针值, 而它指向的内容是不会复制的.  这样的话, 如果你在memcpy后, 原来的pstPointData中的plData内存被释放或者改写, (*pstDataCell)->pstDataPoint.lpData指向的内容肯定就会一起变化了. +++

user: user-3
content: 4L说的对~

user: user-0
content: 嗯 malloc出来的

user: user-4
content: 楼主，你在进这个函数之前，pstPointData->plData的值是怎么来的？是malloc出来的吗？

user: user-5
content: 试改如下: #include<stdio.h> #include<stdlib.h> #include<string.h> #define SUCCESS 0 #define FAILED 1  typedef struct tagDataPoint {   long *plData;   time_t arrtime;   int den; }DATA_POINT_S;  typedef struct tagDataCell {   DATA_POINT_S *pstDataPoint;   struct tagDataCell *write;   struct tagDataCell *read; }DATA_CELL_S;   int DATA_STREAM_CellInit(DATA_CELL_S **pstDataCell, DATA_POINT_S *pstPointData) {   int iRet = SUCCESS;    if (NULL == pstDataCell) //加   {     iRet = FAILED;   }   else //加   {     *pstDataCell = (DATA_CELL_S *)malloc(sizeof(DATA_CELL_S));     if (NULL == *pstDataCell) //改 if (NULL == pstDataCell)     {       iRet = FAILED;       printf("DATA_CELL_S malloc Failed\n");     }     else //加     {       (*pstDataCell)->pstDataPoint = (DATA_POINT_S *)malloc(sizeof(DATA_POINT_S));       if (NULL == (*pstDataCell)->pstDataPoint)       {         iRet = FAILED;         printf("DATA_POINT_S malloc Failed\n");       }     }      if (NULL != pstPointData)     {       //移上 (*pstDataCell)->pstDataPoint = (DATA_POINT_S *)malloc(sizeof(DATA_POINT_S));       memcpy((*pstDataCell)->pstDataPoint, pstPointData, sizeof(DATA_POINT_S));     }      (*pstDataCell)->write = (*pstDataCell);     (*pstDataCell)->read = (*pstDataCell);   }   return iRet; }  int main(void) {   DATA_CELL_S *pstDataCell;   long l[5] = {1, 2, 3, };   DATA_POINT_S pstPointData = {l, 100, 200};   int r = DATA_STREAM_CellInit(&pstDataCell, &pstPointData);   return 0; }

user: user-6
content: memcpy((*pstDataCell)->pstDataPoint, pstPointData, sizeof(DATA_POINT_S));  问题就在于这句  因为long *plData;是一个指针, memcpy就只复制了指针值, 而它指向的内容是不会复制的.  这样的话, 如果你在memcpy后, 原来的pstPointData中的plData内存被释放或者改写, (*pstDataCell)->pstDataPoint.lpData指向的内容肯定就会一起变化了.

user: user-7
content: 怀疑你是多进程/线程运行, 对 (*pstDataCell)->write 赋过值以后, 就有别的进程/线程向这个地址写入数据了.

user: user-8
content: memcpy((*pstDataCell)->pstDataPoint, pstPointData, sizeof(DATA_POINT_S)); 这句话也有问题，，(*pstDataCell)->pstDataPoint 这个指针也是不定值，没有初始化。

user: user-8
content: 这个应该容易排查，跟一下就行了。 你的是32位，还是64位的？  我感觉不像read这个语句出了问题。可以在pstPointData->plData 这个内存地址上打个硬件断点看一下。
user-0 提问: 不包含stdlib.h时，strtod结果诡异

回复:
user: user-1
content: 引用 6 楼 ielxd1989 的回复:[quote=引用 5 楼 zhao4zhong1 的回复:] 计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构…… 这种代码在vc6中是编不过的，gcc这样可以编过，很容易坑人啊。[/quote] 研究一下gcc的命令行选项： [root]# gcc --help [root]# gcc -v --help

user: user-0
content: 引用 5 楼 zhao4zhong1 的回复:计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构…… 这种代码在vc6中是编不过的，gcc这样可以编过，很容易坑人啊。

user: user-1
content: 计算机组成原理→DOS命令→汇编语言→C语言（不包括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-0
content: 引用 3 楼 zhao4zhong1 的回复:搜“隐式声明” 隐式声明都是以int作为返回值类型的。 而strtod实际上返回的是double，会不会是编译器生成代码时，按照整形返回值来取strtod的结果，导致取到的返回值不正确呢？

user: user-1
content: 搜“隐式声明”

user: user-0
content: 引用 1 楼 user-2 的回复:你开-Wall编译看看它给你啥警告 [root@localhost Test]# gcc -Wall t.c t.c: 在函数‘main’中: t.c:7: 警告：隐式声明函数‘strtod’

user: user-2
content: 你开-Wall编译看看它给你啥警告
user-0 提问: 座位随机分配算法

回复:
user: user-0
content: 能麻烦讲解一下思路么？

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

回复:
user: user-1
content: hello 楼主，你的问题解决了么？

user: user-2
content: 建议楼主先学会用抓包软件比如wireshark

user: user-0
content: 引用 3 楼 ForestDB 的回复:format是对的。 大神做过？能否留个联系方式 我老返回21啊  堵这了

user: user-3
content: format是对的。

user: user-0
content: 哦！我还没发现呢 那我这么对时间戳赋值 sprintf(timestamp, "%02d%02d%02d%02d%02d",time->tm_mon+1,time->tm_mday,time->tm_hour,time->tm_min,time->tm_sec); 你觉得对不？

user: user-4
content: 0x30 is the ascii code of 0

user: user-2
content: 不知道有多少前人掉在TCP Socket send(人多)send(病少)send(财富) recv(人多病)recv(少财富) 陷阱里面啊！ http://topic.csdn.net/u/20120210/09/51109ed0-07b9-41f2-b487-a51597f2ca01.html

user: user-3
content: 我指的是%02d%02d%02d%02d%02d是对的。

user: user-0
content: 引用 5 楼 zhao4zhong1 的回复:建议楼主先学会用抓包软件比如wireshark 会用啊  不过抓到了也没用  MD5加密过的内容  也看不出什么来啊
user-0 提问: 新手发帖 return 可以这样用吗？

回复:
user: user-1
content: 写是可以这么些，不过逻辑有点混乱，这个返回值的意义是什么？？？ x<y 和 x>y 我们知道他返回二者的最大值，x==y 返回 输出的字符个数，这个逻辑好像不对吧！！！

user: user-2
content: printf的返回值是打印出字符串的个数

user: user-3
content: lz 你自己看看   函数返回的是int类型   而你返回的是printf（“==”）   我测试的结果是==2    ==我们知道是输出“==”，但是这个2又是什么意思呢？  我们在看下lz的程序printf（”%d “，chen（3,3））  在这里等同于  printf("%d\n",printf("=="));    我们还是不知道这个2是从哪里来的！！！于是我把printf("==")改成  printf("==abc")    结果输出结果是==abc5   在这里 我想大家都应该猜想出这个5是什么意思了吧！！！没错   后面这个数字就是指  字符的个数   前面的”==“是两个字符   所以是2  而”==abc“是五个字符   所以理所当然是5啦！

user: user-4
content: 这个return只是你自己定义的，没有多大意思，除非你自己让return后面有个变量值

user: user-5
content: 应该是可以的

user: user-6
content: return只要返回和声明的返回类型兼容的对象即可 chen声明返回int，printf的返回值也是int，该返回值进而由return返回给chen

user: user-7
content: 凑凑热闹，，，，，

user: user-8
content: 可以 打印的是后面的返回结果

user: user-9
content: print是有返回值的。

user: user-10
content: #include <stdio.h> int chen(int x,int y) { 	if (x<y) 		return y; 	else if (x>y) 		return x; 	else if(x==y) 		return printf("==asd\n"); } int main() {	  	printf("一共打印了%d个字符\n",chen(3,3)); 	return 0; }这么写是可以的啊

user: user-11
content: 这么简单的问题，清晰的回答，还没结贴？

user: user-12
content: printf的返回值是打印的字符串长度啊，"=="长度不就是2么

user: user-13
content: 不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！  有人说一套做一套，你相信他说的还是相信他做的？ 其实严格来说这个世界上古往今来所有人都是说一套做一套，不是吗？  不要写连自己也预测不了结果的代码！   代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试是程序员必须掌握的技能之一。

user: user-14
content: 看printf()函数有无返回参数，若有，再看返回的参数与当前函数要返回的类型是否一致，或者是否可以隐式转换

user: user-15
content: 同意楼上的理解，printf函数也有返回值，它返回所打印的字符的数目。如果有输出错误，那么printf函数会返回一个负数。所以打印出2，有多少个字符打印出数字几，而数字前面的字符是由于返回了printf("==")函数，因此打印出“==2”。

user: user-16
content: 可以参照递归函数理解，主函数调用chen(3,3),返回了printf("==")函数，主函数输出chen()函数的返回值，由于计算机打印形式为%d，故输出==2

user: user-17
content: 至于 2 这个值 是printf的返回值  printf返回2是因为打印了== 2个字符 如果是打印 === 那么printf返回的就是 3 了

user: user-17
content: return后面接表达式语句  注意数据类型要能匹配 就OK

user: user-18
content: return后面加的是printf的返回值，但是为什么是2不太清楚了

user: user-19
content: return 的是printf函数的返回值
user-0 提问: 在对话框中输入一个汉字，然后程序自动以这个汉字为文档名，建立一个文本文档

回复:
user: user-1
content: //GBK汉字内码范围（不包括A1xx～A9xx的标点符号英文字母特殊符号等）    //区码  ,位码    //81-A0 ,40-7E 80-FE    //AA-AF ,40-7E 80-A0    //B0-D6 ,40-7E 80-FE    //D7    ,40-7E 80-F9    //D8-F7 ,40-7E 80-FE    //F8-FE ,40-7E 80-A0

user: user-1
content: #include <stdio.h> #include <string.h> #include <locale.h> char fn[7]; FILE *f; int main() {     setlocale(LC_ALL,"chs");     while (1) {         printf("请输入一个汉字，我们将新建一个以该汉字命名的文本文档:");fflush(stdout);         rewind(stdin);         if (1==scanf("%2s",fn)) {             if ((unsigned char)fn[0]>=0x81 && (unsigned char)fn[1]>=0x40 && fn[2]==0) break;         }     }     strcat(fn,".txt");     f=fopen(fn,"w");     if (NULL==f) {         printf("创建文件[%s]出错!\n",fn);         return 1;     }     fclose(f);     printf("创建文件[%s]成功。\n",fn);     return 1; }

user: user-2
content: 引用 2 楼 cjwcommonuse 的回复:char fileName[256] = ""; scanf("%s", fileName); strcat(fileName, "txt");   //#include <stdlib.h> FILE fp = fopen(fileName, "w"); ... fp.close(); 大概是这个样子，可能某些细节不对  strcat(fileName, ".txt");   //#include <stdlib.h>

user: user-2
content: char fileName[256] = ""; scanf("%s", fileName); strcat(fileName, "txt");   //#include <stdlib.h> FILE fp = fopen(fileName, "w"); ... fp.close(); 大概是这个样子，可能某些细节不对

user: user-3
content: scanf fopen fclose
user-0 提问: 各位大神，如何用gcc编译器一起编译某个文件夹下的几个文件？？

回复:
user: user-0
content: 多谢各位的回答，已经解决了！在命令行先输入cd 文件夹名即可进入该文件夹下，然后 gcc *.c就可以一起编译了

user: user-1
content: try to use makefile/CMake

user: user-2
content: 把sqlist.c的文件声明跟main.c放在一起然后编译试试

user: user-3
content: gcc -Wall -c sqlist.c  gcc -Wall -o demo main.c sqlist.o

user: user-0
content: main.c肯定包含了common.h文件的，但是子函数都是写在sqlist.c里面的，我试了只编译main.c编译器报错的！找不到某某函数。。。

user: user-4
content: 把头文件和c文件一起包含到main.c里，直接编译就可以了！编译器是从main函数开始编译的！
user-0 提问: 计算机新生面对如下几个问题不会书写，请求各位大神帮忙

回复:
user: user-1
content: 提醒：再牛×的老师也无法代替学生自己学习和上厕所！

user: user-2
content: 路过，自己的作业自己做。

user: user-3
content: 我擦，新生怎么给这么难的题？如果学过一个学期的话，看看书还是能做出来的。。。楼主你说是不？

user: user-4
content: 百度文库呀

user: user-5
content: 发重复了。。。 6. #include <stdio.h> #include <string.h> int main() {  int i=0,letter=0,num=0;  char temp[100];  fgets(temp,100,stdin);  for(i=0;i<100;i++)  {    if((temp[i]>='a'&&temp[i]<='z')||(temp[i]>='A'&&temp[i]<='Z'))    {     letter++;    }    if(temp[i]>=48&&temp[i]<=58)    {      num++;    }  }  printf("num is %d letter is %d\n",num,letter);  return 0; }

user: user-5
content: 看来还要再善良一点你才给分 6. #include<stdio.h> typedef struct  {  int num;  char name[10];  float ch,math,eng; }score; int main()  {  int i=0,j=0,best=0,result=0;  score arr[10];  float total[10];  printf("input number,name,scores");  for(i=0;i<10;i++)  {    scanf("%d%s%f%f%f",&(arr[i].num),&(arr[i].name),&(arr[i].ch),&(arr[i].math),&(arr[i].eng));    total[i]=arr[i].ch+arr[i].math+arr[i].eng;  }  for(i=0;i<9;i++)  {   for(j=i+1;j<10;j++)   {     if(total[i]<total[j]) 	{       best=total[i]; 	  total[i]=total[j]; 	  total[j]=best; 	}   }     }  for(i=0;i<10;i++)  {    if(best==total[i])    result=i;  }  printf("number one is%s\n",arr[result].name);  return 0; }

user: user-0
content: 谢谢你得第一题，

user: user-5
content: 还是我比较善良 不要太感动 1.#include<stdio.h> typedef struct  {  int num;  char name[10];  float ch,math,eng; }score; int main()  {  int i=0,j=0,best=0,result=0;  score arr[10];  float total[10];  printf("input number,name,scores");  for(i=0;i<10;i++)  {    scanf("%d%s%f%f%f",&(arr[i].num),&(arr[i].name),&(arr[i].ch),&(arr[i].math),&(arr[i].eng));    total[i]=arr[i].ch+arr[i].math+arr[i].eng;  }  for(i=0;i<9;i++)  {   for(j=i+1;j<10;j++)   {     if(total[i]<total[j]) 	{       best=total[i]; 	  total[i]=total[j]; 	  total[j]=best; 	}   }     }  for(i=0;i<10;i++)  {    if(best==total[i])    result=i;  }  printf("number one is%s\n",arr[result].name);  return 0; }

user: user-6
content: 自己的作业找别人做？你是在虚心求教呢？还是想让别人帮你写作业呢？如果真是在学习当中碰见问题大家都会帮助你的，不过你这样的话。。真心有点看不起你......

user: user-7
content: 自己的作业自己做。。 把书认真看一遍，我就不信你还不会做。。

user: user-8
content: 沒有vc6，只能路過了。

user: user-9
content: 唐浩强  c语言习题吧。

user: user-10
content: 引用 1 楼 user-11 的回复:不会吧 这都已经放假了啊有的学校会在假期布置作业的，这不是显得学校重视学习嘛

user: user-11
content: 不会吧 这都已经放假了啊
user-0 提问: 一个关于多尺度处理中数学稳定性的问题

回复:
user: user-1
content: 个人思路：换成f(b) + f(c) = f(a)后 定义两个全局变量，分别表示等式左右奇数个数，f()都操作该数，使每次左右增长次数都一样 遇奇数就+1. PS：该思路只保证等式会成立，不具可逆性。

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

user: user-3
content: 扩大数值不就行了 4变成8 3变成6 1变成2  这样就避免四舍五入的误差

user: user-4
content: 1楼好man啊。

user: user-5
content: 引用 2 楼 tangfengray 的回复:*10/5  soeasy 看错题目了

user: user-5
content: *10/5  soeasy

user: user-6
content: 不存在 2-1=1 f(2)-f(1)=f(1) 于是 f(2)=2*f(1)（因为这里都是整数，并不是什么奇怪的数，所以可以两边加上f(1)） 如果等式成立，f(2)必然为偶数，这显然与一般意义上的除以2计算不同 除非lz自己定义一个除以2的行为，否则不存在这样的运算
user-0 提问: C语言求教简单问题

回复:
user: user-1
content: for(;;malloc(1));

user: user-2
content: 计算1->10的累和，你需要看一下for循环函数的使用

user: user-3
content: 1+2+3.....+10=55

user: user-4
content: 求一到十的和

user: user-5
content: 等价于下面代码int s=10; for(i=10;0 ==i;i--) s+=i;

user: user-6
content: 引用 5 楼 zhao4zhong1 的回复:for (A;B;C) D; //等价于 {  A;  while (1) {   if (!(B)) break;   D;   C;  } }  5楼说的好，就是这样，最终求的是10到1，这十个数的值

user: user-7
content: 不知道这个是不是符合代码可读性的要求

user: user-8
content: 这种问题没意义

user: user-9
content: 就是计算从10加到1，当i=0时结束

user: user-10
content: 这个是计算 S=10+9+....+1的值.  for(循环变量赋初值;循环条件(0,非0);循环变量增值)  for(;--i;)  此处省略了"循环变量赋初值"以及"循环变量增值"两个表达式,仅仅保留了"循环条件"  循环条件 一般无非是 条件关系比较 > >= < <= !=  ==   条件关系最终结果都被转化成"0""非0"两种结果.  这里的 循环条件 是--i  (i初值为10) for循环是以此变成 9 8 7 6 5 4 3 2 1 0 ,只有0会让for循环终止,前面的非0 都在执行 s+=i (s=s+i)也就是 s=10+9+8+...+3+2+1  10为s初值  9 8 ..2 1 为变量i  如果有循环 for(;1;) 那么这个for循环会一直执行下去(除非循环下面有break; goto 语句) 如果有循环for(;0;)那么这个循环不会执行以一次.  就是这个道理了.

user: user-11
content: //等同于while吧 int s=10; int i=10; while(--i) { s+=i； }

user: user-12
content: 引用 5 楼 zhao4zhong1 的回复:for (A;B;C) D; //等价于 {  A;  while (1) {   if (!(B)) break;   D;   C;  } } 果断正解

user: user-13
content: for (A;B;C) D; //等价于 {  A;  while (1) {   if (!(B)) break;   D;   C;  } }

user: user-14
content: 这个就相当于 while（--i） {     s += i; } 就相当于计算 s = 10+9+8+7+6+5+4+3+2+1； 当--i为0的时候退出循环

user: user-15
content: i为0时，条件为false ,for循环结束

user: user-16
content: 还有这种呢 for(;;) 死循环。

user: user-17
content: 这个呢 就是for循环的初始化条件为空  更新条件为空(判断条件的时候有给变量自减) 这段代码的功能是求从10到1十个数的和
user-0 提问: 普里姆算法求最小生成树c语言，输出结果只有第一步。求纠正

回复:
user: user-0
content: 我找不出错在哪，求解释

user: user-1
content: http://baike.baidu.com/link?url=Q1rfIZbsHMgxJhknzDrkFT9JrbBm605-w_qvY9kbcoRGNdX9wXJbPsTJKPsslIxmGk7f7iug5XTAiBthqT8YMq

user: user-2
content: 楼主先把代码格式化一下吧！要不看着太费劲！
user-0 提问: C语言读取txt文本里的数据。只要格式稍有复杂 就不会读了。。。

回复:
user: user-0
content: 解决了~用的zhao4zhong1 和Automation_dmu 的方法 第一次注意到fscanf的返回值问题。。。  struct point { 	char num[10]; 	double x; 	double y; }; 	point pn[6]; //待判断的6个点 	char dust[50]; 	FILE *read; 	read = fopen("欲判断点.dat","r"); 	count = 0; 	fgets(dust,60,read); //fgets 后  文件指针指向下一行开头。 	int Line = 1; 	while(!feof(read)) 	{ 		if(fscanf(read,"%s%lf%lf",&pn[count].num,&pn[count].x,&pn[count].y) == 3) 		{ 			count++; 			Line++; 		} 		else 		{ 			printf("Line %d Error!\n",Line); 		} 	}   O(∩_∩)O谢谢~

user: user-1
content: std::ifstream ifs(szFileName, std::ios::in); if(ifs.fail())     return false;  ifs >> lpTestDataX >> lpTestDataY;  ifs.close();  可以参考一下！

user: user-2
content: FILE *pf; 	struct{ 		char name[16]; 		double px; 		double py; 	}p; 	pf = fopen("2.c", "r"); 	while(!feof(pf)) 	{ 		fscanf(pf, " %s %lf %lf ",p.name, &p.px, &p.py); 		printf("%-10s %-16lf %-16lf\n",p.name, p.px, p.py); 	} 	fclose(pf);

user: user-3
content: 第7行前加两句i=0;L=1;

user: user-3
content: 第7行前加一句i=0;

user: user-3
content: struct PS {  char no[40];  double x;  double y; } ps[100]; …… while(1) {     if (NULL==fgets(pc, 1000, pflIn)) break;     L++;     if (3==sscanf(pc,"%39s%lf%lf",ps[i].no,&ps[i].x,&ps[i].y) {       i++;     } else {      printf("line %d format error:%s",L,pc);     } }

user: user-4
content: 一个思路 没有编译环境草写了一个！就是 1跳过第一行，取出剩下的行！ 2在二维数组中对数据进行核查 #include <stdio.h> #include <stdlib.h> #include <string.h> void fun(char *a,char *b,char *s) { 	int i,j; 	int c=0; 	for (i=0;i<strlen(a);i++) 	{ 		if (a[i]=='\t'&&c==0) 		{ 			c=1; 			continue; 		} 		if (c==1) 		{ 			for(j=0;a[i]!='\t';j++) 			{ 				b[j]=a[i]; 			} 			b[j]='\0'; 			c=2; 		} 		if (c==2) 		{ 			for(j=0;a[i]!='\0';j++) 			{ 				c[j]=a[i]; 			} 			c[j]='\0'; 		} 	} } int main() { 	FILE *fp; 	fp=fopen("1.txt","r"); 	char msg[40]; 	char qq[10][41]; 	char qq1[41]; 	char qq2[42]; 	memset(msg,sizeof(msg),0); 	int i=0; 	int j=0; 	while(fgets(msg,sizeof(msg)/sizeof(char),fp)) 	{ 		if (i==0){ 		        i++; 			memset(msg,sizeof(msg),0); 	       		continue; 		} 		else{ 			j++; 			strcpy(qq[j],msg); 			memset(msg,sizeof(msg),0); 		} 	} 	for (i=0;i<10;i++) 	{ 	fun(qq[i],qq1,qq2);	 	printf("%s\t%s\n",qq1,qq2); 	memset(qq1,sizeof(qq1),0); 	memset(qq1,sizeof(qq2),0); 	} 	return 0; }

user: user-0
content: 引用 楼主 darksworld 的回复:点号     x坐标           y坐标 1        58589.592080  54596.681837 P2       59375.790588  53520.303530 D3       57590.790588  53675.457160 USA_90   55646.576183  54255.474606 5        59215.055150  54426.982554 P6       55644.576183  54200.474606  我建立了一个point结构体，想把6个点的x y坐标读进去 第一行用了while(c!='\n') 读到行末尾自动跳出 但是从第二行开始不知道怎么办了。  求指点。。 这样读完都是一行一行的字符串啊。那我怎么把 x y坐标存到结构体里呢？

user: user-5
content: fgets直接读一行  char pc[1000]; FILE *pflIn; pflIn = fopen("XX.txt", "rb"); fgets(pc, 1000, pflIn);//如果一行的内容小于1000个字节，读到行尾就结束。 while(!feof(pflIn)) { 	...///处理代码 	fgets(pc, 1000, pflIn);//如果一行的内容小于1000个字节，读到行尾就结束。 }
user-0 提问: 为什么不能激活

回复:
user: user-1
content: 请检查每个函数的返回值。

user: user-2
content: 路径名对么，可以改成英文的或者换个位置试试

user: user-3
content: FindWindow(NULL,str1);  你确定这里查找到了吗? 新开的窗口的名字, 你确定是路径名吗?

user: user-0
content: 引用 4 楼 zhao4zhong1 的回复:请检查每个函数的返回值。  #include <windows.h>  int main(void) {   char str1[]="E:\\飞机\\帮助.exe";   ShellExecute(NULL,"open",str1,NULL,NULL,SW_HIDE);   Sleep(100);      HWND hOut=FindWindow(NULL,str1);   printf("%d",hOut);      int h;   h=ShowWindow(hOut,SW_SHOWNORMAL);   printf("\n%d",h);      HWND hOut1;   hOut1=SetActiveWindow(hOut);   printf("\n%d",hOut1);      SetForegroundWindow(hOut);       getch();   if(hOut!=0)PostMessage(hOut,WM_CLOSE,0,0);	   return 0;   }  SetActiveWindow(hOut); 函数返回为0，说明没有激活。   现在问题已经搞定，用 SetForegroundWindow(HWND hOut) 函数。

user: user-0
content: 引用 2 楼 xiaohuh421 的回复:FindWindow(NULL,str1);  你确定这里查找到了吗? 新开的窗口的名字, 你确定是路径名吗?  能显示 关闭，说明已经找到了。  问题已经搞定，用 SetForegroundWindow(HWND hOut) 函数。

user: user-0
content: 引用 1 楼 user-6 的回复:能关闭是什么意思  就是能执行 PostMessage(hOut,WM_CLOSE,0,0);

user: user-4
content: SW_SHOWNORMAL

user: user-5
content: ShellExecute(NULL,"open",str1,NULL,NULL,SW_SHOWNORMAL);不就完了

user: user-6
content: 能关闭是什么意思
user-0 提问: 进程1操作数据库，并通知进程2，进程2读数据库并缓存，再给进程1返回结果，若失败，进程1如何将数据库回滚到操作之前

回复:
user: user-1
content: 引用 楼主 jhyjhy1026 的回复:请教各位，如下场景的实现方案： 进程1对数据库进行增/删/改，完成操作后通知进程2；进程2读取数据库，缓存数据，完毕后给进程1返回结果，若返回失败，进程1需要将数据库回滚到增/删/改前。 注：语言：C，数据库：sqlite3。 问题：如何回滚？进程1对数据库进行操作后已提交事务，否则进程2查询不到最新的数据，此时有什么方案可以还原数据库到进程1操作之前。 就只能自己实现日志了，要是单线程的话还好，多线程的话建议你还是换数据库把 这玩意要自己写的话不简单的

user: user-2
content: 这只是一个执行顺序的问题  进程1把要增删改的数据 交给进程2   进程2缓存，成功则进程2去操作数据库，并返回结果给进程1，失败则直接返回进程1

user: user-3
content: 引用 7 楼 jhyjhy1026 的回复:脱离数据库，考虑程序设计上的其他方案，刚才想用共享内存，貌似也不太合理，实在想不出好方案了。。。 SQL存储过程中的BEGIN TRANSACTION，ROLLBACK TRANSACTION，COMMIT TRANSACTION事务处理功能不是那么容易自己实现的。

user: user-3
content: 建议将本来打算写到C进程中的逻辑挪到SQL存储过程中实现。

user: user-0
content: 脱离数据库，考虑程序设计上的其他方案，刚才想用共享内存，貌似也不太合理，实在想不出好方案了。。。

user: user-3
content: sqlite转SQL Server应该不费什么劲吧。

user: user-0
content: 没有其他办法了吗？换数据库估计够呛了，项目已经进入中后段了。

user: user-3
content: 引用 2 楼 jhyjhy1026 的回复:sqlite好像不支持存储过程。 换SQL Server或MySQL

user: user-0
content: 各位大神们，求支招啊!

user: user-0
content: sqlite好像不支持存储过程。
user-0 提问: 为何不能实现两次复制？

回复:
user: user-1
content: 因为下一个就是'\0'了

user: user-2
content: 后一个while(*s++=*t++); 改成 while(*s++=*p++);

user: user-3
content: while(*s++=*t++);//循环结束 t指向 '\0' 之后一个字节  s=s-1; while(*s++=*t++);//而按照你的代码 恰好 数组 '\0'之后的元素 都是'\0'那么就是 赋值为0然后退出

user: user-3
content: void strcpy2(char *s,char *t) {     char *p=t;     while(*s++=*p++)         ;//循环体独占一行 哪怕只是一个空语句     s=s-1;     while(*s++=*t++)         ; }
user-0 提问: 代码理解

回复:
user: user-1
content: struct menu_obj;  static void tw_draw_setup(void* list, int item) { 	menu_obj* al = (menu_obj*)list;    //将一个void类型的指针强制转换为menu_obj类型的指针，并赋值给al  	unsigned char line[TW_LEN] = { 0 };    //无符号字符数组全部初始为0  	struct font_info Item_line = { line, 1, 0, NOMAL_FG_COLOR, NOMAL_BG_COLOR, 0 };    //  	unsigned char i, j;  	for (i = 0; i<TW_LEN; i++)    //将line元素赋值为IDX_SPACE 		line[i] = IDX_SPACE; 	line[TW_LEN] = 0;    //将line数组外的第一个元素置0  	for (j = 0; j<TW_ITEM; j++) 	{ 		tw_draw_board(al, item, j);	   //调用tw_draw_board  		if (j == item) 		{ 			Item_line.bg_color = NOMAL_BG_COLOR;    //设置成员变量 			Item_line.fg_color = 10;                //设置成员变量  			line[0] = IDX_SELECT_ICON;    //line[0]赋值IDX_SELECT_ICON 			line[1] = IDX_SELECT_ICON + 1;    //依上+1 			//line[2] = IDX_SELECT_ICON+2; 		} 		else 		{ 			Item_line.bg_color = NOMAL_BG_COLOR;    //设置成员变量 			Item_line.fg_color = NOMAL_FG_COLOR;    //设置成员变量  			line[0] = IDX_SPACE;    //line[0]赋值IDX_SPACE 			line[1] = IDX_SPACE;    //依上 			//line[2] = IDX_SPACE; 		}  		if (j<2) 		{ 			for (i = TEXT_HEAD; i<LANGUAGE_FONT_LEN + TEXT_HEAD; i++) 				line[i] = IDX_LANGUAGE_FONT + (i - TEXT_HEAD) + j*LANGUAGE_FONT_LEN; 		} 		else 		{ 			line[4] = IDX_SPACE;    //line数组4-7位置元素赋值IDX_SPACE 			line[5] = IDX_SPACE; 			line[6] = IDX_SPACE; 			line[7] = IDX_SPACE; 		}  		Item_line.y = 2 + j;    //成员变量赋值 		osdi_draw_font(&Item_line);    //osdi_draw_font调用  	} }  1、楼主的程序不完成，就看这些也不知道你的函数是干什么的 2、程序没有缩进，看着很累 3、都是基本的东西，楼主还要每句解释。。。

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

回复:
user: user-1
content: 内存泄露 ！！ memcpy是假象吧

user: user-0
content: 多谢各位回答！尤其是zhuobattle和jha334201553 经验证，实际情况是这样：刚分配1024*1024大小内存的时候确实是分配到虚拟内存上了，物理内存上只分配了4k。所以实际用的时候，如果是搬运小于4k，则物理内存不增加，如果大于4k再按实际需要增加物理存。 结贴

user: user-2
content: 两未影射的虚址对拷,系统忽略掉了,呵呵呵

user: user-3
content: memcpy 不会的，你任务管理器看到的应该只是当前在内存中的数据代码的总大小，那还有一部分在磁盘的pagefile里面啊，你运行函数可能将磁盘上的数据隐射到内存中导致文件增大呢，要不你把虚拟内存关掉再测测

user: user-4
content: 引用 3 楼 feixue2588 的回复:[quote=引用 1 楼 zhuobattle 的回复:] 程序占用的内存增加了4k?你看的是哪个内存占用？有可能是memcpy触发了虚拟内存映射到物理内存的过程，导致了物理内存涨了，这个不是内存泄漏  谢谢，我看的是当前程序.exe对应任务管理器里的“内存使用”列。  请问什么情况下会有“memcpy触发了虚拟内存映射到物理内存的过程”呢？我写的那段测试小程序就不会出现内存增加。 另外，这种情况下导致的物理内存增长为什么不算内存泄漏？系统什么时候会回收这部分内存？多谢了！[/quote] 刚分配可能只是虚拟内存，你实际有数据操作时，才会映射到物理内存进行拷贝操作；你写的程序当然会有内存增加，因为你new了，你在适当的地方，比如不使用时delete [] 掉。这样当然不会内存泄漏，哪有程序不分配内存，不使用内存的。只要做好释放就OK

user: user-0
content: 引用 1 楼 zhuobattle 的回复:程序占用的内存增加了4k?你看的是哪个内存占用？有可能是memcpy触发了虚拟内存映射到物理内存的过程，导致了物理内存涨了，这个不是内存泄漏  谢谢，我看的是当前程序.exe对应任务管理器里的“内存使用”列。  请问什么情况下会有“memcpy触发了虚拟内存映射到物理内存的过程”呢？我写的那段测试小程序就不会出现内存增加。 另外，这种情况下导致的物理内存增长为什么不算内存泄漏？系统什么时候会回收这部分内存？多谢了！

user: user-5
content: 用工具检查，windows可以用boundchecker等

user: user-4
content: 程序占用的内存增加了4k?你看的是哪个内存占用？有可能是memcpy触发了虚拟内存映射到物理内存的过程，导致了物理内存涨了，这个不是内存泄漏
user-0 提问: 使用fopen读取文件的问题

回复:
user: user-0
content: 按照你说的改了，不行。

user: user-1
content: int main(int argc, char **argv)  {     int i;     for( i = 1; i < argc; ++i )      {         printf("Processing File: %s\n", argv[i]);         process_file(argv[i]);     }       return 0; }   int process_file(char *filename)  {         double result = 0;     char buffer[LINELEN];     char *fgets_rtn = NULL;     char **temp = NULL;     FILE *fd = NULL;       fd = fopen(filename, "r");     if (NULL == fd)     {         fprintf(stderr, "Error: Cannot open the file %s for reading!\n", filename);         return -1;     }         while( 0 == feof(fd) )      {           fgets_rtn = fgets(buffer, LINELEN, fd);         if( NULL == fgets_rtn)          {             break;         }               if( '\n' == buffer[ strlen(buffer) - 1] )          {             buffer[ strlen(buffer) - 1] = '\0'; /// 这个其实没有必要，fgets本来最后一个就是'\0'             }                       calc(temp);     ////////! 这个temp没有赋值，是不是 temp = &buffer;                              ////////! 或者直接写calc(&buffer)     }     printf("\n");     printf("Final Total: %.2f\n", result);     fclose(fd);     return 0; } int is_valid_int(char *str) {     int i;     int space_flag, pn_flag = 1;     for ( i=0; i<strlen(str); i++)     {                   if (pn_flag&&(str[i]=='+'||str[i]=='-'))         {             pn_flag = 0;             continue;         }         else pn_flag = 0;           if (space_flag&&isspace(str[i]))         {             continue;         }         else space_flag = 0;           if (!isdigit(str[i]))         {             return 0;         }     } return 1; }   int is_valid_float(char *str) {     int i;     int point_flag = 1;     int space_flag, pn_flag = 1;     for ( i=0; i<strlen(str); i++)     {                   if (pn_flag&&(str[i]=='+'||str[i]=='-'))         {             pn_flag = 0;             continue;         }         else pn_flag = 0;           if (space_flag && isspace(str[i]))         {             continue;         }         else space_flag = 0;           if (point_flag && str[i]=='.')         {             point_flag = 0;             continue;         }           if (!isdigit(str[i]))         {             return 0;         }     }     return 1; }   int calc(char **temp) {     int j = 0;     double result = 0;     char buffer[LINELEN];     temp[j] = buffer;           for (j=0; j < strlen(buffer); j++)     {         if(is_valid_int(temp[j]))         {             double temp1;             temp1 = result + strtol(temp[j], NULL, 10);             printf("%.2f + %.2f = %.2f\n", result, (double)strtol(temp[j], NULL, 10),temp1);             result = temp1;         }                   else if (is_valid_float(temp[j]))         {             double temp2;             temp2 = result + strtod(temp[j], NULL);             printf("%.2f + %.2f = %.2f\n", result, strtod(temp[j], NULL),temp2);             result = temp2;         }         else          {             printf("%s is not a valid number...\n", temp[j]);         }     }     return 1; }
user-0 提问: 杭电 2055 An easy problem

回复:
user: user-1
content: #include<stdio.h> int main() { int a,s,i; char z;  while(scanf("%d",&a)!=EOF)  {  	for(i=0;i<a;i++)  	{ z = getchar(); //scanf 输入 %c时 要考虑 上一次输入的换行符 还在输入流中。      scanf("%c%d",&z,&s);      if(z>='a'&&z<='z')       printf("%d\n",-((int)(z-'a')+1)+s);      else if(z>='A'&&z<='Z')      printf("%d\n",(int)(z-'A')+1+s);  	}  } return 0; // 函数结束时 需要正常退出。 }   10080989	2014-02-10 09:35:22	Accepted	2055	0MS	228K	318 B
user-0 提问: 怎样定义一个字符类型的宏在双引号中可以使用

回复:
user: user-1
content: 引用 2 楼 zhao4zhong1 的回复:仅供参考 #include <stdio.h> #define BUF_LEN 1024 #define EMAIL_LEN 80 #define QUOTE1(q) #q #define QUOTE(q) QUOTE1(q) char s[]="\"单身\"<760026313@qq.com>; \"XXD\"<502144951@qq.com>; \"凤凰\"<542307112@qq.com>;\"\" <111@qq.com>;\"\" <222@sina.com.cn>;\"\" <333@yahoo.com>;"; char *p,*q; int n,k; char e[EMAIL_LEN]; char b[BUF_LEN]; void main() {     p=s;     q=b;     while (1) {         if (1==sscanf(p,"%*[^<]<%"QUOTE(EMAIL_LEN)"[^>]>%n",e,&n)) {             p+=n;             k=sprintf(q,"%s|",e);             q+=k;             if (q-b>BUF_LEN-EMAIL_LEN) break;         } else break;     }     q[-1]=0;//去掉末尾的|     printf("%s\n",b); } //760026313@qq.com|502144951@qq.com|542307112@qq.com|111@qq.com|222@sina.com.cn|333@yahoo.com   强悍啊

user: user-2
content: 仅供参考 #include <stdio.h> #define BUF_LEN 1024 #define EMAIL_LEN 80 #define QUOTE1(q) #q #define QUOTE(q) QUOTE1(q) char s[]="\"单身\"<760026313@qq.com>; \"XXD\"<502144951@qq.com>; \"凤凰\"<542307112@qq.com>;\"\" <111@qq.com>;\"\" <222@sina.com.cn>;\"\" <333@yahoo.com>;"; char *p,*q; int n,k; char e[EMAIL_LEN]; char b[BUF_LEN]; void main() {     p=s;     q=b;     while (1) {         if (1==sscanf(p,"%*[^<]<%"QUOTE(EMAIL_LEN)"[^>]>%n",e,&n)) {             p+=n;             k=sprintf(q,"%s|",e);             q+=k;             if (q-b>BUF_LEN-EMAIL_LEN) break;         } else break;     }     q[-1]=0;//去掉末尾的|     printf("%s\n",b); } //760026313@qq.com|502144951@qq.com|542307112@qq.com|111@qq.com|222@sina.com.cn|333@yahoo.com

user: user-3
content: 虽然没看懂你的需求 但是，宏不是万能的，别什么东西都想扯到宏来实现。 基本上，是你的需求错误。
user-0 提问: 结构数组问题：如果删除其中一条记录，最后一条记录不能保存

回复:
user: user-1
content: 所谓修改删除文件a某位置的内容，其实是读打开文件a，再将‘a中修改删除位置之前的内容＋修改删除的内容＋a中修改删除位置之后的内容’保存到文件b，关闭文件a，删除文件a，将文件b改名为与之前文件a相同的名字，仅此而已。
user-0 提问: freopen函数

回复:
user: user-1
content: 引用 2 楼 u013599298 的回复:那个n x 不都是在data.in文件里面的吗 如是这样,麻烦你把你的data.in文本里的数据全贴上来

user: user-0
content: 请问下怎么才能读文件呢，我在文件里应该怎么写呢

user: user-2
content: 引用 4 楼 u013599298 的回复:请问下怎么才能读文件呢，我在文件里应该怎么写呢 fread

user: user-3
content: 你的n,x,m变量值是什么？要从文件读到变量中啊，值不会自己从文件中跑到变量中。而你的程序只打开了文件，却没有读里面的值到变量。

user: user-0
content: 那个n x 不都是在data.in文件里面的吗

user: user-1
content: 冒昧请教句 你的n,x,m与上面的文件关联语句写在哪里?
user-0 提问: sprintf实现命令行的可变参数？

回复:
user: user-1
content: "./hello %s %s %s" A ? "-dA" : "" B ? "-dB" : "" 怎么样.

user: user-0
content: 引用 1 楼 akirya 的回复:用strcat拼字符串吧 谢谢指点，已经成功实现： #include<stdio.h> #include<string.h> int main(void) { 	bool A = true; 	bool B = false; 	bool C = true; 	char tmp[20]; 	char DCmd[100]; 	if(A) 	{ 		sprintf(tmp, "-d%s ", "A"); 		strcat(DCmd, tmp); 	} 	if(B) 	{ 		sprintf(tmp, "-d%s ", "B"); 		strcat(DCmd, tmp); 	} 	if(C) 	{ 		sprintf(tmp, "-d%s ", "C"); 		strcat(DCmd, tmp); 	} 	puts(DCmd);     return 0; }

user: user-2
content: 用strcat拼字符串吧

user: user-0
content: 引用 3 楼 mayadong7349 的回复:"./hello %s %s %s" A ? "-dA" : "" B ? "-dB" : "" 怎么样. 这个更简单一些，就差那么一点点，我怎么就没有想起来。
user-0 提问: 求助~ main()函数执行到while(1)不就停在那了吗为什么tt还改变？中断函数是自动执行的吗?

回复:
user: user-1
content: 深入理解中断机制、中断处理、硬中断、中断服务程序、……

user: user-2
content: 新概念51单片机C语言教程:入门、提高、开发、拓展全攻略

user: user-0
content: 引用 4 楼 jha334201553 的回复:TH0=(65536-50000)/256; TL0=(65536-50000)%256; 不管是中断函数还是前面的都设置了时间啊，只要你MCU晶振次数达到上面这个数以后，自动会跳去执行你设置的那个中断函数啊。 这些不是书里面写的应该很清楚的呀 恩恩，非常感谢，我还没有书，目前是自学单片机阶段，一直在看买单片机时送的视频。请问你说的书，是指哪本书？抽空我买来看看。

user: user-2
content: TH0=(65536-50000)/256; TL0=(65536-50000)%256; 不管是中断函数还是前面的都设置了时间啊，只要你MCU晶振次数达到上面这个数以后，自动会跳去执行你设置的那个中断函数啊。 这些不是书里面写的应该很清楚的呀

user: user-0
content: 引用 2 楼 jha334201553 的回复: 前面不是设置定时器中断了么。。。 TMOD = 0x01; 只执行了一次TMOD=0x01 之后tt 就不停+1吗？

user: user-2
content: 前面不是设置定时器中断了么。。。 TMOD = 0x01;

user: user-3
content: 中断处理函数是由硬件触发而调用的
user-0 提问: 结构体的typedef问题

回复:
user: user-0
content: duoxie

user: user-1
content: 第二个不是变量名。。。没有分配空间

user: user-2
content: 两个都是类型

user: user-0
content: 引用 3 楼 KenZhang1031 的回复:第一个是结构类型名，第二个不是定义的变量名，是typedef定义的结构类型名（即第一个）的别名。相当于:  struct 第一个结构类型名 {  ..... };  typedef 第一个结构类型名 别名；  合在一起使用就是 typedef struct 第一个结构类型名 {  ..... }别名;  此时别名就表示了"struct 第一个结构类型名",如果要定义结构的变量，有两种定义方法： struct 第一个结构类型名 变量名; 别名 变量名;  那再问一下 “结构类型名” 和 “别名” 可以是一样的？？

user: user-0
content: 引用 3 楼 KenZhang1031 的回复:第一个是结构类型名，第二个不是定义的变量名，是typedef定义的结构类型名（即第一个）的别名。相当于:  struct 第一个结构类型名 {  ..... };  typedef 第一个结构类型名 别名；  合在一起使用就是 typedef struct 第一个结构类型名 {  ..... }别名;  此时别名就表示了"struct 第一个结构类型名",如果要定义结构的变量，有两种定义方法： struct 第一个结构类型名 变量名; 别名 变量名; 多谢高人！！！

user: user-3
content: 一样是可以，不过你编程最好不要一样，因为没有意义。通常只需写别名，比如： typedef struct { ..... }tAnyName;   // 定义结构体  tAnyName var_name;  // 定义结构变量

user: user-4
content: 引用 3 楼 KenZhang1031 的回复:第一个是结构类型名，第二个不是定义的变量名，是typedef定义的结构类型名（即第一个）的别名。相当于:  struct 第一个结构类型名 {  ..... };  typedef 第一个结构类型名 别名；  合在一起使用就是 typedef struct 第一个结构类型名 {  ..... }别名;  此时别名就表示了"struct 第一个结构类型名",如果要定义结构的变量，有两种定义方法： struct 第一个结构类型名 变量名; 别名 变量名; 楼上正解

user: user-3
content: 第一个是结构类型名，第二个不是定义的变量名，是typedef定义的结构类型名（即第一个）的别名。相当于:  struct 第一个结构类型名 {  ..... };  typedef 第一个结构类型名 别名；  合在一起使用就是 typedef struct 第一个结构类型名 {  ..... }别名;  此时别名就表示了"struct 第一个结构类型名",如果要定义结构的变量，有两种定义方法： struct 第一个结构类型名 变量名; 别名 变量名;

user: user-5
content: 可以一样的，不过最好不一样，便于区分类型和名称。

user: user-6
content: typedef  struct hw_module hwMod;  hw_module hwMod;
user-0 提问: 小妹求教，急！！C语言中，如何使用MAPISendMail 发送html格式的邮件？

回复:
user: user-0
content: 有Outlook Object Model 的例子么，能给个不

user: user-1
content: http://support.microsoft.com/kb/268440/en-US 微软说的很清楚，MAPI没有暴露足够的接口支持HTML邮件。 建议你使用Outlook Object Model
user-0 提问: c符号问题

回复:
user: user-0
content: 书上介绍的大概是1978年左右的UNIX代码，你说的好像有道理，不过能够确认一下吗？

user: user-1
content: 那是很古老的代码了吧. c语言早期 a = a + b可以写成 a =+ b, 不过后来标准化都改成a += b了.
user-0 提问: typedef 的一 个问题

回复:
user: user-0
content: 原帖在这里  http://www.cnblogs.com/lifuqing/archive/2011/08/20/List.html   原作者用的是VS2010

user: user-0
content: typedef struct Node{    /* 定义单链表结点类型 */     elemType element;     struct Node *next; }Node;  改成这样也可以的编译过去   纳闷的是，原作者的是怎么过去的呢？ 我也是直接复制原作者的代码的...   原作者，应该是从工程复制代码，完成文章，不应该写文章时再手写一遍吧

user: user-1
content: 看错了。当然编译不过去。  C必须先声明后使用。你不声明Node，是没有办法在定义Node的过程中使用Node的。

user: user-1
content: typedef struct{    /* 定义单链表结点类型 */     elemType element;     Node *next; }Node;

user: user-2
content: 引用 4 楼 wanyeye 的回复:原帖在这里  http://www.cnblogs.com/lifuqing/archive/2011/08/20/List.html   原作者用的是VS2010c++的结构体类型可以不加struct，c的不行  用vs一般都是c++模式编译的吧

user: user-0
content: 引用 5 楼 user-22 的回复:[quote=引用 4 楼 wanyeye 的回复:] 原帖在这里  http://www.cnblogs.com/lifuqing/archive/2011/08/20/List.html   原作者用的是VS2010c++的结构体类型可以不加struct，c的不行  用vs一般都是c++模式编译的吧[/quote]  作者开头就写“最近在复习数据结构，想把数据结构里面涉及的都自己实现一下，完全是用C语言实现的。”  因为我用VS2010时，建立空项目，添加到是.C文件，，默认是CPP的 估计问题就处在这里，原作者不是纯C写的  谢谢
user-0 提问: 一段很简单的代码为什么会报异常？高手进来！

回复:
user: user-1
content: 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。

user: user-2
content: 是的char []与char*不完全相同

user: user-3
content: 只知道是参数传递的时候，出了情况，但是到底是什么问题，坐等高手指点

user: user-4
content: int fun(char** pstr)///我很好奇你为什么要定义成指向char指针的指针参数,你在这里传一个地址进来就可以了 {     return strcmp(*pstr,"abcd"); } int main(void) {     char p[100] = {'a','b','c','d','e','\0'};     int n = 0;     n = fun(&p);///这里如其它人所说,本来你的数组p就能代表内存中的地址了,正因你上面那样处理,你这里反而搞得更复杂了,&p是把存放p地址的单元内存地址当参数传进函数,而你在函数内部再用*pstr,此时正相当于*p,也就是abcde,你把abcde当作地址     printf("%d\n",n);     return 0; }  ========= 小白扯几句,欢迎吐糟.

user: user-5
content: #include <stdio.h> #include <string.h> int fun(char** pstr) {     printf("%p\n", *pstr); //看看这个输出你就会明白的,呵呵     return strcmp(*pstr,"abcd"); } int main(void) {     char p[100] = {'a','b','c','d','e','\0'};     int n = 0;     n = fun(&p);     printf("%d\n",n);     return 0; }

user: user-6
content: 编译不过去...  #include <stdio.h> #include <string.h> int fun(char* pstr) { 	return strcmp(pstr,"abcd"); } int main(void) { 	char p[100] = {'a','b','c','d','e','\0'}; 	int n = 0; 	n = fun(p); 	printf("%d\n",n); 	return 0; }

user: user-7
content: &p是数组的指针，p的值是数组首元素的地址，虽然值一样意义不同。 typedef char(*newp)[100]; int fun(newp pstr) { 	return strcmp(*pstr,"abcd"); }

user: user-8
content: 对char p[100]， &p = p, 所以你不能把它传给char **

user: user-5
content: 引用 4 楼 Mr_warm 的回复:[quote=引用 3 楼 mujiok2003 的回复:] #include <stdio.h> #include <string.h> int fun(char** pstr) {     printf("%p\n", *pstr); //看看这个输出你就会明白的,呵呵     return strcmp(*pstr,"abcd"); } int main(void) {     char p[100] = {'a','b','c','d','e','\0'};     int n = 0;     n = fun(&p);     printf("%d\n",n);     return 0; } 不明白啊，请大神明示！[/quote]   printf("%p\n", *pstr); //输出0x64636261, 0x64 == 'd', 0x63 = 'c', 0x62 = 'b', 0x61 = 'a' //所以*pstr是野指针

user: user-9
content: #include <stdio.h> #include <string.h> int fun(char (*pstr)[100]) { 	return strcmp(*pstr,"abcd"); } int main(void) { 	char p[100] = {'a','b','c','d','e','\0'}; 	int n = 0; 	n = fun(&p); 	printf("%d\n",n); 	return 0; }  /*将char **pstr改成char (*pstr)[100]就好，pstr是指向有100个char型数据的数组的指针*/

user: user-0
content: 引用 3 楼 mujiok2003 的回复:#include <stdio.h> #include <string.h> int fun(char** pstr) {     printf("%p\n", *pstr); //看看这个输出你就会明白的,呵呵     return strcmp(*pstr,"abcd"); } int main(void) {     char p[100] = {'a','b','c','d','e','\0'};     int n = 0;     n = fun(&p);     printf("%d\n",n);     return 0; } 不明白啊，请大神明示！
user-0 提问: 数组指针的返回值使用

回复:
user: user-1
content: 你这个array变量是func的局部变量，所以这部分的内存空间是分派在栈上的。 当你函数执行完之后，你返回的是栈的地址，但实际上，栈上的数据已经被pop出来了。 所以，理论上你访问的是一个野指针。  如果要修正这个问题，你需要把array分派在堆上。 比如用malloc，但前提是，你必须在使用完返回的指针之后，free掉这部分空间 不然，就内存泄漏了。

user: user-2
content: 顶楼上，func结束后，array的声明周期就结束了，很容易被其他数据覆盖 不用忽视编译时的警告

user: user-3
content: 返回的是局部变量的地址，没意义
user-0 提问: ACM 题 求解题思路

回复:
user: user-1
content: 如果a,b可以为0或负数，上面还应该进一步调整 [code=c] int special_multi(int a, int b) {       if(a==1 && b==1)           return 1; // 规则1       if(a>1)           return special_multi(a-1,b)+1; // 规则2       if(a<1)           return special_multi(a+1,b)-1; // 规则2之等价变形       if(b>1)           return special_multi(a,b-1)-2; // 规则3       if(b<1)           return special_multi(a,b+1)+2; // 规则3之等价变形 } [/code=2]   因为已经明确声明加减法为普通加减法。

user: user-1
content: 引用 楼主 u011488256 的回复:定义如一种作用在整数域上二元运算*(和普通的乘法不同),满足如下性质:  a) 1*1=1 b) (a+1)*b=a*b+1 c) a*(b+1)=a*b-2; (加法和减法都是普通意义上的运算)  现在给你a和b，请你计算a*b   如题，这个题目的运算到底是怎么会是，看半天不懂。  就是让你递归，递归，再递归  int special_multi(int a, int b) {       if(a==1 && b==1)           return 1; // 规则1       if(a>1)           return special_multi(a-1,b)+1; // 规则2       return special_multi(a,b-1)-2; // 规则3 }

user: user-2
content: 既然题目都没看懂也就别来搞什么解题思路了……你先把10*10等于多少算出来再说

user: user-3
content: 网址发一下吧。 应当有示例吧？示例的输入输出是什么？

user: user-4
content: 数学求法： 根据b)把a*b展开到1*b，即a*b=(a-1)*b+1=(a-2)*b+1+1=...=(a-(a-1))*b+(a-1)=1*b+(a-1) 再根据c)把1*b展开到1*1，即1*b=1*(b-1)-2=1*(b-2)-2-2=...=1*(b-(b-1)-2乘(b-1)=1*1-2乘(b-1)，代入上式，a*b=1*b+(a-1)=1*1-2乘(b-1)+(a-1),根据a)把1*1=1带入，得到 a*b=a-2乘(b-1) 计算机程序：可以直接用这个结果去计算，也可以按照这个推导的过程用迭代或者递归去求。

user: user-5
content: a) 1*1=1 b) (a+1)*b=a*b+1       <=>    a*b=(a-1)*b+1 c) a*(b+1)=a*b-2       <=>    a*b=a*(b-1)-2  #include<stdio.h>  int main(void) { 	int a, b, n; 	printf("Please input a, b"); 	scanf("%d,%d", &a, &b); 	n = 1 + (a - 1) - 2 * (b - 1); 	printf("%d * %d = %d", a, b, n); 	return 0; }
user-0 提问: 高手请进，获取一个字符串的最大数字子字符串

回复:
user: user-1
content: 引用 6 楼 Mr_warm 的回复:[quote=引用 5 楼 zjq9931 的回复:] [quote=引用 4 楼 Mr_warm 的回复:] [quote=引用 2 楼 zjq9931 的回复:] 第66行的：     free(tempStr); 注释掉就好了。 具体原因还要查一下，应当是越界访问造成的。 注释掉可以，但是内存不就泄露了吗？我就是搞不懂是真么原因使得free的时候会报错！[/quote] 那就改这里一下：     tempStr = (char*)malloc(length + 2);     memset(tempStr,0,sizeof(length + 2));  具体那里访问越界了，可以慢慢跟。[/quote] 写习惯了，错了！memset的第三个参数不应该加sizeof！[/quote] 汗，这里越界。。。 我也才发现。。。

user: user-0
content: 引用 5 楼 zjq9931 的回复:[quote=引用 4 楼 Mr_warm 的回复:] [quote=引用 2 楼 zjq9931 的回复:] 第66行的：     free(tempStr); 注释掉就好了。 具体原因还要查一下，应当是越界访问造成的。 注释掉可以，但是内存不就泄露了吗？我就是搞不懂是真么原因使得free的时候会报错！[/quote] 那就改这里一下：     tempStr = (char*)malloc(length + 2);     memset(tempStr,0,sizeof(length + 2));  具体那里访问越界了，可以慢慢跟。[/quote] 写习惯了，错了！memset的第三个参数不应该加sizeof！

user: user-1
content: 引用 4 楼 Mr_warm 的回复:[quote=引用 2 楼 zjq9931 的回复:] 第66行的：     free(tempStr); 注释掉就好了。 具体原因还要查一下，应当是越界访问造成的。 注释掉可以，但是内存不就泄露了吗？我就是搞不懂是真么原因使得free的时候会报错！[/quote] 那就改这里一下：     tempStr = (char*)malloc(length + 2);     memset(tempStr,0,sizeof(length + 2));  具体那里访问越界了，可以慢慢跟。

user: user-0
content: 引用 2 楼 zjq9931 的回复:第66行的：     free(tempStr); 注释掉就好了。 具体原因还要查一下，应当是越界访问造成的。 注释掉可以，但是内存不就泄露了吗？我就是搞不懂是真么原因使得free的时候会报错！

user: user-0
content: 引用 1 楼 truelance 的回复:你有单步跟踪过么? 单步跟踪过了，在free(tempStr); 出错！

user: user-1
content: 第66行的：     free(tempStr); 注释掉就好了。 具体原因还要查一下，应当是越界访问造成的。

user: user-2
content: 你有单步跟踪过么?
user-0 提问: 关于字符串的两个问题

回复:
user: user-0
content: 啊，谢谢两位！

user: user-1
content: 1、搞清楚strlen(str)和sizeof(str)的区别，后者已包含了结尾的0。 2、s1此时是常量字符串首地址，常量字符串既然是常量，当然不能被修改。

user: user-2
content: lz问的是字符数组还是字符指针？ 1.把sizeof的结果输出一下就明白了，结果包括最后的\0         char s1[]="abcdef"; 	printf("%d\n",sizeof(s1));//输出为7 2.s是字符指针时不允许这么修改，因为指向的是字符常量   如果s是数组可以，应该是其他问题
user-0 提问: 关于水仙花数的问题

回复:
user: user-1
content: n是a,b,c三个数的立方和

user: user-2
content: #include <stdio.h>   int main(void) {     int a, b, c;     int s;     int n;     for (a = 1; a < 10; a++)     {         for (b = 0; b < 10; b++)         {             for (c = 0; c < 10; c++)             {                 s = a*100 + b*10 + c;                 n = a*a*a + b*b*b + c*c*c;                 if(n==s)                         printf("%4d\n", n);             }         }     }  	return 0; }   引用 3 楼 u013599298 的回复:才发现我的计算公式写错了，应该是a*a*a+b*b*b+c*c*c，谢谢了 lz,其实这个问题可以搜到的，另外lz注意，这里应该用不到#include <stdlib.h>吧，代码最后最好加一个return 0; ，毕竟前面是int main（），还有就是可以把最后的%d变成%4d,这也比%d   ；稍微好看一些吧（个人意见）

user: user-0
content: 才发现我的计算公式写错了，应该是a*a*a+b*b*b+c*c*c，谢谢了

user: user-3
content: 水仙花数是立方和吧。 如果是平方和的话，999的话，也才9*9*3 = 243，找不到匹配的，也不奇怪。

user: user-4
content: 水仙花数是什么来？都忘了。 不过光看程序没啥问题，你可以把a，b，c的值的范围加大点，比如都到100，应该会有结果的。 1-10的范围太小，估计在这之间没有满足条件的数。
user-0 提问: 链表，初始化，

回复:
user: user-1
content: 链表的头指针是一个指针，而想通过传递参数改变指针的值，需要传入该指针的地址（即指针的指针），根据指针的指针的指向来改变指针的值

user: user-2
content: lz都这么多花了怎么还问这个问题

user: user-3
content: void fun(int a) { a = 0;} //这样无法改变传入参数的值，因为做了copy，参数只是一个临时变量  需要改成 void fun(int* pa) { *pa = 0;} 或 void fun(int& a) { a = 0; }

user: user-4
content: 因为它想修改指针指向的地址
user-0 提问: C语言中编译运行C代码

回复:
user: user-1
content: 编译执行只有在一次编译反复执行的情况下才在时间上具有优势。 除非你的表达式，同一个表达式需要反复计算结果，否则还是解析表达式运行(也就是解释运行)更合适。

user: user-1
content: 用system()调用编译器和执行exe文件

user: user-0
content: 表达式解析我知道啊- -我不是说这个... 我是说把解析的表达式作为C源码输出，然后编译运行源码来获取答案... 比如用户自定义函数f(x,y,z)=x+y+z; 我生成源代码(很多没写了...) ... scanf( "%d %d %d", &x, &y, &z ); printf( "%d\n", x + y + z ); ... 然后编译这份源代码为EXE文件，这样我只需要运行这份EXE文件来求值表达式了... 我想知道的是这个编译过程...还有调用EXE文件的过程...

user: user-0
content: 我就是需要反复使用表达式...而且是多个表达式反复使用... 所以就是觉得直接解析太慢了...而且表达式也不会这么简单... 特别是包括自定义函数... 所以才想到这么搞- -...应该可以吧...

user: user-2
content: 这个不就是中缀表达式求值么...不过你这里只有+和-，*/()都没有，就比较简单，当然思想是差不多的，你可以去了解下。

user: user-0
content: 呃？...你说的管道是操作系统里进程通信的内个？...能不能稍微详细点？ 我只需要知道怎么编译运行一份存在的CPP代码... 是通过cmd命令么...

user: user-3
content: 引用 2 楼 l383137093 的回复:额...就说我现在要解析简单表达式吧...只有+- 输入表达式3+2-5 输出0 当然这个程序很简单的了... 但是我现在希望创建cpp文件并写入这样的代码内容... #include <stdio.h> int main() {      int ans = 3+2-5;      printf( "%d\n", ans );      return 0; } 然后通过编译运行这份代码...然后根据程序输出内容来获取表达式的答案...  管道.

user: user-0
content: 额...就说我现在要解析简单表达式吧...只有+- 输入表达式3+2-5 输出0 当然这个程序很简单的了... 但是我现在希望创建cpp文件并写入这样的代码内容... #include <stdio.h> int main() {      int ans = 3+2-5;      printf( "%d\n", ans );      return 0; } 然后通过编译运行这份代码...然后根据程序输出内容来获取表达式的答案...

user: user-4
content: 说实话 没看懂 给个例子好吧
user-0 提问: C语言视频教程

回复:
user: user-1
content: 请问 学习C语言用哪个软件比较好呢 谢谢了

user: user-0
content: 根据一些大侠的建议，也看了一些相关的帖子，现已对上述视频课程的顺序做了调整，已经反映在视频的序号中了。  调整后的大纲大致为： 一、C语言概述：硬件，计算机的功能，语言的进化，机器语言-->汇编语言-->高级语言等等 二、DOS知识简介 三、汇编语言简介 四、C语言     1. 二进制、十进制、十六进制、八进制     2. 数据类型与内存     3. 变量     4. 常量     5. 运算符与表达式     6. 控制语句     7. 函数入门     8. 数组与C风格字符串     ......     函数详解     结构体、联合、简单的链表     文件操作     数据结构与算法     ......  上面这种讲课的顺序，应该更加接近于我们的实际，学习起来比较顺利和合理。

user: user-0
content: 引用 3 楼 wanren13 的回复:谢谢楼主，虽然接触C有段时间了，但真正基础的东西却有很多还不是很清楚  那就建议你从视频的第一课开始看起，认真听，多动手，一定有进步的。动手时间:听课时间 这个比值越大越好，别人讲的再好，不如自己动手一遍。你花这个时间是值得的，学好C语言，可以管你一辈子衣食无忧，这么好的东东，为啥不好好学？对吧？！

user: user-0
content: 引用 2 楼 tlys123 的回复:请问 学习C语言用哪个软件比较好呢 谢谢了  可以选择VC6.0，也可以选择VS2008, VS2010等等。如果你是刚开始学习C语言，个人建议还是选择VC6.0，相对比较简单，容易上手。之后切换到VS2008等也比较容易。  上述视频中，我没有讲如何选用开发工具和如何安装这些工具，但视频中默认的环境是XP + VC6.0 + MSDN。这些比较简单，你可以到网上找相关资料来看。如果要求的人多，我可以补录。

user: user-2
content: 谢谢楼主，虽然接触C有段时间了，但真正基础的东西却有很多还不是很清楚

user: user-3
content: 留名 晚上再看
user-0 提问: 问题-关于利用堆栈判断括号匹配

回复:
user: user-0
content: 引用 1 楼 thefirstz 的回复:从栈顶弹出来的元素放在e1里了。 谢谢，我用了debug，但是如果没有这句话，估计还要想好久。茅塞顿开！  ------------------------------------------------------------------------------------ 引用 4 楼 derekrose 的回复:[quote=引用 3 楼 u011410413 的回复:] hehe,这个点没法用debug. 好，我回家倒腾一下。弄懂了回来结贴。 顺便想问一下，我这个水平应该不会被加分的。如何增加自己的论坛分数啊？怕以后发不了贴。  论坛分数还是可用分？ 论坛分数我帮不了你 可用分你缺的时候叫我 我给你[/quote] 是论坛可用分吧，呵呵，我还是希望将来能少问一些愚蠢的问题。

user: user-1
content: 引用 3 楼 u011410413 的回复:hehe,这个点没法用debug. 好，我回家倒腾一下。弄懂了回来结贴。 顺便想问一下，我这个水平应该不会被加分的。如何增加自己的论坛分数啊？怕以后发不了贴。  论坛分数还是可用分？ 论坛分数我帮不了你 可用分你缺的时候叫我 我给你

user: user-0
content: hehe,这个点没法用debug. 好，我回家倒腾一下。弄懂了回来结贴。 顺便想问一下，我这个水平应该不会被加分的。如何增加自己的论坛分数啊？怕以后发不了贴。

user: user-1
content: 建议调试的过程中查看e1内容是什么，pop的动作发生了什么，然后上下文联系一下，不难理解

user: user-2
content: 从栈顶弹出来的元素放在e1里了。
user-0 提问: 声明一个 ：参数是指针数组返回int指针的函数指针，我这么写对不？

回复:
user: user-1

user: user-2
content: 引用 5 楼 xwhbwas2008 的回复:[quote=引用 1 楼 user-6 的回复:]  应该都可以吧 引用 2 楼 wang0635 的回复:对啊 如果不放心，写个形参名字：int*(*p)(int *a[N]);  去掉里面的N  是不是更合适一些？[/quote]是的，另外N的位置随便写个数都行，也没多大用

user: user-3
content: int* (*func)(int *p[]);

user: user-0
content: 看来大家还没过完年就迫不及待来csdn了，龙马精神啊，让你们老板给加薪水啊

user: user-0
content: 引用 1 楼 user-6 的回复: 应该都可以吧 引用 2 楼 wang0635 的回复:对啊 如果不放心，写个形参名字：int*(*p)(int *a[N]);  去掉里面的N  是不是更合适一些？

user: user-4
content: 函数声明，形参可以省略

user: user-5
content: int* ff(int *sz[]) { 	return NULL; }  typedef int* (*PTR)(int *[]); PTR p1; p1 = ff;  int* (*p2)(int *[]); p2 = ff;  上述p1和p2均符合要求.

user: user-2
content: 对啊 如果不放心，写个形参名字：int*(*p)(int *a[N]);

user: user-6
content: 应该都可以吧