Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: C语言 函数返回指向数组的指针问题

回复:
user: user-1
content: 不能返回局部变量的地址！  你这样输出会错乱，可以把数组变为3，验证一下，输出不是想要的结果。所以你的理解是正确的，输出1,2结果，属于巧合。 要想返回回局部变量的地址，必须定义为static类型，就像#4楼的代码

user: user-2
content: 引用 4 楼 zhao4zhong1 的回复:栈中的基本变量退出其作用域时，没有谁执行一段代码去释放/销毁/析构它所占用的内存，仅仅是没人再去理会的留在当前栈顶上方的若干遗留下来可被后续压栈操作覆盖的无用数据而已。  其实电脑开机后物理内存的每个字节都是可读写的，从来不会因为所谓的new、delete或malloc、free而被创建、销毁。区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页，一页通常为4KB。  #include <stdio.h>   int *fun(void) {     static int array[2] = {1,2};     return array; }   int main(int argc, char *argv[]) {     int *ptr = fun(); }

user: user-3
content: 局部变量地址，这个位置， 随时会被其他代码覆盖 例如，简单的调用 printf();这个函数， 企图输出数值 1，2都也可能输出不了 这样个函数，他的返回值， 就是几乎无用的， 数组里储存的数据，也是无法应用的。 所以，这种返回局部变量地址的做法，是要不得的。

user: user-4
content: array是一个局部变量，fun函数执行完后，它的生命期就结束了，但它的空间还没被其他部分占用，所以还能输出1和2，一旦空间被用了值就被改写，ptr指向的位置是不安全的

user: user-0
content: 那如果这样写 主函数每次都会得到fun函数里赋的值 还是依照具体情况 像2楼一样 得到不一样的值

user: user-5
content: 函数结束并不意味着清零，如果是清零的话，那么这个开销是很大的，所以计算机系统是采用了栈来实现函数，ebp,esp分别指向栈顶栈底，函数中的数据都保存在栈，函数结束其实只是执行esp=ebp,ebp=ebp的旧值，并将返回地址赋给eip

user: user-6
content: 栈中的基本变量退出其作用域时，没有谁执行一段代码去释放/销毁/析构它所占用的内存，仅仅是没人再去理会的留在当前栈顶上方的若干遗留下来可被后续压栈操作覆盖的无用数据而已。 而栈中的类变量退出其作用域时，会自动执行其析构函数，……  其实电脑开机后物理内存的每个字节都是可读写的，从来不会因为所谓的new、delete或malloc、free而被创建、销毁。区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页，一页通常为4KB。  #include <stdio.h>   int *fun(void) {     static int array[2] = {1,2};     return array; }   int main(int argc, char *argv[]) {     int *ptr = fun(); }

user: user-5
content: 这个要对计算机系统有一定了解才能明白。都知道在函数中定义的变量是局部变量，就像你在第一个函数定义的数组，你可能认为在函数体外就无法访问这个变量了，但事实并不是这样的，你只是不能直接通过这个变量的名字来访问它（这是编译链接时符号解析导致的结果，具体你可以查看资料），局部变量是分配在栈中的，你依旧可以通过局部变量的地址（指针）在外部来访问他，就像第一个函数返回局部变量指针，然后通过地址来输出其数值依旧是1，2

user: user-7
content: #include <stdio.h>   int *fun(void) {     int array[2] = {1,2};     return array; }   int main(int argc, char *argv[]) {     int *ptr = fun(); 	printf("ptr[0] = %d\n", ptr[0]); 	printf("ptr[1] = %d\n", ptr[1]); }  结果  liyi@liyi:/disk/program/liyi/workspace/test/c$ ./a.out  ptr[0] = 1 ptr[1] = 32568

user: user-0
content: 求解答求解答
user-0 提问: vs2003找不到include头文件

回复:
user: user-1
content: 看样子是win7的操作系统，C盘空间不够的话，难道不知道有一个叫mklink的命令吗？

user: user-0
content: oK了，只要把这3个文件夹路径设置上去就行了，谢谢！

user: user-2
content: Include Directories后面添加";你实际头文件所在文件夹"

user: user-0

user: user-0
content: 大神，怎么改啊，以前是做.net的，刚准备学c，被这个搞晕了

user: user-2
content: 项目、属性、C/C++、附加包含目录：填写附加头文件所在目录 分号间隔多项

user: user-3
content: 包含路径没有设对吧,  在baidu上搜.

user: user-0
content: 建win32和MFC都是这种情况，所有包含的include文件都找不到，是不是我安装到e盘的缘故？c盘中有vs2008的程序

user: user-4
content: 你这个是什么工程啊。你建个win32应用程序或者mfc的试试？
user-0 提问: 问个头文件包含的问题

回复:
user: user-1
content: 后者比较好可以的呀，不过还是要分类，根据不同的系统进行条件包含 C的标准头文件是相同的，但是不同的版本也有差异，比如C89和C99就不同 操作系统之间也存在差异，比如Linux和Windows的头文件就不同

user: user-2
content: 后者，用到什么就包什么，都包了程序体积会大点，不过对于现在的计算机来说基本可以忽略

user: user-3
content: 当然是后者，  你看看哪个系统sdk的头只提供一个。

user: user-4
content: 猕猴桃雕的小熊/小猪彻底将我萌翻了！

user: user-5
content: 习惯，偏好！

user: user-6
content: 楼主见过所有的头文件都放到里面的all.h文件么？？？咱们平时的习惯肯定是用哪个包含哪个……  引用 1 楼 zhao4zhong1 的回复:在重建所有一次不超过十分钟之前，纠结这些问题属于浪费生命。我觉得。  请牢记：源代码本身的书写是否结构化或面向对象或符合设计模式或敏捷…并不重要，重要的是你是否使用结构化或面向对象或符合设计模式或敏捷…的方法命名标识符、阅读、修改、检查、测试源代码。 赵四老师的话需要慢慢体会呀

user: user-7
content: 引用 4 楼 wangjun403 的回复:[quote=引用 楼主 wangjun403 的回复:] 有两种办法 一. 搞个all.h文件, 把所有的头文件都放到里面, 以后c文件里只include这个就可以了  二. c文件用到那个头文件才去include那个   那种好点?  我觉得这是习惯 我想养成好的习惯[/quote] 那就后者。 前者的话，你可以考虑预编译头文件。

user: user-0
content: 引用 楼主 wangjun403 的回复:有两种办法 一. 搞个all.h文件, 把所有的头文件都放到里面, 以后c文件里只include这个就可以了  二. c文件用到那个头文件才去include那个   那种好点?  我觉得这是习惯 我想养成好的习惯

user: user-8
content: 纠结这些问题 真不想回答，纯粹每天回个帖，dont care me

user: user-9
content: c文件用到那个头文件才去include那个，但是全局变量应该在all.h里面，需要的时候在头文件.h包含就好了，这样头文件.c也就只用包含一个头文件.h文件，我是这么用的

user: user-4
content: 在重建所有一次不超过十分钟之前，纠结这些问题属于浪费生命。我觉得。  请牢记：源代码本身的书写是否结构化或面向对象或符合设计模式或敏捷…并不重要，重要的是你是否使用结构化或面向对象或符合设计模式或敏捷…的方法命名标识符、阅读、修改、检查、测试源代码。
user-0 提问: 大神来看看，求解决，这程序输入一句英文句子后没有输出，为什么？

回复:
user: user-1
content: 没有输出的原因 上面几楼都指出来了 while(c!='\0')num++;这一句为什么会死循环？ 那是因为while((c=s[i])==' ')先执行，c=s[i]，也就是c=s[0];  另外逻辑不够严谨，计算单词数会有误 [code=c]#include <stdio.h> #include <string.h> void main() { 	char s[100]; 	memset(s,0,100); 	int i=0,num=0; 	printf("请输入字符串:"); 	gets(s); 	while(s[num] != '\0') 	{ 		num ++;//统计字符个数 	} 	for (int j = 0;j < num - 1;j ++) 	{ 		if (s[j] == ' ' && s[j + 1] != ' ')//连续空格只计算一个 			i ++;//统计空格个数 	} 	if (s[0] == ' ')//排除首字符空格 		i --; 	if (s[num] == ' ')//排除末字符空格 		i --; 	num = i + 1;//单词数为空格数+1 	printf("总单词数是:%d\n",num); } /code]

user: user-2
content: 代码死在了：while(c!='\0')num++; 你是想这样吧：while((c=s[i])!=' '&&c!='\0') {i++;num++;}

user: user-3
content: 你这代码已经写成死循环了，所以后面那句打印代码根本就没有执行

user: user-4
content: 看不懂你的需求,给你改了改,你自己根据需求做一下变化.  do { c = s[i]; if (c != ' ')      num++; i++; } while(c != '\0'); printf("总单词数是:%d\n",num);}
user-0 提问: 自己编的一个程序，根据条件判断出是1或者0的状态之后，如何判断出状态是1的数量进行返回

回复:
user: user-0
content: 我是这样写的：  unsigned int func(void) {   uint16_t Num=0;   unsigned i;   unsigned m=2;    for(i=0;i!=16;++i )      {        _Bool b = I2C_Read(i*2 + 0xE0 , 0) !=0xFF;//这里判断符合条件的情况，符合条件是1，不符合是0.       Num|= b<<i;           if(b==1)           {              m++;            }         }     return m; }

user: user-0
content: 我是这样写的：  unsigned int func(void) {   uint16_t Num=0;   unsigned i;   unsigned m=2;    for(i=0;i!=16;++i )      {        _Bool b = I2C_Read(i*2 + 0xE0 , 0) !=0xFF;//这里判断符合条件的情况，符合条件是1，不符合是0.       Num|= b<<i;           if(b==1)           {              m++;            }         }     return m; }

user: user-0
content: 我是这样写的：  unsigned int func(void) {   uint16_t Num=0;   unsigned i;   unsigned m=2;    for(i=0;i!=16;++i )      {        _Bool b = I2C_Read(i*2 + 0xE0 , 0) !=0xFF;//这里判断符合条件的情况，符合条件是1，不符合是0.       Num|= b<<i;           if(b==1)           {              m++;            }         }     return m; }

user: user-1
content: 看         不                    懂。。

user: user-2
content: 你的想法是可以，不过很多细节处理不当，好好品味以下修改：  uint32_t func(void) {     uint16_t Num = 0;     uint8_t m = 0;     int i;        for(i = 0; i < 16; i++)     {         if(I2C_Read(i * 2 + 0xE0 , 0) != 0xFF)         {             Num |= 1 << i;             m++;         }     }                  return (m << 16) | Num; }  引用 楼主 xiaoxiaomami 的回复:我已经编好了一个程序如下：  unsigned int func(void) {   uint16_t Num=0;   unsigned i;   for(i=0;i!=16;++i )      {        _Bool b = I2C_Read(i*2 + 0xE0 , 0) !=0xFF;//这里判断符合条件的情况，符合条件是1，不符合是0.       Num|= b<<i;        然后这里怎么进行判断Num里的1的数量呢？        return Num;      } }

user: user-3
content: 程序在于设计

user: user-4
content: if(b==1) 改为if(b) 有时候真值不一定为1

user: user-5
content: 这样不就行了吗，到底要问什么。 简洁点儿试试 m += b;
user-0 提问: 大一学生，学程序结构，帮忙修改一下归并排序那里

回复:
user: user-1
content: return 在哪里？

user: user-0
content: 不乱啊，就是归并排序那儿，我有注释

user: user-2
content: 代碼太亂了啦

user: user-0
content: 归并排序那儿你给改一下，也包括主函数也改一下

user: user-0
content: 归并排序那儿你给改一下，也包括主函数也改一下

user: user-0
content: 归并排序那儿你给改一下，也包括主函数也改一下

user: user-3
content: ？？？？？？？？？？？？？看不懂

user: user-0
content: return那儿我知道了，那归并排序为什么运行不了，注释里的也是归并排序里的，帮忙修改下

user: user-4
content: 1、没有return 编译失败 2、没有对L1的length赋值，导致output没有执行

user: user-5
content: //这里添加代码  用这种方式吧。。。
user-0 提问: 同样一段代码，编译结果一个正确，一个有错......求解释

回复:
user: user-1
content: 文件后缀名。。。

user: user-1
content: 文件后缀名。。。

user: user-1
content: 文件后缀名。。。

user: user-0
content: 引用 2 楼 taodm 的回复:楼主，换个合格的老师吧，连这段代码是C语言还是C++语言都没教你们的老师只能是冥师中的冥师。 学的是C的数据结构，可是老师发的文件一直都是C++的.......我忘记老师发的是C++了..

user: user-0
content: 引用 2 楼 taodm 的回复:楼主，换个合格的老师吧，连这段代码是C语言还是C++语言都没教你们的老师只能是冥师中的冥师。 学的是C的数据结构，可是老师发的文件一直都是C++的.......我忘记老师发的是C++了..

user: user-0
content: 引用 2 楼 taodm 的回复:楼主，换个合格的老师吧，连这段代码是C语言还是C++语言都没教你们的老师只能是冥师中的冥师。 学的是C的数据结构，可是老师发的文件一直都是C++的.......我忘记老师发的是C++了..

user: user-2
content: 楼主，换个合格的老师吧，连这段代码是C语言还是C++语言都没教你们的老师只能是冥师中的冥师。

user: user-3
content: 文件扩展名不一样，导致使用了不同的编译器。
user-0 提问: 求助大神   结构体函数无法调用

回复:
user: user-1
content: 像这样的错误你看看就知道了,不要害怕一大堆u错误,当你程序写多了,语法熟悉,就很少会错误了,错误不可怕,可怕的是bugC:\Program Files (x86)\Microsoft Visual Studio\MyProjects\15\65.cpp(30) : error C2664: 'PRINT1' : cannot convert parameter 1 from 'struct Q *' to 'struct Q'

user: user-2
content: 错误太多，很多指针的非法使用 还有函数定义与实现的参数不一致 Q HIGHT(Q x[],Q *b,float n,float i) void PRINT1(struct student *a)，void PRINT1(Q);  自己边调试边改改吧，F4指向有错误的行

user: user-3
content: 1、 typedef struct Node { char name[20];long num;int score[2]; }QNode;    //别名  2、  struct QNode { char name[20];long num;int score[2]; };

user: user-4
content: 代码看一半我头晕了.......

user: user-5
content: 很多都是指针和非指针类型的问题，定义的返回值是非指针，却返回指针类型。

user: user-6
content: 仔细看出错的提示，每一个出错都已经说出了具体的原因了。认真看一下就能解决。

user: user-7
content: 你把代码用以下这种方式整理出来啊，否则看着都头晕  //这里填写代码

user: user-8
content: typedef struct Q { char name[20];long num;int score[2]; }; ===> typedef struct Q { char name[20];long num;int score[2]; } Q;
user-0 提问: C语言入门经典 例题7.14 Visual studio 2013 无法运行

回复:
user: user-0
content: 在代码第一行加#define _CRT_SECURE_NO_WARNINGS忽视这个问题，代码中仍然使用strcpy就可以了

user: user-1
content: 把char *pS[NUM_P]改为char  pS[NUM_P][80];试试看

user: user-2
content: 把ps[]定义大点

user: user-3
content: BUFFER_LEN定义的是100，超过了再往进写东西就会蹦
user-0 提问: 初学者求助！！！哪里错了！C语言模拟骰子游戏!!为啥永远都是赢……

回复:
user: user-1
content: 我在vs2010上简单改了一下程序，仅供楼主参考： 把play_game()函数中的win，lose变量设为全局变量； 把play_game()函数中的win和lose计数与return调换； 把显示输赢信息放在了main函数里，并加了一些注释提醒性的汉字；  #include <iostream> #include <time.h> using namespace std;   int roll_dice() {     int n1,n2;       srand(time(0));       n1=rand()%6+1;     n2=rand()%6+1;     printf("You rolled:%d\n",n1+n2);     return n1+n2; }  int lose=0,win=0; int play_game() {     int n,m,flag=1;      m=roll_dice();      if(m==7 || m==11)     { 		win++; 		return 1;     } 	else if(m==2 || m==3 || m==12) 	{ 		cout<<"点数之和为2、3或12则落败"<<endl; 		lose++; 		return 0;             	} 	else 		printf("Your point is %d\n",m);       while(flag)     { 		cout<<"点数之和称为“目标”，游戏将继续……"<<endl;         n=roll_dice();         if(n==7)         {             printf("游戏继续时，抛出点数7，You lose!\n");             lose++;             flag=0;         }         else if(n==m) 		{ 			printf("游戏继续时，掷出“目标”点数则获胜You win!\n");    			win++; 			flag=0; 		} 		else 		{ 			flag=0; 			printf("You roll :%d\n",n); 		}     }     return 0; }   int main() {      char ch='y';     while(ch=='y' ||ch=='Y')     {         play_game(); 		printf("Wins=%d;Loses=%d\n",win,lose);         printf("Play again?\n");          ch=getchar();         getchar();     }       return 0; }

user: user-1
content: main()函数中每次while循环，每次调用play_game()函数，win和lose变量都会重新从0开始计数，这样逻辑不对~~~

user: user-2
content: 另外你的play_game函数里很多逻辑有问题啊，return结果代表什么？没见你使用这个结果，还有都return了，下边那些什么++还有作用吗？

user: user-2
content: srand(time(0)); 只需要执行一次就行了，放在main的开始试试
user-0 提问: C语言如何定义一个宏，可以有参数或无参数的调用？

回复:
user: user-1
content: https://gcc.gnu.org/onlinedocs/cpp/

user: user-2
content: 宏就是简单的替换，它不管什么有参还是无参，如果替换过后的语法没问题就行

user: user-3
content: 引用 3 楼 sinservice 的回复: #define NOTHING #define WORK(x) if(rand()>100) return x;   当没有返回值时，就使用：  WORK(NOTHING)  这个如果不行，可能需要加一层壳。   #define _NOTHING #define NOTHING _NOTHING #define WORK(x) if(rand()>100) return x;

user: user-4
content: 用variadic macro（需要c99/c++11）  #define WORK(...) if(rand()>100) return __VA_ARGS__;

user: user-0
content: 引用 5 楼 sholber 的回复:你不都定义好了吗，就像你已经定义的那样： #define WORK(x) if(rand()>100) return x; 这是绝对可以工作的。 WORK(); WORK(1);  GCC的确可以工作，VC会报个warning：warning C4003: not enough actual parameters for macro 'WORK' C++Builder6直接error不能编译成功:E2219 Wrong number of arguments in call of macro 'WORK'

user: user-5
content: VC编译选项加/EP /P，重新编译，查看宏展开后对应的.i文件。gcc加-E

user: user-6
content: 學道真多阿謝謝各為

user: user-7
content: 你不都定义好了吗，就像你已经定义的那样： #define WORK(x) if(rand()>100) return x; 这是绝对可以工作的。 WORK(); WORK(1);

user: user-3
content: #define NOTHING #define WORK(x) if(rand()>100) return x;   当没有返回值时，就使用：  WORK(NOTHING)

user: user-3
content: #define NOTHING #define WORK(x) if(rand()>100) return x;   当没有返回值时，就使用：  WORK(NOTHING)

user: user-8
content: 函数可以给形参设默认值，不传就用默认值，返回值没见过可以时有时无的

user: user-9
content: 分两个宏不就行了吗 为什么非要弄一个或者 #define    RETURN #ifdef   RETURN        #define WORK(x) if(rand()>100) return x #else        #define   WORK(x)  if(rand()>100)  //do other thing #endif
user-0 提问: 这个程序运行输出为什么每一次不是6个英文字母的，s[7]=‘\0’不是结束标志吗？那么按理说应该是6个字母才对吧，然后遇到结束标志结束，之后的a[8]也就没了。

回复:
user: user-1
content: char s[8]:   s[0]----->s[7] c下标从0开始.

user: user-2

user: user-3
content: 0到6 ，你数一下，不是应该7个吗

user: user-4
content: s[7] = '\0'就是最后一个位置是结束符，前边有7个有效字符啊(0~6)
user-0 提问: 怎么在windows下用vc查看pci或者pcie插槽上是否有插卡呀？？

回复:
user: user-0
content: 我也看到这个了，我想知道的是，比如主机上有四个pci插槽，其中一个有插卡，我怎么判断这张卡是卡槽1，2,3,4中的哪一个，用devcon扫描到所有的pci设备，那我怎么找到我插上去的那张呢?

user: user-0
content: 能不能详细说明一下呢，菜鸟一枚，不明白呀

user: user-1
content: http://baike.baidu.com/link?url=LXGxcry-rj8ne3r5gWtw5LaDi_nWAn15QqWlVJB3WN4YwsgB3ccAEEdNGgbpgyeRb7DOTnLnaXEVZxDGvW9joq

user: user-1
content: 搜“devcon”？
user-0 提问: strcpy困惑

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

user: user-2
content: 引用 13 楼 axf1766567189 的回复:建议改用C++中的string类，既安全又方便C语言代码用不了 C++中的string类

user: user-3
content: 数组越界了，难道楼主没报错么

user: user-4
content: s2指向ichina，s1指向ilovechina 相当于你把s1复制到s2上，可s2后面储存的是s1，加上空字符，s1占11位，而s2只有7位，所以剩下的4位占到了s1中 ，也就是ina\0，显示的时候遇到空字符结束，所以输出ina，s2呢复制了s1，所以显示了开始的s1。

user: user-5
content: 建议改用C++中的string类，既安全又方便

user: user-5
content: 建议改用C++中的string类，既安全又方便

user: user-5
content: 建议改用C++中的string类，既安全又方便

user: user-6
content: 引用 6 楼 robertbo 的回复:char s2[] = "ichina"; 你可以使用 strlen看看s1和s2的长度：s1=10 s2=6。 你char s2[]这样定义的是根据后面字符串的长度为变量分配大小的，可以s1和s2都改成char s2[20] = "ichina"这样的定义;就不会有问题了。 不定义大小的话，可能输出正确，但内存溢出是一定的，s2的输出会表现出不稳定的样子。 沒錯

user: user-7
content: S2太短，ilovechina 最后两个字符写到了s1的存储空间，S1实际写入的是 na空 ina空ian空，输出时遇到空字符就停止了。

user: user-8
content: 你先用编译器单步跟踪看下

user: user-9
content: 最好使用strncpy

user: user-10
content: char s2[] = "ichina"; 你可以使用 strlen看看s1和s2的长度：s1=10 s2=6。 你char s2[]这样定义的是根据后面字符串的长度为变量分配大小的，可以s1和s2都改成char s2[20] = "ichina"这样的定义;就不会有问题了。 不定义大小的话，可能输出正确，但内存溢出是一定的，s2的输出会表现出不稳定的样子。

user: user-1
content: 计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 多用小脑和手，少用大脑、眼睛和嘴，会更快地学会编程！ 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步Debug版对应汇编一行！ 单步Debug版对应汇编千行不如单步Release版对应汇编一行！  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-11
content: 好象和puts 有关， 遇到'\0'输出换行

user: user-2
content: s2太短  strcpy的时候会越界

user: user-12
content: s1没有问题，内容就是"ichina" s2写出界了，运行完有异常

user: user-13
content: S1 S2初始化出问题，我是菜鸟，不知道为什么
user-0 提问: 求教，如何通过中序遍历把排序二叉树树形结构输出？

回复:
user: user-1
content: 我的建议啊，像这种常见的算法问题，最好直接百度，肯定都有现成代码，到这问，反而慢

user: user-2
content: 如果能够控制字符显示在指定的位置，任何序都可以的，接口如下 void print_tree(b_tree *r,int col,int line) 如果只用printf或者cout这样输出， 就用层次遍历，用个队列，一层层输出
user-0 提问: 为什么我的VC6无法运行

回复:
user: user-1
content: 应该把系统升级一下  升级成windows98就完全没问题了

user: user-2
content: 附上一个链接：http://www.itellyou.cn/可以下载到所有的Visual Studio版本。还有Windows的各种工具，非常好！

user: user-2
content: 个人使用Visual Studio 2008觉得良好，楼主可以考虑下。Visual C++ 6.0你还是在Windows XP下使用比较好吧，呵呵！

user: user-3
content: 引用 12 楼 zhao4zhong1 的回复:[quote=引用 9 楼 sholber 的回复:] 对很多人来说，离开了熟悉的IDE，天塌地陷，眼前一片慕尼黑。 对更多人来说，见到满屏上卷的make错误提示，天崩地裂，眼前下起骇客帝国雨。 [/quote]  这些人注定只是为了应付考试，借用幻の上帝的话说，根本不适合学C语言。不提他们也罢。对于他们来说，赵四老湿为他们找来了苏门答腊，点上灯，屋里一片仰光啊……

user: user-4
content: 引用 9 楼 sholber 的回复:对很多人来说，离开了熟悉的IDE，天塌地陷，眼前一片慕尼黑。 对更多人来说，见到满屏上卷的make错误提示，天崩地裂，眼前下起骇客帝国雨。

user: user-5
content: win7 不兼容 vc6.0.  建议使用visual studio 2012

user: user-0
content: 引用 2 楼 whizer 的回复:重装, 如果不行,升级VC. 学习C语言,还是建议装一个linux虚拟机,用gcc. 引用 2 楼 whizer 的回复:重装, 如果不行,升级VC. 学习C语言,还是建议装一个linux虚拟机,用gcc. 额。想请问一下GCC省么东西，我不太懂

user: user-0
content: 我是大专，又不一定要是重点高校才有前途

user: user-3
content: 对很多人来说，离开了熟悉的IDE，天塌地陷，眼前一片慕尼黑。

user: user-3
content: 学生弱弱一个，老师弱弱一窝。

user: user-3
content: 211类高校？ 用vc6的老师？ 跟这样的老师学c？ 这一连串的疑问，让我对楼主的前途感到担忧。

user: user-4
content: FileTool.exe 替换打开和添加到项目中 Visual C++ 的新功能 http://support.microsoft.com/kb/241396/zh-cn

user: user-6
content: vs2008把，6在win7下各种问题

user: user-7
content: 系统和VC6不兼容

user: user-8
content: VS吧，

user: user-9
content: 重装, 如果不行,升级VC. 学习C语言,还是建议装一个linux虚拟机,用gcc.

user: user-10
content: vc6.0卸了重装
user-0 提问: 菜鸟关于C的struct结构体一些问题

回复:
user: user-1
content: C++结构体在某些情况下是支持构造函数的。比如在编译器支持的情况下，文件类型为CPP文件，就可能支持。所以，你看到的这种情况就是构造函数支持的情况。

user: user-0
content: 引用 1 楼 user-2 的回复:C++类的构造函数  我瞬间明白了点什么 。。。。。。

user: user-2
content: C++类的构造函数
user-0 提问: 谁能用c语言帮我解决这个问题

回复:
user: user-1
content: 闲着也是闲着！ 没实际调试，不保证对，仅供参考： //如果一个整数的十六进制表示（不含前导0）中，前一半数字之和等于后一半数字之和，我们称它为公平数。 //注意，如果该数的十六进制表示中包含奇数个数字，则正中间的数字既不属于前一半，又不属于后一半。 //例如在十六进制下1+D=7+7，因此1DE77是公平数。数字E并不参与计算。 //再例如，所有单个数字的十六进制数（即0~F）均为公平数，但F0不是（不能把F0补充前导0写成0F0，进而认为它是公平数）。 //给出十六进制数 X, Y，K 和十六进制数字集合 S，求区间[X, Y]之内，有多少个公平数满足： //十六进制表达式（不包含前导0）中每个数字均在集合S中并且这16进制数对应的十进制之和为K的倍数。 //输入格式： //输入第一行为数字集S，包含0~9以及大写字母A~F。每个数字或字母最多出现一次。 //第二行包含 3 个十六进制正整数 X, Y，K。 //输出格式： //输出所有满足条件的公平数。 #include <stdio.h> #include <string.h> char S[17]; char ln[80]; char *p; int r,n,v,i,L,m,d; int X,Y,K; int check() {     sprintf(ln,"%X",v);     L=strlen(ln);     if (1==L) return 1;     n=0;     for (i=0;i<L/2;i++) {         sscanf(ln+i,"%1x",&d);         n+=d;     }     m=0;     for (i=(L+1)/2;i<L;i++) {         sscanf(ln+i,"%1x",&d);         m+=d;     }     if (n==m) return 1;     return 0; } void output() {     if (check()) {         n=strlen(S);         for (i=0;i<L;i++) {             for (m=0;m<n;m++) {                 if (ln[i]==S[m]) break;             }             if (m>=n) break;         }         if (i>=L) {             m=0;             for (i=0;i<L;i++) {                 sscanf(ln+i,"%1x",&d);                 m+=d;             }             if (0==m%K) printf("%s\n",ln);         }     } } int main() {     fgets(S,17,stdin);     if ('\n'==S[strlen(S)-1]) S[strlen(S)-1]=0;     fgets(ln,80,stdin);     p=ln;     i=0;     while (1) {         r=sscanf(p,"%x%n",&v,&n);         if (1==r) {             if (0==i) X=v;             if (1==i) Y=v;             if (2==i) K=v;             i++;             p+=n;         } else if (0==r) {             p++;         } else break;     }     if (!(X<=Y && K>0)) {         printf("X,Y,K=%X,%X,%X not X<=Y and K>0!\n",X,Y,K);         return 1;     }     for (v=X;v<=Y;v++) output();     return 0; }
user-0 提问: 关于链表判断的一点问题

回复:
user: user-0
content: 引用 2 楼 FightForProgrammer 的回复:如果这么调用函数 ListInsert(NULL, 0, 1); while(p&&j<i)就不会执行，直接到if(!p||j>i)。这时候p=NULL，就需要判断j和i的值了  目的是为了程序健壮性考虑判断条件不就是p=NULL的时候执行If语句那不管执行不执行只要p=NULL不就会执行NULL吗那么程序不久会推出循环

user: user-1
content: int ListInsert(List L,int i,int* e) {     int j=1 ;     while(p&&j<i)     {         p=p->next ;         j++;     }     if(!p||j>i)//判断是否找到指定位置的元素     	return ERROR ;//如果已经指向到链表结尾     					//或者i值<0     else      	return *e=p->date ;//否则返回指定的数值 }我猜的。。。

user: user-2
content: 如果这么调用函数 ListInsert(NULL, 0, 1); while(p&&j<i)就不会执行，直接到if(!p||j>i)。这时候p=NULL，就需要判断j和i的值了  目的是为了程序健壮性考虑

user: user-3
content: 我猜测你这个代码中i应该传的是链表长度

user: user-4
content: if(!p || j>i)   其实j>i 判断是多余的 ，因为在 跳出while循环时，有两种可能 p=NULL  or j==i 。

user: user-4
content: 引用 5 楼 user-5 的回复:正如前面所说，如果p=NULL, p=p->next 会出错  while(p&&j<i)  什么p=NULL ,这边while已经控制住了

user: user-5
content: 正如前面所说，如果p=NULL, p=p->next 会出错
user-0 提问: 本人大一菜鸟，求修改此程序，求子串在主串中出现的次数那儿出问题了，运行一直是0

回复:
user: user-1
content: 仅供参考 // 返回子串subStr在原串src中找到的第一个匹配的子串的首字符指针 const char * FindSubStr(const char *src,const char *subStr) { 	const char *pSrc = src; 	const char *psubStr = subStr; 	const char *pFind = NULL; 	while (*pSrc && *psubStr) 	{ 		if (*pSrc == *psubStr) 		{ 			if (!pFind) 			{ 				pFind = pSrc; 			} 			pSrc++; 			psubStr++; 		} 		else 		{ 			if (pFind) 			{ 				pSrc = pFind + 1; 				pFind = NULL; 			} 			else 				pSrc++; 			psubStr = subStr; 		} 	} 	if (pSrc >= pFind+strlen(subStr)) 	{ 		return pFind; 	} 	return NULL; }  // 计算子串subStr在原串src中出现的次数 int CountSubNum(const char *src ,const char*subStr) { 	if (NULL == src || NULL == subStr || strlen(src) < strlen(subStr)) 	{ 		return 0; 	}  	int iCount = 0; 	size_t nSubLen = strlen(subStr); 	const char *p = FindSubStr(src,subStr); 	while (p) 	{ 		iCount++; 		p = FindSubStr(p+nSubLen,subStr); 	} 	return iCount; }  int main() { 	char *str="hello world"; 	char *subStr="llo"; 	const char *pFind = FindSubStr(str,subStr); 	printf("%d\n" ,CountSubNum(str,subStr)); 	return 0; }

user: user-2
content: 要自己学会用根据printf来调试程序，把觉得可能出错的地方的值打印出来，就能找到错在哪里了
user-0 提问: 静态编译---.lib文件

回复:
user: user-1
content: 转为字符串资源。

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

user: user-0
content: 这个方法可取吗？

user: user-0
content: LINK : fatal error LNK1104: 无法打开文件“maxflow-v3.0.lib” 前面描述的不是很清楚 赵老师，我出现的是这个错误 我把相应的maxflow-v3.0下载解压后，如第一个图，没有maxflow-v3.0.lib 我想应该需要编译生成maxflow-v3.0.lib 但是怎么编译呢？ 用Cmake但是没有Cmakefile,用不了Cmake 还有其他的编译方式吗？ “转为字符串资源”不是很明白
user-0 提问: Ansi c中是如何实现乘法的？

回复:
user: user-1
content: 有乘法指令就用乘法指令，没有就只能软件模拟，这个应该与硬件，编译器相关的。

user: user-2
content: 一般来说，计算单元都有整数乘法指令（连51系单片机都有），浮点乘法指令稍微高级点的计算单元都有。  浮点软件计算有一套开源C库，可以下载学习一下。  另外，可以用整数乘法做定点数运算，在注重性能等特殊场合，依然是正好的解决办法：     比如，2D图形运算，据我所知，有两套非常流行的2D图形引擎使用定点数技术：  cairo 和 freetype2  PS：现代x86系CPU甚至都支持三角函数指令，如 fsin 指令。

user: user-3
content: TC2.0就有浮点仿真库，用来支持没有浮点处理器的机器。 用仿真比在有FPU的机器上运行要慢上几十倍。 整数乘法基本上不需要仿真。如果要仿真的话，大概是这样的： 用4位整数乘法与32位整数加法实现32位整数乘法（小学学过的乘法竖式） 用查表法实现4位整数乘法（就象九九表一样）

user: user-4
content: 几乎每个处理器中都有乘法指令吧，浮点计算有的处理器也支持，不支持只能软件计算了（这部分ANSI C可能要实现）
user-0 提问: 求数据结构好的视频，要有敲代码的那种

回复:
user: user-1
content: 郝斌老师的数据结构自学教程，边写代码边将原理。 感觉还不错。 下载链接： 链接：http://pan.baidu.com/s/1dDgsbLn 密码：2v0w

user: user-2
content: 你是想看电视剧啊。。。自己敲啊。你要的哪是数据结构，是语法学习。 数据结构是解题思路，不是语言的学习
user-0 提问: uva  227 - Puzzle试了好多数据还是不知道哪里错了，老是WA

回复:
user: user-1
content: 引用 4 楼 user-2 的回复:楼主，你好。我也遇到了跟你一样的情况。你说的把多出的空行删掉，我不知道该如何操作？ 你可以在循环的开头输出回车     int cnt=0;     while(gets(a[1]+1)&&a[1][1]!='Z')     {         ++cnt;         if(cnt>1) printf("\n"); ------------------------------------------------------

user: user-2
content: 楼主，你好。我也遇到了跟你一样的情况。你说的把多出的空行删掉，我不知道该如何操作？

user: user-0
content: 引用 2 楼 weizhuwyzc000 的回复:我找到bug了。。。。题目要求各组数据之间输出一个空行。。。而这意味着最后一组数据后不能有空行，多输出了空行会得WA  唉。。还得靠自己啊~~

user: user-0
content: 我找到bug了。。。。题目要求各组数据之间输出一个空行。。。而这意味着最后一组数据后不能有空行，多输出了空行会得WA
user-0 提问: while (malloc(1));

回复:
user: user-1
content: 标题够吸引，回复更精彩。

user: user-2
content: 盘丝洞不要乱闯

user: user-3
content: a+1 相当于&a[1] *(a+1)相当于*(&a[1])也就是a[1] **(a+1)相当于*(a[1])，也就是a[1][0]

user: user-4
content: 引用 18 楼 sholber 的回复:mark  .学习多维数组的时候遇到这么个问题 ：  请写出下列表达式的值 int[2][3]={1,2,3,4,5,6};    a[1][1]=    ,   *(a[1]+1)=    ； **（a+1）=   ;   (*(a+1))[1]=   ； 前两个我能理解，都是指元素 5， 但是后两个不明白。 a+1是 元素4的地址， *（a+1）不是指元素4么， **（a+1）是什么意思？ 最后 应该是5吧， 不应该表示 ((a+1))[1] 么？ 对于指针不怎么明白。     希望能给详细解释一下，谢谢 楼主是在钓鱼吗？

user: user-0
content: mark  .学习多维数组的时候遇到这么个问题 ：  请写出下列表达式的值 int[2][3]={1,2,3,4,5,6};    a[1][1]=    ,   *(a[1]+1)=    ； **（a+1）=   ;   (*(a+1))[1]=   ； 前两个我能理解，都是指元素 5， 但是后两个不明白。 a+1是 元素4的地址， *（a+1）不是指元素4么， **（a+1）是什么意思？ 最后 应该是5吧， 不应该表示 ((a+1))[1] 么？ 对于指针不怎么明白。     希望能给详细解释一下，谢谢

user: user-5
content: 无聊玩死操作系统。。。。。。。。。。。。。

user: user-5
content: 无聊玩死操作系统。。。。。。。。。。。。。

user: user-6
content: 引用 10 楼 adusuccessfully 的回复:楼主是神马意思？  [quote=引用 8 楼 zhao4zhong1 的回复:] while(fork()); 赵四老师是神马意思？[/quote] 楼主想用无穷个内存碎片把操作系统整死，我想用无穷个进程把操作系统整死。

user: user-7
content: LZ, you say what

user: user-8
content: lz想问什么？

user: user-9
content: 楼主是神马意思？  引用 8 楼 zhao4zhong1 的回复:while(fork()); 赵四老师是神马意思？

user: user-10
content: 进程最多是32768

user: user-11
content: 楼主是想散分吗？接分ing~

user: user-0
content: unsigned char类型的对象，所能容纳的最大值是511，你们怎么看？

user: user-0
content: 引用 1 楼 FightForProgrammer 的回复:？？？？？？ 引用 2 楼 zhouqinghe24 的回复:这是可用分太多 要循环散完为止吗？ 引用 3 楼 q3733353520 的回复:接分 引用 4 楼 mymtom 的回复:这是啥节奏？ 内存大就是任性

user: user-12
content: 这是啥节奏？

user: user-6
content: while(fork());

user: user-13
content: 这是可用分太多 要循环散完为止吗？
user-0 提问: 矩形分割问题

回复:
user: user-0
content: 有没有大神帮解答一下

user: user-0
content: 有没有大神帮解答一下

user: user-1
content: 搜“矩形排料算法”  排料问题大牛:http://www2.stetson.edu/~efriedma/packing.html
user-0 提问: 【求助】以下是C语言基础问题，我想要比较好的解释，希望大神们帮帮忙

回复:
user: user-1
content: 我也是菜鸟 一起学习吧 scanf 规定了 %d了。 他就不会读取字母了

user: user-2
content: 去网上搜一下scanf适用。还有很多值得学习的地方

user: user-3
content: scanf("%d", &a);  只吸收一个int型的值
user-0 提问: 为什么新安装的VC6.0编译一直显示Compiling... Error spawning cl.exe

回复:
user: user-1
content: 直接安装VS201x吧，现在用VC6.0的真心比较少了。  要不装个linux改成双系统？ 再不然就装个虚拟机 + linux ?  直接用vim写，用gcc/g++编，也很简单。

user: user-2
content: 安装时，请以管理员身份运行setup.exe

user: user-3
content: 你把vc6.0放在c盘试试看~~

user: user-4
content: 引用 6 楼 zhao4zhong1 的回复:[quote=引用 5 楼 sholber 的回复:] [quote=引用 4 楼 zhao4zhong1 的回复:] 关闭UAC 以管理员身份运行 以XP兼容模式运行  毒~药太难吃了，赵老湿的意思是裹一层糖来吃。[/quote] 如今吃啥能保证里面没毒？[/quote]  啥都有，但是，纯度不同而已。你推荐的那个纯度太高了。

user: user-2
content: 引用 5 楼 sholber 的回复:[quote=引用 4 楼 zhao4zhong1 的回复:] 关闭UAC 以管理员身份运行 以XP兼容模式运行  毒~药太难吃了，赵老湿的意思是裹一层糖来吃。[/quote] 如今吃啥能保证里面没毒？

user: user-4
content: 引用 4 楼 zhao4zhong1 的回复:关闭UAC 以管理员身份运行 以XP兼容模式运行  毒~药太难吃了，赵老湿的意思是裹一层糖来吃。

user: user-2
content: 关闭UAC 以管理员身份运行 以XP兼容模式运行

user: user-0
content: 系统是win8,1的

user: user-5
content: 如果是win7,win8，启动vc6.0时以管理员运行，权限不够

user: user-6
content: 【全部编译】试试，建议还是放弃vc6吧，太老了，不少东西都不符合标准，起码装个vs2005吧
user-0 提问: 我还是没找出问题所在，求指点

回复:
user: user-1
content: 冒泡排序~ 冒个泡泡，赵四老师厉害，抢到沙发了~~  引用 1 楼 zhao4zhong1 的回复:for(i=0;i<10;i++);      {scanf("%d",&a[i]);} 去掉红色的分号。

user: user-2
content: 好眼力。。。。。

user: user-3
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-4
content: 这个程序是干啥的，怎么跟裹脚布一样长 功能是不是要和程序的长度成比例呢

user: user-5
content: 还是老赵眼尖啊。lz在for循环体后多写了个分号，结果成了空循环了

user: user-3
content: for(i=0;i<10;i++);      {scanf("%d",&a[i]);} 去掉红色的分号。
user-0 提问: 请问下VS2010中引用是错误的，该用什么代替啊

回复:
user: user-1
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-1
content: _findfirst, _findfirsti64, _wfindfirst, _wfindfirsti64 Provides information about the first instance of a filename that matches the file specified in the filespec argument.  long _findfirst( char *filespec, struct _finddata_t *fileinfo );  __int64 _findfirsti64( char *filespec, struct _finddata_t *fileinfo );  long _wfindfirst( wchar_t *filespec, struct _wfinddata_t *fileinfo );  __int64 _wfindfirsti64( wchar_t *filespec, struct _wfinddata_t *fileinfo );  Function Required Header Compatibility  _findfirst <io.h> Win 95, Win NT  _findfirsti64 <io.h> Win 95, Win NT  _wfindfirst <io.h> or <wchar.h> Win NT  _wfindfirsti64 <io.h> or <wchar.h> Win NT    For additional compatibility information, see Compatibility in the Introduction.  Libraries  LIBC.LIB Single thread static library, retail version  LIBCMT.LIB Multithread static library, retail version  MSVCRT.LIB Import library for MSVCRT.DLL, retail version    Return Value  If successful, _findfirst and _wfindfirst return a unique search handle identifying the file or group of files matching the filespec specification, which can be used in a subsequent call to _findnext or _wfindnext, respectively, or to _findclose. Otherwise, _findfirst and _wfindfirst return –1 and set errno to one of the following values:  ENOENT  File specification that could not be matched  EINVAL  Invalid filename specification  Parameters  filespec  Target file specification (may include wildcards)  fileinfo  File information buffer  Generic-Text Routine Mappings  TCHAR.H Routine  _UNICODE & _MBCS Not Defined _MBCS Defined _UNICODE Defined  _tfindfirst _findfirst _findfirst _wfindfirst  _tfindfirsti64 _findfirsti64 _findfirsti64 _wfindfirsti64    System Calls Routines |  _find, _wfind Function Overview

user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:<io.h> //_findfirst <stdlib.h> //_splitpath <direct.h>  //_chdir  请问下我在vs2010中引用了<io.h>，为什么findfirst()还是报错

user: user-1
content: <io.h> //_findfirst <stdlib.h> //_splitpath <direct.h>  //_chdir

user: user-2
content: struct date{} today;
user-0 提问: 程序看不懂什么意思 求大神讲下思路

回复:
user: user-1
content: 哦。想明白了 谢谢了。有没有好的参考书 推荐下    难道只能自己慢慢想吗 ？

user: user-2
content: d[i]+=value*nn 等价于 d[i]=d[i] + value*n ，基础

user: user-1
content: 有没有好的参考书 推荐个

user: user-0
content: 也知道这道理   但是遇到不会的地方 只能自己研究吗？

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

user: user-1
content: 为什么要这么算呢。 具体是怎么划分区域的

user: user-4
content: d[i]+=value*n;  不懂什么意思 就是int数组d的第i个元素自增value*n的大小

user: user-0
content: 求大神耐心打的讲解一下
user-0 提问: 帮忙查找一下错误

回复:
user: user-0
content: 测试输出窗格在哪打开

user: user-1
content: 函数没有错误的，已经可以运行出来了。如输入1111.txt OKKKKKKK！enter键就可以在1111.txt文件里看到 OKKKKKKK！

user: user-2
content: 没看到。。。。。。。

user: user-3
content: 我没看错有什么错

user: user-4
content: 是啊，你main函数返回值类型都没写

user: user-5
content: 错误信息怎么没贴出来的啊。 你的main函数为啥没有没有标示符吗？这个好像是函数三要素吧！

user: user-6
content: 你把错误贴出来啊？报的错贴出来
user-0 提问: 错误-function does not take 2 parameters

回复:
user: user-1
content: 整数被0除.

user: user-0
content: 这又是什么？？？！！

user: user-2
content: 函数声明错误了！  //int jsgys (); //int jsgbs ();  修改为 int jsgys (int a, int b); int jsgbs (int a, int b);  另外函数定义的时候，加上函数类型int
user-0 提问: error C2664

回复:
user: user-0
content: typedef ANNcoord* ANNpoint;

user: user-0
content: void annkSearch(	 				 	ANNpoint		q,				// query point 	int				k,				// number of near neighbors to return 	ANNidxArray		nn_idx,			// nearest neighbor array (modified) 	ANNdistArray	dd,				// dist to near neighbors (modified) 	double			eps=0.0);		// error bound

user: user-0
content: void annkSearch(					// approx k near neighbor search 		ANNpoint		q,				// query point 		int				k,				// number of near neighbors to return 		ANNidxArray		nn_idx,			// nearest neighbor array (modified) 		ANNdistArray	dd,				// dist to near neighbors (modified) 		double			eps=0.0);		// error bound

user: user-1
content: 这不叫博学多才，这叫随机应变。

user: user-2
content: 引用 4 楼 zhao4zhong1 的回复:ANNp.x=f3[0];ANNp.y=f3[1];ANNp.z=f3[2];  赵老师就是赵老师，真是博学多才！  赵老师的意思是 先定义ANNpoint 对象，然后将你的float类型数组元素赋值给ANNpoint 对象，最后将ANNpoint 对象作为参数传给函数annkFRSearch； 不知道我理解错了没

user: user-1
content: ANNp.x=f3[0];ANNp.y=f3[1];ANNp.z=f3[2];

user: user-1
content: VS IDE中，在不明白的符号ANNpoint上点鼠标右键，选转到定义。 比如看到 typedef struct _ANNpoint {float x,y,z;} ANNpoint; 那么将 float f3[3]; annkFRSearch(f3,...); 改为 float f3[3]; ANNpoint ANNp; ANNp.x=f3[0];ANNp.y=f3[0];ANNp.z=f3[0]; annkFRSearch(ANNp,...);

user: user-0
content: 那赵老师这个要怎么改呢？（我是在编译一个程序）我是一个月前接触到C++，我的指导老师要求把这个程序编译成功，并把代码搞懂

user: user-1
content: 调用成员函数annkFRSearch时，第一个参数要求类型ANNpoint，但实际给的是float[3]
user-0 提问: 帮看看这个结构这样解释对不对？

回复:
user: user-1
content: So，c就是刚刚说明过的那种类型（的别名）

user: user-1
content: 不知道你要问什么。 typedef将标识符定义为它被声明的那种类型。 如果没有typedef，标识符c具有被声明的类型； 有typedef，则标识符c被定义为它被声明的那种类型（的别名）。 typedef char *(* c[10])(int p); 介个，c是一个具有10个元素的数组，数组元素的类型是指针，指向接受int类型的参数的函数，函数的返回类型是指向char类型的指针。

user: user-2
content: 数组函数指针，觉得说是函数指针数组更容易理解
user-0 提问: ACM基础题wrong answer!求帮

回复:
user: user-0
content: …我知道了，原来是不同公司也可以啊

user: user-1
content: 90 90 90 85 90 85 90 90 90 90 85 90 90 90 90 90 90 85 90 85  这就345了
user-0 提问: 数据结构实训-图书管理系统

回复:
user: user-1
content: 随便一搜就一大堆链表的例子，作业的话可以直接找同学，肯定有会的，我们那会儿就是有一份答案，大家就都过了，最多了解下大概思路，可以说几句就行了

user: user-2
content: 去开源中国网站上面搜，可能会有你想要的……

user: user-3
content: 你这是求 开发一个系统？你想多了吧，，
user-0 提问: 输入一个小写字母 输出ASC值 并用行数 控制执行的次数

回复:
user: user-1
content: 引用 1 楼 user-2 的回复:#include<stdio.h> int main()  {     int n;     char a;     scanf("%d",&n);  fflush(stdin);     while(n--)     {       scanf("%c",&a);  fflush(stdin);       printf("%d\n",a);     } }  我的C编译器用的是EBCDIC字符集，你说咋办、

user: user-2
content: #include<stdio.h> int main()  {     int n;     char a;     scanf("%d",&n);  fflush(stdin);     while(n--)     {       scanf("%c",&a);  fflush(stdin);       printf("%d\n",a);     } }
user-0 提问: 一个if语句的判断

回复:
user: user-1
content: !=的优先级高于&，你可以加括號就不用怕優先級的問題了

user: user-0
content: 了解了，优先级感觉有点繁琐，下次还是都加个括号吧。

user: user-2
content: !=的优先级高于&，因此 NumKey&0xff != 0xff相当于 NumKey&（0xff != 0xff），也就是NumKey&0

user: user-3
content: N1570，6.5 Expressions. (3) The grouping of operators and operands is indicated by the syntax.  AND-expression:         equality-expression         AND-expression & equality-expression  equality-expression:         relational-expression         equality-expression == relational-expression         equality-expression != relational-expression

user: user-4
content: 优先级的问题
user-0 提问: c语言的小问题

回复:
user: user-1
content: #include<stdio.h> int main()  {     int n;     char a;     scanf("%d",&n);  fflush(stdin);     while(n--)     {       scanf("%c",&a);  fflush(stdin);       printf("%d\n",a);     } }

user: user-0
content: 可是不能测试 两组数据 怎么改呢

user: user-1
content: 改为 scanf("%d\n",&n);

user: user-2
content: scanf的问题 跟缓冲区有关 你要输入回车才能把数据传进去 但是回车键也一起被当做信息读进去了

user: user-3
content: 10是回车，  scanf 以回车作为 缓冲提交 的触发，  当你键入 一个字符，比如 ‘a’时， scanf函数并不返回，因为 控制台缓冲并不进行提交，而当你键入 回车 时，缓冲提交，此时，缓冲里包括一个字符a 和一个回车符。  控制台输入缓冲提交后，scanf函数返回，根据你的format “%c” 从缓冲中拿出一个字符，然后，你的printf函数显示了它，之后，程序再次运行到scanf函数，此时控制台输入缓冲里还有一个字符，就是回车符，结果，scanf函数立即返回，并取出了回车符。
user-0 提问: 看看哪里错了

回复:
user: user-1
content: int num[]={0} 楼主这么做，那就是给num数组指定长度为1了啊  fabs是求浮点数的绝对值

user: user-2
content: 第一、没排序 第二、没求奇数与偶数项之和 第三、fabs函数没用对，应该是abs吧。

user: user-3
content: 怎么感觉  Description 和 Input完全不搭边

user: user-0
content: 引用 1 楼 user-3 的回复:看题目像是ACM ？对，我没看清题意，以为输入的数奇偶了，但是就算看错了也可以输出呀，为什么不行呢

user: user-3
content: 看题目像是ACM ？
user-0 提问: 用VC++编这个程序弹出来运行不了，求大神指教

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

user: user-2
content: 哥们，你细心点啊，  //if(;i>=0;i--)改为 for(;i>=0;i--)  修改为for就可以了
user-0 提问: 如何表示12点以前？

回复:
user: user-0
content: 我自己想明白了，其实就是 (t->tm_hour)<12

user: user-0
content: 引用 5 楼 starytx 的回复:CTime t1200(2014,12	,9,12 ,0 ,0); CTime t(xx,xx,xx,xx,xx,xx); if(t < t1200)   // 这就表示今天中午12点前 谢谢，我大概明白了，可我要表示每天中午以前的表达式 如何写呢

user: user-0
content: 引用 3 楼 luo_miao 的回复:建议你先把汉语学好！ 怎么别人就能看懂，你学的是哪国汉语，要学好汉语的是你

user: user-1
content: 看手表更清楚！

user: user-2
content: CTime t1200(2014,12	,9,12 ,0 ,0); CTime t(xx,xx,xx,xx,xx,xx); if(t < t1200)   // 这就表示今天中午12点前

user: user-3
content: 参考 http://blog.sina.com.cn/s/blog_686d0fb001012o3x.html

user: user-4
content: 建议你先把汉语学好！

user: user-5
content: 获取24小时制的时间，判断小时<12

user: user-6
content: 完全不懂你的问题
user-0 提问: 输入年份、月份、日期，判断是该年的第几天，用time，求解

回复:
user: user-0
content: ???不会用代码，能不能写一下

user: user-1
content: time返回time_t类型，本质是int64，是从1970年开始算的秒数  输入日期的time_t减该年第一天的time_t得到的数除以  24 * 3600就得到了天数

user: user-2
content: int yr = 2014,mn = 12,day=8;		// 计算2014年12月8日 	int days =0; 	int mont[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};       if((0==yr%4 && 0!=yr%100)||0==yr%400)          mont[2]=29;      for (int i=0;i < mn; i++)           days += mont[i];      days += day;

user: user-3
content: #include <stdio.h> void split_date(int day_of_year, int year, int *month, int *day) {     int days_of_month[12]={31,28,31,30,31,30,31,31,30,31,30,31};     int m;      if ((year%4==0 && year%100!=0)||(year%400==0)) days_of_month[1]=29;     if ((days_of_month[1]==28 && (day_of_year<1 || 365<day_of_year))       ||(days_of_month[1]==29 && (day_of_year<1 || 366<day_of_year))) {         printf("Invalid day_of_year==%d,year==%d!\n",day_of_year,year);         *month=0;         *day=0;         return;     }     if (year<1900 || 2099<year) {         printf("Invalid year==%d,must between 1900..2099!\n",year);         *month=0;         *day=0;         return;     }     for (m=0;m<12;m++) {         if (day_of_year>days_of_month[m]) day_of_year-=days_of_month[m];         else break;     }     *month=m+1;     *day=day_of_year; } void main() {     int dy,y,m,d;      dy=  1;y=2000;split_date(dy,y,&m,&d);printf("%3d %d-%02d-%02d\n",dy,y,m,d);     dy= 60;y=2000;split_date(dy,y,&m,&d);printf("%3d %d-%02d-%02d\n",dy,y,m,d);     dy=366;y=2000;split_date(dy,y,&m,&d);printf("%3d %d-%02d-%02d\n",dy,y,m,d);     dy=  1;y=2011;split_date(dy,y,&m,&d);printf("%3d %d-%02d-%02d\n",dy,y,m,d);     dy= 60;y=2011;split_date(dy,y,&m,&d);printf("%3d %d-%02d-%02d\n",dy,y,m,d);     dy=365;y=2011;split_date(dy,y,&m,&d);printf("%3d %d-%02d-%02d\n",dy,y,m,d); } //  1 2000-01-01 // 60 2000-02-29 //366 2000-12-31 //  1 2011-01-01 // 60 2011-03-01 //365 2011-12-31

user: user-3
content: mktime localtime

user: user-0
content: 引用 5 楼 u013685578 的回复:很明显是来求代码的那能不能按他这样：输入日期的time_t减该年第一天的time_t得到的数除以  24 * 3600就得到了天数，帮我写出来

user: user-4
content: 很明显是来求代码的

user: user-5
content: int getyearofday(int year,int mon,int day) { 	tm c={0}; 	c.tm_year   =year-1900; 	c.tm_mon    =mon-1; 	c.tm_mday   =day; 	c.tm_hour	=12; 	time_t t   =mktime(&c); 	tm *r =gmtime(&t); 	return r->tm_yday+1; }

user: user-0
content: 引用 1 楼 Icedmilk 的回复:time返回time_t类型，本质是int64，是从1970年开始算的秒数  输入日期的time_t减该年第一天的time_t得到的数除以  24 * 3600就得到了天数不会用代码，能不能写一下
user-0 提问: 求教大神线程的问题

回复:
user: user-1
content: scanf("%d %d ",&m,&n); 后面接个 printf("%d %d\n", m, n); 你就知道你的程序读了什么，以及scanf的参数为什么不能乱写了

user: user-0
content: 引用 1 楼 user-1 的回复:scanf("%d %d ",&m,&n); 后面接个 printf("%d %d\n", m, n); 你就知道你的程序读了什么，以及scanf的参数为什么不能乱写了  3Q,知道错在何处了,我翻翻书总结一下,,有问题再请教.
user-0 提问: 递归里面有for循环如何理解

回复:
user: user-1
content: 目测 1 1 2 1 1 2  很简单的 递归逻辑 1输入2  abc执行 2进入循环 i=1 3第一层递归 执行 abc(n-1)     //n此时为2 4进入第二层递归的循环  n为1 ，再次执行 abc(n-1)  //此时n为1 5 进入第三层递归的循环  n为0  n不满足if条件 空循环2次 函数结束 6 继续执行 第4步 打印 n   n=1 7进入 第4步中的第二次循环   执行第5步空循环  再执行第6步   此时输出为 “1\n1\n”了 8第二层递归结束，第一层递归 继续执行  打印 2  此时输出结果 “1\n1\n2\n” 9 开始第一层递归的 第二次循环  重复 第3到第8步  一次      最终输出结果 “1\n1\n2\n1\n1\n2\n”

user: user-2
content: 谢谢  终于懂了

user: user-3
content: 这里每次递归的for循环，就是多打印了两遍n的值，另外，递归需要有初值！

user: user-4
content: 显示一下递归的层次，有助于理解递归的调用过程  #include <stdio.h>   void abc(int n) {     static r = 0;     int j;     int i;      r++;      for(i=1;i<=2;i++)     {         if (n > 0)         {             abc(n - 1);             for (j = 0; j < r; j++)                 printf("==> ");             printf("%d\n", n);         }     }      r--; }  int main() {     abc(2);     printf("\n");      abc(3);     printf("\n");     return 0; }  /* output: ==> ==> 1 ==> ==> 1 ==> 2 ==> ==> 1 ==> ==> 1 ==> 2  ==> ==> ==> 1 ==> ==> ==> 1 ==> ==> 2 ==> ==> ==> 1 ==> ==> ==> 1 ==> ==> 2 ==> 3 ==> ==> ==> 1 ==> ==> ==> 1 ==> ==> 2 ==> ==> ==> 1 ==> ==> ==> 1 ==> ==> 2 ==> 3 */

user: user-0
content: 麻烦对输出值给出一个解释,THX

user: user-0
content: #include "stdio.h"  void abc(int n) {	int i; for(i=1;i<=2;i++) {     if (n > 0)     {         abc(n - 1);         printf("%d\n",n);     } } }  int main() {     abc(2);     system("pause");     return 0; }
user-0 提问: 关于一维数组动态内存释放的问题

回复:
user: user-1
content: #include "stdio.h" #include <stdlib.h>  int main() { 	int n = 0;  	printf("Please Input Size : \n");  	scanf("%d",&n);  	if (n <= 0) 	{ 		printf("You Input Size Error!\n");  		return 0; 	} 	char* pWords = (char*)malloc(n);  	while(scanf("%s",pWords)!= EOF) 	{ 		for (int i = 0;i < n;i++) 		{ 			if (pWords[i] >='a' && pWords[i] <= 'z') 			{ 				pWords[i] += ('A'-'a'); 			} 			else if (pWords[i] >= 'A'&& pWords[i] <= 'Z') 			{ 				pWords[i] -= ('A'-'a'); 			} 		} 		for (int i = 0;i < n;i++) 		{ 			printf("%c",pWords[i]);  		} 		printf("\n"); 	} 	free(pWords);  	return 0; }  是不是要的这种效果？

user: user-2
content: 没错啊，运行正常的。

user: user-3
content: 先输入一个整数n 然后输入一个字符串words words的字符个数要小于n，不然申请的空间不够存放你输入的字符串

user: user-0
content: #include "stdio.h" #include<stdlib.h> int main() { 	int n,i;	 	while(scanf("%d",&n)!=EOF) 	{	 		char *words=(char*)malloc(n*sizeof(char)); 		if(n==0) break;				 		scanf("%s",words);		 		for(i=0;i<n;i++) 		{ 			if(words[i]>='a'&&words[i]<='z') 			{ 				words[i]+=('A'-'a'); 			} 			else if(words[i]>='A'&&words[i]<='Z') 			{ 				words[i]-=('A'-'a'); 			}		 		} 		for(i=0;i<n;i++) 		{ 			printf("%c",words[i]);		 		}		 		printf("\n"); 		free(words); 	}		 	return 0; }  改成这样了。运行出现了什么Debug Error！

user: user-3
content: int n,i;	 char *words=(char*)malloc(n*sizeof(char));  n没有进行初始化！
user-0 提问: 新手求解释？？？？

回复:
user: user-1
content: 建议看看C语言基础！

user: user-2
content: / 整除运算符，结果取整，比如 1200/1000 结果就是 1 % 求模运算符也就是取余数，比如 123%10 的结果就是 3 建议先看看基础
user-0 提问: 求助， 函数递归使用一直出错！

回复:
user: user-1
content: 运行良好啊，LZ发现什么问题了？  #include <stdio.h> #include <stdlib.h>  struct node {     struct node *lc;     struct node *rc;     int i; };  struct node *add_tree(int data, struct node *ihead); struct node *creat_tree(int a[], int n) { 	struct node *root = NULL; 	int i; 	for (i = 0; i < n; i++) { 		printf("%d", i); //		system("pause"); 		root = add_tree(a[i], root); 	} 	return root; }  struct node *add_tree(int data, struct node *ihead) { 	if (ihead == NULL) { 		ihead = (struct node *) malloc(sizeof(struct node));  		ihead->i = data; 		ihead->lc = NULL; 		ihead->rc = NULL; 		return ihead; 	} 	if (data <= ihead->i) 		ihead->lc = add_tree(data, ihead->lc); 	else 		ihead->rc = add_tree(data, ihead->rc); 	return ihead; }  void free_node(struct node *root) { 	if(root)  { 		free_node(root->lc); 		free_node(root->rc); 		printf("%d\n", root->i); 		free(root); 	} }  int main(void) { 	struct node *root; 	int a[] = {1, 2, 3, 4, 5};  	root = creat_tree(a, 5); 	printf("\n"); 	free_node(root);     return 0; }

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

user: user-3
content: 引用 4 楼 zhuimengfuyun 的回复:怎么感觉逻辑不对呀。。。我也不知道，当我没发表意见

user: user-3
content: 怎么感觉逻辑不对呀。。。

user: user-0
content: 引用 1 楼 user-4 的回复:ihead=(struct node*)malloc(sizeof(struct node *)); 谢谢你， 那个星号去掉了 ，但是仍然有错，   当i=1 时 执行add—tree的时候 原来的root 也就是存a【0】的那个结点里的rc 和lc指针竟然不为NULL了 。

user: user-0
content: 谢谢你， 那个星号去掉了 ，但是仍然有错，   当i=1 时 执行add—tree的时候 原来的toot 也就是存a【0】的那个结点里的rc 和lc指针竟然不为零了 。

user: user-4
content: ihead=(struct node*)malloc(sizeof(struct node *));
user-0 提问: 求大神看看为什么我这样从main函数输出不了数据啊？

回复:
user: user-0
content: 引用 5 楼 starytx 的回复:引用 3 楼 u014080033 的回复:那这一句：pOut=a;我该怎么样改啊？把函数内部的数组名a全部改为pOut，把数组的定义放在main中而不是函数内部，传数组名进去，把这句pOut=a删了。建议对数组进行初始化，就像这样char a[1000] = {0}; 解决啦，谢谢啦

user: user-1
content: 可以换一种方法求，不用字符参与运算，而是计算出数值后转换成字符。

user: user-2
content: 引用 3 楼 u014080033 的回复:那这一句：pOut=a;我该怎么样改啊？把函数内部的数组名a全部改为pOut，把数组的定义放在main中而不是函数内部，传数组名进去，把这句pOut=a删了。建议对数组进行初始化，就像这样char a[1000] = {0};

user: user-3
content: char *pOut="";改为 char *pOut = (char*)malloc(1000);

user: user-0
content: 那这一句：pOut=a;我该怎么样改啊？

user: user-4
content: pOut=a;//输入N的阶乘的结果以字符串的形式存在数组a中；  子函数运行完成之后a的内容就释放了，你pOut里面根本没有东西啊。 你要把a里面的内容复制到pOut指向的内存当中

user: user-2
content: 就算指向了数组a也没有意义，因为数组a是一个临时数组，你要做的是在main中定义数组，然后传给函数，在函数里边直接将pOut作为数组来使用就行了，这样需要函数调用者保证pOut的合法性（必须是一个有足够长度的数组空间）
user-0 提问: 请教如何获得一组数据中第二大的数

回复:
user: user-0
content: 楼上说得对，所以我实际用度时候是给的0，我的数组都是正数

user: user-1
content: 引用 1 楼 huanhuanshisb 的回复:定义两个参量ab 开始都记录数组第一个数。然后a记录最大的数。每次a数值改变时b记录下a改变之前的值。b最后就是第二大得数如果第一个数字恰好是最大 数,那就永远不会交换了, 就没有给b赋值了

user: user-1
content: 仅供参考 #include<stdio.h> #include<stdlib.h>  int cmp(const void *a, const void *b) { 		return *(int *)b - *(int *)a; }  int find_second_num(int arry[],int len) { 		/*数组从小到大排序*/ 		qsort(arry,len,sizeof(int),cmp); 		int i; 		int second; 		for(i = 1 ; i < len ;++i) 		{ 				if(arry[i] == arry[0]) 						continue; 				else 				{ 						second = arry[i]; 						break; 				} 		} 		if(i == len) 		{ 				fprintf(stderr,"no second largest number!"); 						exit(1); 		} 		else 				return second; }  int main() { 		int arry[100]; 		time_t t; 		srand((unsigned)time(&t)); 		int i; 		for(i = 0; i < 100; ++i) 				/*设置测试数据为 0 到 49 范围*/ 				arry[i] = rand() % 50;  		for(i = 0; i < 100; ++i) 				printf("%d\t",arry[i]); 		printf("\n");  		int second;  		second = find_second_num(arry,100); 		printf("The second largest number is %d \n",second);  		return 0; }

user: user-0
content: 好方法，分给你了

user: user-2
content: 定义两个参量ab 开始都记录数组第一个数。然后a记录最大的数。每次a数值改变时b记录下a改变之前的值。b最后就是第二大得数
user-0 提问: .exe已停止工作

回复:
user: user-1
content: 程序太长，不才兄弟我已经晕了，所以救不了你。你找赵四老湿，必有所获。

user: user-2
content: 崩溃了。自己调试啊

user: user-0
content: 查询全部结束后，就停止工作了。 查询语句代码，在上面。

user: user-0
content: void StaffP(DataType x){ printf("%s\t",x.Sno); printf("%s\t",x.Sname); printf("%s\t",x.Ssex); printf("%s\t",x.Spost); printf("\n"); }  void StaffGet(SLNode *head){ DataType x; int a;  int b; int	c=0; SLNode *pWork = head->next; printf("1.查询全部\n"); printf("2.查询单个\n"); printf("请输入选择："); scanf("%d",&b); switch(b){ case 1:	{ printf("学号：\t"); printf("姓名：\t"); printf("性别：\t"); printf("年龄：\n");	 while (pWork != NULL ){ x=pWork->data; StaffP(x); pWork = pWork->next; } break;} case 2:printf("请输入查询位置："); scanf("%d",&a); printf("学号：\t"); printf("姓名：\t"); printf("性别：\t"); printf("年龄：\n"); ListGet(head,a-1,&x); StaffP(x); break; default:break; }  }

user: user-3
content: 单步调试
user-0 提问: C语言用fopen以只读方式打开文件，程序闪退问题

回复:
user: user-1
content: 头文件 #include "conio.h"    末尾：getch();

user: user-0
content: 嗯，其实我被一个问题给蒙蔽了，在VC环境下运行程序时打开文件是在工作空间或工程文件夹下查找文件，所以能正常执行，而脱离VC环境运行程序时打开文件是在可执行文件当前文件夹下查找文件，而我要读的文件是放在工程文件夹下不是放在debug这个文件夹下所以打开出错，程序就直接退出了。

user: user-2
content: 文件路径问题。

user: user-3
content: 你要先e生成release版本才可以脱离vc6打开,我估计你的是debug版本的http://www.cxybl.com/html/bcyy/c/20130605/38340.html

user: user-4
content: _chdir, _wchdir Change the current working directory.  int _chdir( const char *dirname );  int _wchdir( const wchar_t *dirname );  Routine Required Header Optional Headers Compatibility  _chdir <direct.h> <errno.h> Win 95, Win NT  _wchdir <direct.h> or <wchar.h> <errno.h> Win NT    For additional compatibility information, see Compatibility in the Introduction.  Libraries  LIBC.LIB Single thread static library, retail version  LIBCMT.LIB Multithread static library, retail version  MSVCRT.LIB Import library for MSVCRT.DLL, retail version    Return Value  Each of these functions returns a value of 0 if successful. A return value of –1 indicates that the specified path could not be found, in which case errno is set to ENOENT.  Parameter  dirname  Path of new working directory  Remarks  The _chdir function changes the current working directory to the directory specified by dirname. The dirname parameter must refer to an existing directory. This function can change the current working directory on any drive and if a new drive letter is specified in dirname, the default drive letter will be changed as well. For example, if A is the default drive letter and \BIN is the current working directory, the following call changes the current working directory for drive C and establishes C as the new default drive:  _chdir("c:\\temp");  When you use the optional backslash character (\) in paths, you must place two backslashes (\\) in a C string literal to represent a single backslash (\).  _wchdir is a wide-character version of _chdir; the dirname argument to _wchdir is a wide-character string. _wchdir and _chdir behave identically otherwise.  Generic-Text Routine Mapping:  TCHAR.H Routine  _UNICODE & _MBCS Not Defined _MBCS Defined _UNICODE Defined  _tchdir _chdir _chdir _wchdir    Example  /* CHGDIR.C: This program uses the _chdir function to verify  * that a given directory exists.  */  #include <direct.h> #include <stdio.h> #include <stdlib.h>  void main( int argc, char *argv[] ) {    if( _chdir( argv[1] )   )       printf( "Unable to locate the directory: %s\n", argv[1] );    else       system( "dir *.wri"); }   Output   Volume in drive C is CDRIVE  Volume Serial Number is 0E17-1702   Directory of C:\write  04/21/95  01:06p                 3,200 ERRATA.WRI 04/21/95  01:06p                 2,816 README.WRI                2 File(s)          6,016 bytes                              71,432,116 bytes free   Directory Control Routines  See Also   _mkdir, _rmdir, system

user: user-5
content: 打开的文件不存在吧， printf("It can not be opened the file!\n");  exit(0); 在这句话中间加个getchar();就该看出来了

user: user-6
content: 文件存在么，要是不存在，估计会闪退吧。可以加上r+
user-0 提问: 新手求解？？？？

回复:
user: user-1
content: 五的阶乘等于四的阶乘乘以五

user: user-2
content: 这就是你要求的注释： 5！=4！*5        //非法表达式

user: user-2
content: 球？ 求？ 会用汉语拼音输入法的人就是这么任性。 阶乘是啥