Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 刚才问题没说清楚。求大神帮忙看下小弟这个程序哪里出了问题 感激ing~

回复:
user: user-1
content: 不要使用 while (条件) 更不要使用 while (组合条件) 要使用 while (1) {  if (条件1) break;  //...  if (条件2) continue;  //...  if (条件3) return;  //... } 因为前两种写法在语言表达意思的层面上有二义性，只有第三种才忠实反映了程序流的实际情况。 典型如： 下面两段的语义都是当文件未结束时读字符 while (!feof(f)) {  a=fgetc(f);  //...  b=fgetc(f);//可能此时已经feof了！  //... } 而这样写就没有问题： while (1) {  a=fgetc(f);  if (feof(f)) break;  //...  b=fgetc(f);  if (feof(f)) break;  //... } 类似的例子还可以举很多。

user: user-2
content: #include <stdio.h> #define MAXLINE 1000  int getline_r(char line[], int maxline); void copy(char to[], char from[]);  int main(void) {     int len;     int max;     char line[MAXLINE];     char longest[MAXLINE];      max = 0;      printf("please enter some strings!\n");      while((len = getline_r(line, MAXLINE)) > 0)         if (len > max) {             max = len;             copy(longest, line);         }      if (max > 0)         printf("%s", longest);      getchar();      return 0;  }  int getline_r(char s[], int lim)   //返回行的长度 {     int c, i;      for (i = 0; i < lim - 1 && (c = getchar()) != EOF && c != '\n'; ++i)         s[i] = c;     if (c == '\n') {         s[i] = c;         i++;     }     s[i] = '\0';      printf("i = %d\n", i);     return i; } void copy(char to[], char from[])  //复制字符串 {     int i;     i = 0;     while ((to[i] = from[i]) != '\0')         ++i;  } 去掉if后面的括号，那么输入EOF后，i也会自增1，那么循环（main里的循环）就不会停止，因为getline的返回值返回1。 如果加上括号，输入EOF后，i的值就是0，while循环判断为0，退出循环。 另外，建议将getline改一下名字，防止与系统函数名字冲突～
user-0 提问: 该代码循环中为何赋完a就结束循环了?对于s1的输出结果是否以空字符结束？

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

user: user-0
content: 问题修改一下，两者为何有这差别?这段语句的输出结果为“abc” #include <stdio.h> #include"stdlib.h" main() { char y[9]; char qw[5]; char *s1="iya"; char *s2="abc"; int i=0; for(;*s1;s1++,s2++,i++){ y[i]=*s2; }  s1=&y[0]; printf("%s",s1);  system("pause"); } 收起 这段语句输出结果为"a" #include <stdio.h> #include"stdlib.h" main() { char y[9]; char qw[5]; char *s1="iya"; char *s2="abc"; int i=0; for(;*s1;s1++,s2++,i++){ y[i]=*s2; s1=&y[i]; }  s1=&y[0]; printf("%s",s1);  system("pause"); }

user: user-2
content: 具体循环了几次，可以通过在循环外打印i的值便可以知道。 理论上讲，s1指向字符串结束标记'\0'才会结束循环，那么至少循环3次才可以。循环3次也不能对y后面加上'\0',所以从逻辑上考虑，需要在循环外将字符串'\0'加到y有效字符的后面； #include <stdio.h> #include"stdlib.h" int main() {     char y[9];     char qw[5];     char *s1="iya";     char *s2="abc";     int i=0;     for(;*s1;s1++,s2++,i++){         y[i]=*s2;     }     printf("i = %d\n", i);     y[i] = 0;     s1=&y[0];     printf("%s\n",s1);     system("pause"); }

user: user-3
content: 引用为何有这差别  第二种写法是有问题的。 //这个循环并不能如预想的那样结束	 for (; *s1; s1++, s2++, i++) { //执行完循环后，会执行s1++,s2++,i++,然后再判断循环条件 		y[i] = *s2; 		s1 = &y[i];  //s1读到'\0'后，在进行下一次判断之前，会先执行s1++，之后*s1又不会等于0，继续循环下去。 	} 最终的结果是发生运行时错误。你可以分步调试就能清楚的看到这个过程。
user-0 提问: 请教大神，我的22被吃掉了，新生成的文件只有沈潇潇

回复:
user: user-0
content: 谢谢大神，我明白了

user: user-1
content: 这是因为fwrite写入后，文件中存放的是22的二进制形式。 查一下ascii表： http://blog.csdn.net/xiaojianpitt/article/details/6925849 从表中可知，十进制为22的字符是一个不可见字符，因此导致题目中描述的现象。 您可以把22换成65(查ascii表可知其为大写字母'A')，再运行一次看看结果。  解决方法： 如果确实是想将22这个数字写入文件，应该换用fprintf函数，具体用法可以百度。
user-0 提问: 求助 c语言程序设计里面的一段代码

回复:
user: user-1
content: 不要使用 while (条件) 更不要使用 while (组合条件) 要使用 while (1) {  if (条件1) break;  //...  if (条件2) continue;  //...  if (条件3) return;  //... } 因为前两种写法在语言表达意思的层面上有二义性，只有第三种才忠实反映了程序流的实际情况。 典型如： 下面两段的语义都是当文件未结束时读字符 while (!feof(f)) {  a=fgetc(f);  //...  b=fgetc(f);//可能此时已经feof了！  //... } 而这样写就没有问题： while (1) {  a=fgetc(f);  if (feof(f)) break;  //...  b=fgetc(f);  if (feof(f)) break;  //... } 类似的例子还可以举很多。

user: user-2
content: 加括号，新串第一个字符就输入EOF时，返回值i就是0， 不加括号，第一个字符输入EOF时，i的值就是1，返回就是1。

user: user-0
content: 引用 1 楼 fight_in_dl 的回复:引用求解 if (c == '\n') { 	s[i] = c; 	i++;  //当if条件满足时，才执行这行。 } if (c == '\n') { 	s[i] = c; } i++;  //不管if条件是否满足，都会执行这行  两种情况下i值的变化规律不一样，程序的运行逻辑也会不一样。 引用 1 楼 fight_in_dl 的回复:引用求解 if (c == '\n') { 	s[i] = c; 	i++;  //当if条件满足时，才执行这行。 } if (c == '\n') { 	s[i] = c; } i++;  //不管if条件是否满足，都会执行这行  两种情况下i值的变化规律不一样，程序的运行逻辑也会不一样。 c = getchar() 假如我输入abcdef 我上面2种形式不都是变成s[] = abcdef\n\0 这样么。。。

user: user-0
content: c = getchar() 假如我输入abcdef 我上面2种形式不都是变成s[] = abcdef\n\0 这样么。。。

user: user-3
content: 引用求解 if (c == '\n') { 	s[i] = c; 	i++;  //当if条件满足时，才执行这行。 } if (c == '\n') { 	s[i] = c; } i++;  //不管if条件是否满足，都会执行这行  两种情况下i值的变化规律不一样，程序的运行逻辑也会不一样。
user-0 提问: 无法解析的外部符号

回复:
user: user-1
content: 注意下是不是函数名不对呢，OpenSrve和OpenSrv的区别。

user: user-2
content: 无法解析是因为没有定义或者张冠李戴了

user: user-3
content: 引用编译的时候报错  提问时最好能附上具体的错误信息，更利于定位。  void OpenSrve(void);  //和后来的函数名不一致，多了一个e  不确定是不是粘贴失误，如果这是最终版本，那肯定是要报错的。
user-0 提问: 请问我这个函数有什么问题？找不到原因

回复:
user: user-0
content: 引用 3 楼 ipqtjmqj 的回复:改用strcpy或memcpy 谢谢你，可以了。

user: user-0
content: 引用 2 楼 fight_in_dl 的回复:引用不能修改的左值  c++表达式的左值必须可以修改。 没有结构体的定义，不清楚name和wage的类型。 如果是数组类型， 数组名是常量 ，不可以修改。  可以用strcpy函数为字符数组赋值，具体用法可以百度。 谢谢，，忘了，前面都写了<string.h> 结构到复制名字的时候怎么都没想起来， 哈哈， 真的太感谢了。

user: user-1
content: 改用strcpy或memcpy

user: user-2
content: 引用不能修改的左值  c++表达式的左值必须可以修改。 没有结构体的定义，不清楚name和wage的类型。 如果是数组类型， 数组名是常量 ，不可以修改。  可以用strcpy函数为字符数组赋值，具体用法可以百度。

user: user-0
content: 谁能帮助我一下啊，谢谢了
user-0 提问: 大哥帮解释一下

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

user: user-2
content: 引用p2=p1;              //为什么这"p2=p2->node"就段错误，这两个不是一样的吗。 p1=p2->node; //注意这行是在if分支中，有可能执行，也有可能不执行，取决于是否满足判断条件  //所以这两个并不一样  p2 = p1;  //因为不能百分百保证 p1 = p2->node会执行 p2 = p2->node;

user: user-3
content: 这有什么好解释的？
user-0 提问: C语言两个byte 赋给一个变量的问题

回复:
user: user-1
content: 位移➕与运算，楼主用的是位移和➕运算，算法本身就错误，结果自然不正确

user: user-2
content: 5楼正解！

user: user-3
content: int byte1 = 0x3f; int byte2 = 0xf0; int data = byte2 + (byte1 << 8); cout << data << endl;

user: user-2
content: unsigned char b1=0x3Fu; unsigned char b2=0xF0u; unsigned short int data; data=((unsigned short int)b1<<8)|((unsigned short int)b2;

user: user-4
content: data = ((unsigned int)byte1 << 8) + byte2; 另外注意下byte1和byte2的类型

user: user-5
content: 算加法也可以,不过 需要注意 << 运算符的优先级 低于 +    data = (byte1 << 8) + byte2;

user: user-6
content: 引用希望的结果是 data= 0x3FF0    不应该用+，应该用位或运算符  ｜ data = (byte1 << 8) | byte2;

user: user-7
content: 查阅优先级表格 下一题
user-0 提问: 急急急!!!!!!!源目的IP 源目的port 计算哈希值 不冲突

回复:
user: user-1
content: A:B:C:D:port 8+8+8+8+16=48bit 直接用≥48位比如64位整数保存所有信息？

user: user-2
content: 引用有什么好哈希算法吗  哈希冲突是必然的，推荐 http://www.cnblogs.com/xiekeli/archive/2012/01/13/2321207.html 系列文章共三篇。  文中提到的暴雪hash代码下载地址 http://download.csdn.net/detail/yjsyjs1189/2844737

user: user-0
content: 引用 1 楼 fight_in_dl 的回复:引用有什么好哈希算法吗  哈希冲突是必然的，推荐 http://www.cnblogs.com/xiekeli/archive/2012/01/13/2321207.html 系列文章共三篇。  文中提到的暴雪hash代码下载地址 http://download.csdn.net/detail/yjsyjs1189/2844737谢谢 我只想知道四元组算哈希值 有什么好办法，别整一堆帖子给我。
user-0 提问: 实现两个字符串的比较，但在编译器中比较的结果却不正确，比如输入"ihq"时却也显示字符串相同。什么原因？

回复:
user: user-1
content: 引用还有这段代码，编译器为何提示这个错误？ 左值这个问题： c++表达式的左值必须可以修改， 数组名是常量 ，不可以修改。 可以用strcpy函数为字符数组赋值，具体用法可以百度。     for (; *s1 && *s2 && *s1==*s2; ++s1,++s2)        NULL;   //当比较的两个字符串没有到末尾，或者对应字符相等，就一直循环 return *s1==*s2 ? 0 : *s1>*s2 ? 1 : -1;     假如s1 = "abc"，s2 = “abe" 这两行代码结果为 -1 。 循环比较对应字符，'a' == 'a'  'b' == 'b'  'c' < 'e'         你再自己输入几个样例，走一遍循环就理解了。

user: user-0
content: 还有这段代码，编译器为何提示这个错误？ #include <stdio.h>  main() {     int y;     char s1[]="iya";     char s2[]="abc";     for(;*s1!='\0';s1++,s2++) {      y=(*s1>*s2)? 1 : -1;      printf("%d ",y);      } }

user: user-0
content: 请再看下这个， #include <stdio.h>  int _strcmp(char *s1, char *s2) {     for (; *s1 && *s2 && *s1==*s2; ++s1,++s2) NULL;   //对于这两行语句我不明白它的含义；麻烦解释一下。     return *s1==*s2 ? 0 : *s1>*s2 ? 1 : -1;                         //对于这两行语句我不明白它的含义；麻烦解释一下。 }  main() {     char m[5];     char a[]="abc";     gets(m);     if (_strcmp(m, a) == 0)         printf("a\n");     else         printf("b\n"); }

user: user-1
content: 引用比较的结果却不正确 原有的写法中当 *a==*b 时循环才执行，当*a !=*b 时不执行循环。 这样  x=1; 没有机会得到执行。 修改后的代码如下：  int function(char *a, char *b) { 	int x;        //当被比较的字符串（ihy）到未尾才结束循环，这样不管输入的字符串长度如何，都能对其比较完全        //输入ih，结果应为不相等，输入ihq，结果应为不相等，只有输入ihy，结果才相等 	for (; *b != '\0'; a++, b++) {  		if (*a == *b) 			x = 0; 		else 			x = 1; 	} 	return(x); } int main() { 	char *c = "ihy"; 	char d[100]; //题目中d定义为指向常量字符串的指针变量，运行时会报错。  	scanf("%s", d); 	if (function(d, c) == 0) 		printf("字符串相同\n"); 	else 		printf("字符串不相同\n"); 	system("pause"); 	return 0; }

user: user-0
content: [quote=引用 5 楼 fight_in_dl 的回复:] for (; *s1 && *s2 && *s1==*s2; ++s1,++s2)        NULL;   //当比较的两个字符串没有到末尾， 比如这个，导致循环结束，是因为赋完一个值a给*s1后*s1就到末尾了吗？为何没有完整的赋完abc? #include <stdio.h>  main() {     char y[9];     char *s1="iya";     char *s2="abc";     int i=0;     for(;*s1;s1++,s2++,i++){       y[i]=*s2;       s1=&y[i];     }      s1=&y[0];      printf("%s",s1); }

user: user-2
content: 首先你没有判断字符串是否结束，要是两个字符串真的相等，就没法停下来，a和b会移到字符串外面去。 其次，你的循环里面，else x = 1永远都不会被执行到。因为只要能进入循环必然a、b相等。要是不等，就根本进不去循环。  基于你的思路改一下：  int function(char *a,char *b){   for(;*a==*b;a++,b++){     // 一直看到字符串尾才返回0     // *a=='\0'那么也必然*b=='\0'，就不用写了     if ( *a=='\0' )       return 0;   }   // 循环提前结束，说明二者有所不同   return 1; }
user-0 提问: c语言调用dos命令

回复:
user: user-0
content: 多谢各位啦

user: user-1
content: char command[200]; sprint(command,"netsh wlan set hostednetwork mode=allow ssid=%s key=%s",name.c_str(),key.c_str()); system(command);

user: user-2
content: 要#include <sstream> stringstream用起来就跟iostream一样。   std::stringstream ss; string name = "test.jpg"; ss << "del " << name; system(ss.str());

user: user-3
content: sprintf 字符串格式化函数
user-0 提问: 数据结构对单链表进行数据排序

回复:
user: user-1
content: 学到了学到了

user: user-2

user: user-2
content: 十字链表交换任意两个节点C源代码（C指针应用终极挑战）http://download.csdn.net/detail/zhao4zhong1/5532495

user: user-2
content: C双链表的逆序操作：http://bbs.csdn.net/topics/392264935

user: user-3
content: http://blog.csdn.net/zhagoodwell/article/details/59230474

user: user-4
content: 66666666666666

user: user-5
content: 学习学习 长知识 了。

user: user-6
content: 学习学习了乐乐乐乐

user: user-7
content: 引用 33 楼 weixin_37174592 的回复:长见识了，原来还可以这操作！  呵呵！

user: user-8
content: 引用 33 楼 weixin_37174592 的回复:长见识了，原来还可以这操作！  呵呵！

user: user-8
content: 长见识了，原来还可以这操作！

user: user-9
content: 就是第一次r->data<cp->data比较的时候我就有点不明白

user: user-10
content: 长见识了，以前学习的时候也是模糊。

user: user-11
content: 怎么获得下载积分啊？？？？？？

user: user-12
content: 好的 谢谢老师！

user: user-2
content: 引用 26 楼 zhezhe_9860 的回复:请教下 赵老师 这几个图用什么软件画出 来的？？visio

user: user-13
content: 长见识了.谢谢楼主.

user: user-2
content: 引用 20 楼 user-15 的回复:[quote=引用 16 楼 zhao4zhong1 的回复:] Orz 跪求版主加精！  已推荐，难得赵老师这么有耐心了[/quote] 谢谢推荐！ 关键是这个图应该够“旷古烁今”了。

user: user-14
content: 没必要吧，这个是很经典的插入排序算法，

user: user-15
content: 引用 16 楼 zhao4zhong1 的回复:Orz 跪求版主加精！  已推荐，难得赵老师这么有耐心了
user-0 提问: 新手求解大神一道简单编程题！

回复:
user: user-1
content: 规则为如果x楼和y楼已经有归属人，则i=x+y或i=x-y均可占领  这句话不知道是什么意思。

user: user-2
content: 我觉得你题目是不是有问题,或许可能是我理解错了,我是这样理解的,N,一开始不就代表宿舍楼的总数了吗,为什么还要计算可到达的宿舍楼,一人占一次,就是判断奇偶性？你是怎么理解的呢
user-0 提问: 求解

回复:
user: user-1
content: 如果不考虑先算乘除后算加减的话,答案应该是 5 + 8 - 9 = 4 +     -    - 7 -  6 * 4 = 4 /      *     - 3 + 2 - 1 = 4 =    =    = 4    4    4 考虑到先乘除后加减的情况下 2 + 11 - 9 = 4 +     -    - 4 -  1 * 0 = 4 /      *     - 2 + 7 - 5 = 4 =    =    = 4    4    4
user-0 提问: 如何用链表存储socket投递的io请求？

回复:
user: user-0
content: 首先，非常感谢您的回复！  小猪用动态数组存储新创建的IO请求，请问这些IO请求是谁创建的？又是谁投递的？小猪用动态数组管理这些IO请求，却没用动态数组中的泛型进行查找，他那段查找代码效率有些低，所以我想用链表实现该功能。

user: user-1
content: 个人感觉不需要链表存储， 因为投递后，不管是成功还是失败， 在GetQueuedCompletionStatus中都会返回 如果是学习，网搜 iocp piggy， 有很完整的入门代码
user-0 提问: 如何设置Include根目录相对文件？

回复:
user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:在include path最后加 ;d:/code/ruby/ruby/blob/trunk  对，这样解决了，在CMakeLists.txt增加： include_directories(.)

user: user-1
content: 在include path最后加 ;d:/code/ruby/ruby/blob/trunk
user-0 提问: 请大神帮忙看看，我写了个文件复制的简单程序，但是p1指针不知道为什么变为空指针了

回复:
user: user-0
content: 打扰了大家了，在编辑器中大写的W和小写的w真的不好分辨，一贴出来就马上发现问题了，闹笑话了
user-0 提问: 关于结构体

回复:
user: user-1
content: 引用已经改正了 不客气，共同进步。 可以的话结题散分好吗^_^，论坛有结题率和采纳率的指标~~

user: user-0
content: 引用 2 楼 fight_in_dl 的回复:引用出错 问题的根源是里层GROUP_INFO是 类型 的名字，而不是 变量 的名字。 之前的写法类似 变量->类型.成员 = .... 应该修改为 变量->变量.成员 = ....  具体修改方法为将里层结构体定义中的typedef关键字去掉  typedef    struct   _GROUP_INFO //去掉typedef      然后应该这么使用：  pstFrameInfo->GROUP_INFO.iGroupRank = 9;   //=右侧不能是iGroupRank，编译器不知道等号右侧iGroupRank是什么。 //9是我随意取的数，根据需要自己赋值  我后来也发现是这个问题,已经改正了,还是非常感谢你,你的回答很有用

user: user-2
content: 引用 3 楼 fight_in_dl 的回复:引用pstFrameInfo->iGroupRank=iGroupRank;  赵四老师，请注意回答质量，你每天要答几百道题吧? 别累坏了。

user: user-1
content: 引用pstFrameInfo->iGroupRank=iGroupRank;  赵四老师，请注意回答质量，你每天要答几百道题吧? 别累坏了。

user: user-1
content: 引用出错 问题的根源是里层GROUP_INFO是 类型 的名字，而不是 变量 的名字。 之前的写法类似 变量->类型.成员 = .... 应该修改为 变量->变量.成员 = ....  具体修改方法为将里层结构体定义中的typedef关键字去掉  typedef    struct   _GROUP_INFO //去掉typedef      然后应该这么使用：  pstFrameInfo->GROUP_INFO.iGroupRank = 9;   //=右侧不能是iGroupRank，编译器不知道等号右侧iGroupRank是什么。 //9是我随意取的数，根据需要自己赋值

user: user-2
content: pstFrameInfo->iGroupRank=iGroupRank;
user-0 提问: 关于内存对齐

回复:
user: user-0
content: 一楼是正解，终于明白了。谢谢大家！

user: user-1
content: 引用 楼主 vinnyjia 的回复:因为内存中的所有变量的首地址都是从偶地址开始的 不是。

user: user-2
content: 《C语言结构struct的内存对齐》 http://blog.csdn.net/hou09tian/article/details/74359172 还请多指教

user: user-2
content: http://blog.csdn.net/hou09tian/article/details/74359172 《C语言结构struct的内存对齐》 还请多指教

user: user-3
content: struct HH {     char str[3];     char ch; };  这样子试试？

user: user-4
content: 仅供参考：#include <stdio.h> #define field_offset(s,f) (int)(&(((struct s *)(0))->f)) struct AD  { int a; char b[13]; double c;}; #pragma pack(push) #pragma pack(1) struct A1  { int a; char b[13]; double c;}; #pragma pack(2) struct A2  { int a; char b[13]; double c;}; #pragma pack(4) struct A4  { int a; char b[13]; double c;}; #pragma pack(8) struct A8  { int a; char b[13]; double c;}; #pragma pack(16) struct A16 { int a; char b[13]; double c;}; #pragma pack(pop) int main() {     printf("AD.a %d\n",field_offset(AD,a));     printf("AD.b %d\n",field_offset(AD,b));     printf("AD.c %d\n",field_offset(AD,c));     printf("AD sizeof %d\n", sizeof(AD));     printf("\n");     printf("A1.a %d\n",field_offset(A1,a));     printf("A1.b %d\n",field_offset(A1,b));     printf("A1.c %d\n",field_offset(A1,c));     printf("A1 sizeof %d\n", sizeof(A1));     printf("\n");     printf("A2.a %d\n",field_offset(A2,a));     printf("A2.b %d\n",field_offset(A2,b));     printf("A2.c %d\n",field_offset(A2,c));     printf("A2 sizeof %d\n", sizeof(A2));     printf("\n");     printf("A4.a %d\n",field_offset(A4,a));     printf("A4.b %d\n",field_offset(A4,b));     printf("A4.c %d\n",field_offset(A4,c));     printf("A4 sizeof %d\n", sizeof(A4));     printf("\n");     printf("A8.a %d\n",field_offset(A8,a));     printf("A8.b %d\n",field_offset(A8,b));     printf("A8.c %d\n",field_offset(A8,c));     printf("A8 sizeof %d\n", sizeof(A8));     printf("\n");     printf("A16.a %d\n",field_offset(A16,a));     printf("A16.b %d\n",field_offset(A16,b));     printf("A16.c %d\n",field_offset(A16,c));     printf("A16 sizeof %d\n", sizeof(A16));     printf("\n");     return 0; } //AD.a 0 //AD.b 4 //AD.c 24 //AD sizeof 32 // //A1.a 0 //A1.b 4 //A1.c 17 //A1 sizeof 25 // //A2.a 0 //A2.b 4 //A2.c 18 //A2 sizeof 26 // //A4.a 0 //A4.b 4 //A4.c 20 //A4 sizeof 28 // //A8.a 0 //A8.b 4 //A8.c 24 //A8 sizeof 32 // //A16.a 0 //A16.b 4 //A16.c 24 //A16 sizeof 32 // //

user: user-5
content: 字节对齐只看基本数据类型的大小，包括嵌套的结构体、共用体等。数组无非就是N个相同连续变量而已。 默认是按成员最大的基本类型字节数对齐，目前最大也就是8字节的double和64位的long、pointer或者32位的long long之类的。  默认情况下，成员对齐要求成员首地址是自身类型大小的倍数，不一定是偶地址，奇地址主要是单字节的char。char不管奇偶都可以放，因为任何地址都是1的倍数。 你举的例实际上就是连续的4个char，它们是挨着存储的，所以是4字节。  struct A{ char a; short b; int c; } 4字节对齐，b地址等于a地址+2，c地址等于a地址+4，共8字节。  struct A{ char a; int c; short b; } 4字节对齐，c地址等于a地址+4，b地址等于a地址+8，，共12字节。
user-0 提问: windows系统中codeblocks中GCC的搭建问题

回复:
user: user-0
content: 引用 3楼战在春秋 的回复:引用哪里的路径不对  检查linker settings和search directories的设置是否正确谢谢 是的 问题点找到了

user: user-1
content: 引用哪里的路径不对  检查linker settings和search directories的设置是否正确

user: user-2
content: 帮结帖＋蹭分

user: user-0
content: 问题已经解决
user-0 提问: C/C++关于i++,i--的问题

回复:
user: user-1
content: 个人建议对于这类问题，可以作为研究用，平时写代码时不建议写。i++,++i这类表达式是有副作用的，用不好会出现问题。

user: user-2
content: 谁这样写产品中的代码就等着被喷吧。

user: user-3
content: 这种问题变成了论坛的日经了吗? 日日讲月月讲 +1

user: user-4
content: 关于C,C++表达式求值顺序 http://blog.csdn.net/fefe82/article/details/37833767，http://bbs.csdn.net/topics/370153775

user: user-5
content: 这种问题变成了论坛的日经了吗? 日日讲月月讲

user: user-6
content: 引用 1 楼 fight_in_dl 的回复:1 参数从右向左顺序计算。 2 对于后缀形式的自增（自减）表达式，先取变量的值作为表达式的值，然后该变量再加1（减1）。  int i = 0;  此时i=0 先算i--表达式的值为0，然后i = i -1 = -1 再算右边第一个i++表达式的值为-1，然后i = i + 1 = 0 再算右边第二个i++表达式的值为0， 然后i = i + 1 = 1 再算i的值等于 1 printf("%d %d %d %d\n", i, i++, i++,i--); //输出 1 0  -1 0  此时i = 1，开始执行下一句。 先算i--表达式的值为1，然后i = 1 -1 =  0 再算右边第一个i++表达式的值为0，然后i = 0 + 1 = 1 再算右边第二个i++表达式的值为1， 然后i = 1+ 1 = 2 再算i的值等于 2 cout << i << " " << i++ << " " << i++ << " " << i-- << endl; //输出 2 1 0 1说错了  不是从右向左  也不一定是输出1 0 -1 0

user: user-7
content: 同一表达式中多个子表达式，标准对于其求值顺序未进行强制规定 这个程序放在不同编译器下可能结果就不一样了  求值顺序和参数的压栈顺序，操作数的结合律，操作符运算优先级是不一样的概念

user: user-8
content: 1 参数从右向左顺序计算。 2 对于后缀形式的自增（自减）表达式，先取变量的值作为表达式的值，然后该变量再加1（减1）。  int i = 0;  此时i=0 先算i--表达式的值为0，然后i = i -1 = -1 再算右边第一个i++表达式的值为-1，然后i = i + 1 = 0 再算右边第二个i++表达式的值为0， 然后i = i + 1 = 1 再算i的值等于 1 printf("%d %d %d %d\n", i, i++, i++,i--); //输出 1 0  -1 0  此时i = 1，开始执行下一句。 先算i--表达式的值为1，然后i = 1 -1 =  0 再算右边第一个i++表达式的值为0，然后i = 0 + 1 = 1 再算右边第二个i++表达式的值为1， 然后i = 1+ 1 = 2 再算i的值等于 2 cout << i << " " << i++ << " " << i++ << " " << i-- << endl; //输出 2 1 0 1
user-0 提问: 文件读取乱码

回复:
user: user-1
content: 引用另外请检查scanf的返回值  怎么又来复制粘贴抢分~~，赵老师，手下留情。

user: user-2
content: c  读写文件注意事项比较多，二进制方式，流式，字符串识别等。

user: user-0
content: 这fscanf(fp,"%d %s %d %d %d %f"我改了以后，  p2=p2->node; 可以了，可还是乱码。

user: user-1
content: 引用就这2个  不能试图在输入时指定浮点数的精度，否则不能正确接收。 fscanf(fp,"%d %s %d %d %d %6.2f"  应为：  fscanf(fp,"%d %s %d %d %d %f"  使用scanf时也要注意这点。

user: user-3
content: printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方，而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。  在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。 //请今后要用 char c; scanf("%c",&c); //时，都改为 char s[2]; char c; scanf("%1s",s); c=s[0]; //自动跳过一个或多个空格或Tab字符或回车换行，读取下一个字符。
user-0 提问: 宏定义的意义

回复:
user: user-1
content: #与##在宏定义中的--宏展开 #include <stdio.h> #define f(a,b) a##b #define g(a)   #a #define h(a) g(a) int main() {         printf("%s\n", h(f(1,2)));   // 12         printf("%s\n", g(f(1,2))); // f(1,2)         return 0; } 宏展开时： 如果宏定义以#开头，不展开参数，直接替换。 故g(f(1,2))--->#f(1,2)--->"f(1,2)"； 如果宏定义不以#开头，展开参数，直接替换，由外层向里层，如果碰到的是#开头的宏，不继续往里层展开，往外层展开。 由外层向里层，如果碰到的是以非#开头的宏，继续往里层走，直至最里层，开始一层层往外层展开。 故h(f(1,2))--->h(12)--->g(12)---->#12----->"12"。 PS： ##在宏中定义，是字符连接符 如a##b##c 等同于 "abc" #在宏开头出现，是表示宏展开的方式不同 #a 等同于"a" #abc 等同于 "abc" 复杂的: #include <stdio.h> #define f(a,b) a##b #define g(a)   #a #define h(a) g(a) int main() {         char a = 'a';         cout<<g(a)<<endl; // a         cout<<g(g(a))<<endl; // a         printf("%s\n", h(f(1,2)));   // 12         printf("%s\n", g(f(1,2))); // f(1,2)         printf("%s\n", g(h(f(1,2)))); // h(f(1,2))         printf("%s\n", h(g(f(1,2)))); // "f(1,2)"         printf("%s\n", h(h(f(1,2)))); // "12"         system("pause");         return 0; } 预处理后的：（在编译选项中添加/EP /P后编译生成的.i文件。gcc加-E） int main() {         char a = 'a';         cout<<"a"<<endl;         cout<<"g(a)"<<endl;         printf("%s\n", "12");         printf("%s\n", "f(1,2)");         printf("%s\n", "h(f(1,2))");         printf("%s\n", "\"f(1,2)\"");         printf("%s\n", "\"12\"");         system("pause");         return 0; } --------------------------------------------------- 宏解析 1.       ##操作符 ##操作符它的作用是在替代表中将其前后的参数连接成为一个预处理符号，它不能出现于宏替代表的开端和末尾。 例： #define concat(s,t) s##t #define AAA ABC concat(A, AA) 将被替换成 ABC 2.       重新扫描和替换 在替换列表中的所有参数替换过之后，预处理器将对结果token序列重新扫描以便对其中的宏再次替换。 当正在替换的宏在其替换列表中发现自身时，就不再对其进行替换。在任何正在嵌套替换的宏的替换过程中遇到正被替换的宏就对其不再进行替换（防止递归）。 例： #define ROOT AAA CCC #define AAA ROOT ROOT 将被替换成 ROOT CCC

user: user-2
content: 看起来像是计算所使用的内存总数 table_mem，pair_mem这两个的类型是初始化为0的整形数？

user: user-3
content: 引用两个宏定义 宏分为无参宏和带参宏，题目中属于无参宏。 在预处理时，会将宏替换为字符串。 #define t   (table_mem)=(table_mem)+(sizeof(table)) //预处理时会将宏t替换为(table_mem)=(table_mem)+(sizeof(table))  t; //相当于(table_mem)=(table_mem)+(sizeof(table)); 后面有分号，是一行执行语句 (table_mem)=(table_mem)+(sizeof(table)); //这行具体什么功能要看table_mem和table怎么定义的，在其它代码中找找定义
user-0 提问: 非常神奇的一个c问题，全局和局部变量的问题，求大神！

回复:
user: user-1
content: printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方，而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。  在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。 //请今后要用 char c; scanf("%c",&c); //时，都改为 char s[2]; char c; scanf("%1s",s); c=s[0]; //自动跳过一个或多个空格或Tab字符或回车换行，读取下一个字符。

user: user-1
content: 理解和讨论之前请先学会如何观察！  计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 多用小脑和手，少用大脑、眼睛和嘴，会更快地学会编程！ 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步Debug版对应汇编一行！ 单步Debug版对应汇编千行不如单步Release版对应汇编一行！ 不会单步Release版对应汇编？在你想单步Release版C/C++代码片断的前面临时加一句DebugBreak();重建所有，然后在IDE中运行。（一般人我不告诉他！）  VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时候。  电脑内存或文件内容或传输内容只是一个一维二进制字节数组及其对应的二进制地址； 人脑才将电脑内存或文件内容或传输内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……  不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！

user: user-0
content: 我猜测 因为输入的是 %d 是有符号整形的 应该是 0000 0002 但是我的变量是 16位的 所以 第一个变量存的是 0000 第二个存的是0002 然后因为存的地址是连续的 第二个输入的时候 覆盖了第一个 一样的是0000 0002   然后vs可能是16位编译器 int 和 %d 是十六位的 所以就对上了 gcc是32位编译器，在局部变量时有优化 存的是16位的 全局没有优化 还是32位的 所以就没对上  纯粹猜测

user: user-2
content: %d是指针int类型的，四字节，不管你传入什么地址给它比如void* p，它都会强制转换为int *pp = (int*)p; 再对*pp赋值。 明显你的row,col是int16_t两字节的，会发生字节覆盖。 分别把row和col的地址打印出来就知道了。全局区和栈区地址顺序是反的。

user: user-3
content: 输入时候不要换行

user: user-0
content: 编译器用 gcc才有问题 用 vs没问题

user: user-0
content: 编译器用的gcc IDE是 codeblocks
user-0 提问: c语言问题 给出完整代码

回复:
user: user-1
content: #include<stdio.h> #define N 20 int Judge(int b[][N],int c[][N]); int main() {     int s[N][N],a[N][N];     int num,i,j,k,l,m,o;     scanf("%d",&num);     for(i = 0;i < num;i++)     {         for(j = 0;j < 3;j++)         {             for(k = 0;k < 3;k++)             {                 a[j][k] = 0;             }         }         for(j = 0;j < 3;j++)         {             for(k = 0;k < 3;k++)             {                 s[j][k] = 1;                 if(s[1][1]==1)                 {                     s[1][1]=0;                 }             }         }         for(l = 0;l < 8;l++)         {             scanf(" %d,%d",&m,&o);                 a[m][o] = 1;         }         if(Judge(s,a))         {             printf("YES\n");         }         else             printf("NO\n");     }     return 0; } int Judge(int b[][N],int c[][N]) {     int i,j;     for(i = 0;i < 3;i++)     {         for(j = 0;j < 3;j++)         {             if(i==1&&j==1)             {                 continue;             }             if(b[i][j]!=c[i][j])             {                 return 0;             }         }     }     return 1; }

user: user-2
content: 引用数据范围 坐等大神出现

user: user-1
user-0 提问: qsort 对结构体排序，编译不过，在线等！！！求指点！！！

回复:
user: user-1
content: 看看这样好不好：  typedef struct _In { ..... } In;   然后就可以用 In了

user: user-2
content: 编译不过 int main() { 	int n = 8; 	qsort(cow_x + 1, n, sizeof(cow_x), cmp); //除了全局变量的定义，其它执行语句必须放在函数体内，调用qsort这句要放到main函数体中 	return 0; }
user-0 提问: malloc动态分配内存问题

回复:
user: user-1
content: #define里不要加分号; 宏定义是等价替换，如果将等价替换到表达式里你就可以明白为什么不能加分号了

user: user-0
content: 谢谢细心的四楼，当然还有五楼~~贴吧还是大神多。

user: user-2
content: 晕，晚一步~

user: user-2
content: 引用就出错  找到原因了  #define LIST_INIT_SIZE 10; #define INCREASE_SIZE 2; 应修改为：  #define LIST_INIT_SIZE 10 #define INCREASE_SIZE 2

user: user-3
content: #define LIST_INIT_SIZE 10; #define INCREASE_SIZE 2; 多了分号导致替代的时候语法错误

user: user-0
content: 一楼：是的我手动敲错了c2-1.h，这个无关紧要 二楼：这个放在这应该没什么问题吧，定义的常量LIST_INIT_SIZE在c2-1文件之前就编译了，应该是能用的， L.listsize = LIST_INIT_SIZE;  这句用了就没错，只是在malloc中用就出错。

user: user-4
content: 把头文件bo2-1.h中的东西挪到.c中

user: user-2
content: 引用为什么 #include"C1.h" typedef int ElemType; #include "c2-1.h"  //找半天没找到c2-1.h这个文件，是否应该为c1-1.h #include "bo2-1.h" void main() {     SqList L;     InitList(L);     printf("List列表的内存大小为%d", L.listsize); }
user-0 提问: 求帮忙改错啊

回复:
user: user-0
content: 引用 1 楼 fight_in_dl 的回复:引用谢谢啦 修改后的代码： #include <stdio.h> #include <stdlib.h> #define A 18 struct node {     char book[18];     int number;     char publish;     char writer;     char time;     double p[18]; }stud[A];  int main() {     int i,j;     double t;     FILE*fp;     if ((fp = fopen("123.txt", "r+")) == NULL)     {         printf("cannot open file\n");         exit(0);     }     for (j=0;j<17;j++)         for (i=0;i<17-j;i++)             if (stud[i].p[i]>stud[i].p[i+1])             {                 t=stud[i].p[i];stud[i].p[i]=stud[i+1].p[i+1];stud[i+1].p[i+1]=t;             }     {         fread(&stud[i], sizeof(struct node),1,fp);         printf("%s %d %s %s %s %lf\n", stud[i].book,stud[i].number,stud[i].publish,stud[i].writer,stud[i].time,stud[i].p);     }     fclose(fp); return 0; }  说明： 1 原代码有的符号是中文输入状态下输入的，比如main后面的括号，不确定是粘贴排版的原因还是本来就输错了，总之小心些 2 修改后的代码编译通过，可以在这基础上调试修改，直到满足程序要求结果 运行出现错误 导致程序停止，，实在找不出错误

user: user-0
content: 运行的时候  出现了一个错误，导致程序停止， 实在找不出来

user: user-1
content: 引用谢谢啦 修改后的代码： #include <stdio.h> #include <stdlib.h> #define A 18 struct node { 	char book[18]; 	int number; 	char publish; 	char writer; 	char time; 	double p[18]; }stud[A];  int main() { 	int i,j; 	double t; 	FILE*fp; 	if ((fp = fopen("123.txt", "r+")) == NULL) 	{ 		printf("cannot open file\n"); 		exit(0); 	} 	for (i = 0; i < 17; i++) 		for (j = i + 1; j<18; j++) 			if (stud[i].p[i]>stud[i].p[j]) 			{ 				t = stud[i].p[i]; stud[i].p[i] = stud[i].p[j]; stud[i].p[j] = t; 			} 	{ 		fread(&stud[i], sizeof(struct node),1,fp); 		printf("%s %d %s %s %s %lf\n", stud[i].book, stud[i].number, stud[i].publish, stud[i].writer, stud[i].time, stud[i].p); 	} 	fclose(fp); return 0; } 说明： 1 原代码有的符号是中文输入状态下输入的，比如main后面的括号，不确定是粘贴排版的原因还是本来就输错了，总之小心些 2 修改后的代码编译通过，可以在这基础上调试修改，直到满足程序要求结果
user-0 提问: 从第十行就完全看不懂，感觉像没交换一样（c语言排列）

回复:
user: user-0
content: 不过谢谢你们

user: user-0
content: 其实我是被这里的i给搞晕了我以为i都是一样的。函数嵌套生成的i是不一样的吧

user: user-1
content: 在纸上自己模拟一下这个过程，就清楚了

user: user-2
content: 引用void swap(int * o, int i, int j) 如果是编译错误，请发一下错误说明。 如果编译是正确的，这个函数代码没有问题。  swap函数第一个参数接收的是数组首地址，属于传址调用，函数对形参数组的交换会影响实参数组。

user: user-2
content: 引用i是不一样的 每次调用perm函数s是不一样的。 for(i = s; i <= e; i++）//10  // i = s，s不一样，i也就不一样         {                           swap(list, s, i);                           perm(list, s + 1, e, cbk);  //再次调用perm函数时，s的值是原来的值+1                         swap(list, s, i);                  }
user-0 提问: 【C语言】如何实现将windows平台下的目录复制到另一个目录下

回复:
user: user-1
content: 搜robocopy

user: user-2
content: 引用 6 楼 sunrier 的回复:[quote=引用 5 楼 SXJIAKE 的回复:] /E     Copies directories and subdirectories, including empty ones.        Same as /S /E. May be used to modify /T. Hi，实践你的方法，不行哦，你可以自己试试哦，看来还没有更好的方法了。我现在的实现方法是可以的。就是感觉不简化。[/quote]测试了一下发现，原来 Windows 除了 move 之外，copy 和 xcopy 都不能把原目录自身拷贝到目标目录，只能从把原目录中的文件进行拷贝。这点和 Linux 的 cp、mv 略不同。Windows 的 copy 或 xcopy 来源写成 dir、dir\、dir\* 是一样的意义。而 Linux 系统的 cp 命令，如果来源只写目录名字 dir、dir/，就是连带目录一起拷贝。如果是 dir/* 则拷贝其中的文件，不拷贝来源目录本身。

user: user-0
content: 引用 5 楼 SXJIAKE 的回复:/E     Copies directories and subdirectories, including empty ones.        Same as /S /E. May be used to modify /T. Hi，实践你的方法，不行哦，你可以自己试试哦，看来还没有更好的方法了。我现在的实现方法是可以的。就是感觉不简化。

user: user-2
content: /E     Copies directories and subdirectories, including empty ones.        Same as /S /E. May be used to modify /T.

user: user-0
content: 引用 3 楼 SXJIAKE 的回复:set BASE=E:\Project1 xcopy "%BASE%\dir1" "%BASE%\dir3" /E /C /F /G /R /Y xcopy "%BASE%\dir2" "%BASE%\dir3" /E /C /F /G /R /Y copy "%BASE%\hello.c" "%BASE%\dir3" /Y Hi, 比如目录dir1,dir2下面没有文件，那么也需要把目录dir1,dir2拷贝到dir3下，不单单是dir1或dir2下面的文件。

user: user-2
content: set BASE=E:\Project1 xcopy "%BASE%\dir1" "%BASE%\dir3" /E /C /F /G /R /Y xcopy "%BASE%\dir2" "%BASE%\dir3" /E /C /F /G /R /Y copy "%BASE%\hello.c" "%BASE%\dir3" /Y

user: user-3
content: 打错一个字，不是复用资源浏览器， 是使用资源浏览器

user: user-3
content: 引用如果有批处理的方法 批处理相当于小程序，一般使用程序的原因是手工比较繁琐费时。 或者想实现可复用，比如换一个参数就能实现将目录1、目录3 、hello.c复制到目录2。  回到题目，第一个原因不存在，也就是点几个鼠标或者快捷键，并不麻烦。 如果是第二个原因，那怎么设计这个小程序呢，需要再给出更明确的需求说明。 输入参数设定成什么，能让程序知道是将目录1、目录3 、hello.c复制到目录2。 还是将目录1、目录2 、hello.c复制到目录3。 您仔细想想，其实设计这个小程序并不简单，当然，如果你能给出明确的规律，就容易了。  总结：单就这个题目而言，复用资源浏览器，选定、复制即可。           暂时没看出有写批处理(小程序)的必要。
user-0 提问: 小白求助，调试时 写入位置冲突。

回复:
user: user-0
content: 谢谢谢谢，问题是出在了scanf_s 这块儿 这里后面需要给出一个参数，以表示最多读取多少位字符。 正确格式应该是这样的： scanf_s("%s", name,40); 用逗号隔开.......

user: user-1
content: scanf_s("%s", name[39]); 如果想获取一个字符串，那么应该传入的是name  size = sizeof name; 这一句不应该是这样吗？  size = sizeof( name );

user: user-2
content: scanf_s("%s", name);

user: user-0
content: 清晨一顶~清晨一顶~

user: user-0
content: 顶顶顶顶顶顶顶顶顶顶顶顶~
user-0 提问: visual studio 2015修改"stdafx.h"头文件

回复:
user: user-1
content: 百度搜“stdafx.h”

user: user-0
content: 多谢指导，当时急晕了头，很多东西描述不好，删改后没能看出问题

user: user-2
content: 项目属性----- C/C++  ---------- 预处理器 ---------- 生成与处理文件  --- 否

user: user-0

user: user-3
content: 引用具体 想做什么事情，是怎么做的，期望结果是什么，实际结果是什么 这样描述问题感觉更清晰，也能帮助回答者迅速定位问题。  从图中看，文件名是s.h，没看到stdafx.h。 请检查一下是否因为这个原因导致
user-0 提问: VS里怎么设置属性管理器并保存？

回复:
user: user-0
content: 谢谢两位的回答

user: user-1
content: 引用没有保存下来  设置好属性表后，需要将其保存。 下面这篇博客有详细的操作步骤 http://www.cnblogs.com/douzi2/p/4229285.html

user: user-2
content: 视图、属性管理器 当前项目、Debug | Win32、Microsoft.Cpp.Win32.user、点鼠标右键、属性、…… 当前项目、Release | Win32、Microsoft.Cpp.Win32.user、点鼠标右键、属性、…… ？
user-0 提问: 八皇后

回复:
user: user-1
content: 仅供参考：#include <stdio.h> int d[8][8]; int n; void queen8(int L) {     int x,y;      if (8==L) {         n++;         printf("%d\n",n);         for (y=0;y<8;y++) {             for (x=0;x<8;x++) { //              printf("%d",d[y][x]);                 if (d[y][x]) printf("■");                 else         printf("□");             }             printf("\n");         }         return;     }     for (x=0;x<8;x++) {         for (y=0;y<L;y++) {             if  (              d[y][x      ]              || (x-(L-y)>=0 && d[y][x-(L-y)])              || (x+(L-y)< 8 && d[y][x+(L-y)]))                 break;         }         if (y>=L) {             d[L][x]=1;             queen8(L+1);             d[L][x]=0;         }     } } int main() {     int y,x;     for (y=0;y<8;y++) {         for (x=0;x<8;x++) {             d[y][x]=0;         }     }     queen8(0);     return 0; }
user-0 提问: 简单文件加解密，但是读不到文件，咋办？

回复:
user: user-1
content: 代码没有问题，应该是输入的文件名不存在导致的，确认一下输入文件即可，或者使用perror/strerror检测一下具体错误。  另外提一点，如果加密用的文件比较小，这个程序可能没有问题，但如果加密文件很大的话，那么尝试一次性读取所有文件内容肯定就要出问题了，请注意。

user: user-2
content: 同意楼上的观点 Windows10+VS2015测试没有问题，应该是输入的要加密的源文件不存在导致的 可以把对源文件的操作提前，这样就可以在输入源文件的路径后，就马上能够判断源文件是否存在， 	printf("请输入输入文件名：\n"); 	scanf_s("%s", src_filename,sizeof(src_filename)); 	FILE* fp = NULL; 	fopen_s(&fp, src_filename, "rb"); 	if (NULL == fp) 	{ 		printf("NO!"); 		return 0; 	} 	printf("请输入秘钥：\n"); 	scanf_s("%d", &key); 	printf("请输入输出文件名：\n"); 	scanf_s("%s", dst_filename,sizeof(dst_filename)); 	printf("请输入你需要的操作模式\n1.加密；\n2.解密；\n3.退出\n"); 	scanf_s("%d", &operate_flag);

user: user-3
content: 引用读不到文件 我上机测试代码没有问题。 注意src_filename应该接收正确的文件路径名，且该文件确实已经存在。 如下图，我电脑上之前就有d:\test.txt这个文件。   您可以对照检查一下。

user: user-4
content: 文件加密应该是对已存在的文件进行加密，malloc申请觉得没什么必要，这些申请是在内存上面申请空间，文件属于磁盘内容了。  ...................我也是菜鸟！自学中。。参考下下吧

user: user-5
content: fp=fopen(src_filename,"rb");制读二进制文件，所以要保证你的路径下有这个文件。
user-0 提问: 关于句柄

回复:
user: user-1
content: 引用pHandle是句柄 关于句柄的含义，推荐阅读 http://www.cnblogs.com/yellowyu/archive/2009/06/07/1497910.html  从语法角度来讲，句柄类似指针。 至于题目中pHandle怎么用，取决于这两个函数要实现什么功能，要对什么资源进行操作。

user: user-2
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-3
content: 资料有限，没法去猜测，还是问规定的人吧？问清楚为什么要这么设计，每个参数代表什么，函数功能是怎么样的？

user: user-4
content: 这个你最好问你的老师

user: user-0
content: 引用 1 楼 jianwen0529 的回复:这不是你自己定义的函数吗？  是的,这是老师给我写的,它说这是句柄,让我这样定义函数,但是我不知道它应该怎么用

user: user-5
content: 这不是你自己定义的函数吗？
user-0 提问: 为什么这里要有个（ret！=1）能解释下result的公式的思维

回复:
user: user-0
content: 好的谢谢你的帮助

user: user-1
content: ret = scanf("%d", &man); ret是接受scanf返回值，表示成功读入多少个值，这里仅仅读取一个值 ret != 1则说明读取失败（比如流发生错误，又如要接收一个int值，却给出了字符/字符串等）  公式那得看你程序是想做什么的
user-0 提问: C语言输出表格的问题

回复:
user: user-1
content: 仅供参考：#include <stdio.h> #include <time.h> #include <stdlib.h> #define MAXX 10 #define MAXY 10 void main() {     char MAP[MAXX][MAXY];     char str;     int x,y,z,f,n;      for (x=0;x<MAXX;x++) {         for (y=0;y<MAXY;y++) {             MAP[x][y]='.';         }     }      for (x=0;x<MAXX;x++) {         printf("\n");         for (y=0;y<MAXY;y++) {             printf("%c",MAP[x][y]);         }     }     printf("\n");      srand((unsigned) time(NULL)); RETRY:     x=0;y=0;str='A';MAP[x][y]=str;      for (str='B';str<='Z';str++) {         n=0;         f=1;         while (1) {             n++;             z=rand()%4;             switch (z) {                 case 0: if (y+1<MAXY && MAP[x  ][y+1]=='.') {y++;MAP[x][y]=str;f=0;} break;                 case 1: if (x+1<MAXX && MAP[x+1][y  ]=='.') {x++;MAP[x][y]=str;f=0;} break;                 case 2: if (y-1>0    && MAP[x  ][y-1]=='.') {y--;MAP[x][y]=str;f=0;} break;                 case 3: if (x-1>0    && MAP[x-1][y  ]=='.') {x--;MAP[x][y]=str;f=0;} break;             }             if (f==0) break;             if (n>200) {//钻入死胡同                 for (x=0;x<MAXX;x++) {                     for (y=0;y<MAXY;y++) {                         MAP[x][y]='.';                     }                 }                 goto RETRY;             }         }//while         if (x==MAXX-1 || y==MAXY-1) break;     }//for      for (x=0;x<MAXX;x++) {         printf("\n");         for (y=0;y<MAXY;y++) {             printf("%c",MAP[x][y]);         }     }     printf("\n"); }

user: user-2
content: 不能，自己先把格式组织起来（存储在另外的结构中，如果数据同时已知的可以按照你的方式交叉写入）
user-0 提问: 关于文件输入输出的问题，出现缓冲器溢出，希望大家帮我解答一下！

回复:
user: user-1
content: a的下标越界，要对下标做判断

user: user-2
content: 解答一下 数组越界访问，a数组大小为23，C语言中数组索引从0开始，这样最多到a[22] 		while ((fgets(s, 100, fp)) != NULL) { 			lines++;  //增加索引 			a[lines] = atoi(s); // 会执行a[23] = atoi(s)，超过a[22]，越界。 			if (lines == 23) { //当等于23时，才退出循环，不完全清楚你代码的逻辑，改成 == 22 试试? 				break; 			} 		}

user: user-0
content: 代码如上，发生错误缓冲区溢出。。。希望大家能帮我解答一下，最好是能帮我改一下！感激不尽！
user-0 提问: if条件不满足，但是进入分支执行

回复:
user: user-1
content: 引用找到原因了  学习了，谢谢~

user: user-0
content: 请教了一下前辈。找到原因了。原因是在未按下按键时，我在按键扫描程序里没有把键值清零。虽然key_flag_1按键标志清零了，下次按键已经附新键值，以为不会发生错误。但是没有考虑到可能在判断完(key_number == 4)满足后突然进入中断，之后key_flag_1在中断中被执1，此时不会再判断第一个条件。 解决办法 可以在按键程序里，没按键时键值清零； 可以在每个按键分支中清零； 可以把按键判断也放在中断中键值判断后执行。  印象中觉得这种情况不容易发生，结果概率挺高的样子。 而且感觉除了这个也没别的理由了。如果不是这个原因再补充。

user: user-0
content: 引用 2 楼 fight_in_dl 的回复:引用进入键值为1的分支 从物理角度讲，按键的按下和释放有耗时， 应该合理的设定时间间隔，以判断究竟是两次按键还是一次按键。目前测试发现，按第一个按键，间隔一段时间按第二个也会发生这个情况。而且按键程序在别的地方也正常使用。应该不是按键程序问题。

user: user-0
content: 可能是中断执行时间过长导致的吗？发生频率挺高，不过有时候也不会发生。

user: user-2
content: 其它地方被改写了？

user: user-1
content: 引用进入键值为1的分支 从物理角度讲，按键的按下和释放有耗时， 应该合理的设定时间间隔，以判断究竟是两次按键还是一次按键。
user-0 提问: 字符串的输入

回复:
user: user-1
content: 指向一个可用的空间，指针变量只能存放地址，你想要存放字符串，用什么空间来存放呢？

user: user-0
content: 为什么要关联，关联的作用是什么，是要获得分配的空间的吗

user: user-1
content: #include <stdio.h> int main() {     char *buf=NULL;//定义初始化     char a[100]={0};     buf=a;//关联，绑定变量     scanf("%s",buf);//使用     printf("%s\n",buf);//使用     return 0; }   这样就可以了

user: user-0
content: 你的意思是这样吗 char name[10]; scanf("%s",name); char *s=name;

user: user-1
content: 3步：定义，关联，使用，你这没有关联吧

user: user-2
content: char name[32]; scanf("%s",name);

user: user-3
content: 引用这为什么不行 C/C++语言中，NULL宏定义如下：  #define NULL 0 地址为0的内存空间，用户没有权限访问。  正确的使用方式有两种: 1  	char ab[10]; //数组名ab为字符数组的首地址 	char *name = ab; //初始化name指针，name与ab指向同一个合法地址 	scanf("%s", name); 2 	char *name = (char*)malloc(10); //动态申请内存空间 	scanf("%s", name);
user-0 提问: C语言读取文件某些特定字符串的问题

回复:
user: user-1

user: user-2
content: 仅供参考：//NAME: essaie bla bla //DIMENSION: 8 //DATA //1  14  15 //2  11  10 //3  6   4 //4  7   13 //5  9   21 //6  19  3 //7  1   5 //8  8   8 //EOF // // 文本文件中可能还含有其他内容，但是需要用到的内容即以上  //比如data.txt: //NAME: essaie bla bla //其它内容 //DIMENSION: 8 //其它内容 //DATA //其它内容 //1  14  15 //其它内容 //2  11  10 //其它内容 //3  6   4 //其它内容 //4  7   13 //其它内容 //5  9   21 //其它内容 //6  19  3 //其它内容 //7  1   5 //其它内容 //8  8   8 //其它内容 //EOF  // 目标是要获取NAME后字串，DIMENSION后数值，以及DATA以下的数值 // 其中NAME就是随便个字句，DIMENSION是城市数量，DATA以下是城市编号，X坐标，Y坐标 // 所有的这些将赋值给一个事先定义好的结构 #include <stdio.h> #include <string.h> #define MAXCPL   80   //每行最大字符数 #define MAXCITY  100  //每组数据中DATA最多项数，DIMENSION的最大值 #define MAXNAMEL 32   //NAME最大长度 struct S {     char NAME[MAXNAMEL+1];     int  DIMENSION;     struct D {         int NO;         int X;         int Y;     } DATA[MAXCITY]; } s; FILE *f; int st,n,i; char ln[MAXCPL]; int main() {     f=fopen("data.txt","r");     if (NULL==f) {         printf("Can not open file data.txt!\n");         return 1;     }     st=0;     n=0;     while (1) {         if (NULL==fgets(ln,MAXCPL,f)) break;         if (st==0) {             if (1==sscanf(ln,"NAME: %31[^\n]",s.NAME)) st=1;         } else if (st==1) {             if (1==sscanf(ln,"DIMENSION: %d",&s.DIMENSION)) st=2;         } else if (st==2) {             if (0==strcmp(ln,"DATA\n")) st=3;         } else if (st==3) {             if (3==sscanf(ln,"%d%d%d",&s.DATA[n].NO,&s.DATA[n].X,&s.DATA[n].Y)) {                 n++;                 if (n>=MAXCITY || n>=s.DIMENSION) break;             }         }     }     fclose(f);     printf("s.NAME=[%s]\n",s.NAME);     printf("s.DIMENSION=%d\n",s.DIMENSION);     for (i=0;i<n;i++) {         printf("s.DATA[%d].NO,X,Y=%d,%d,%d\n",i,s.DATA[i].NO,s.DATA[i].X,s.DATA[i].Y);     }     return 0; } //s.NAME=[essaie bla bla] //s.DIMENSION=8 //s.DATA[0].NO,X,Y=1,14,15 //s.DATA[1].NO,X,Y=2,11,10 //s.DATA[2].NO,X,Y=3,6,4 //s.DATA[3].NO,X,Y=4,7,13 //s.DATA[4].NO,X,Y=5,9,21 //s.DATA[5].NO,X,Y=6,19,3 //s.DATA[6].NO,X,Y=7,1,5 //s.DATA[7].NO,X,Y=8,8,8

user: user-3
content: 用c语言这样做已经很不错了，更好的办法是不用c语言，比如awk(当然只有linux下才有用)
user-0 提问: 小白请教编程大牛

回复:
user: user-1
content: 百度一下，就有代码

user: user-2
content: 引用并记录所经过的节点  可以参考： http://download.csdn.net/detail/dcmengqiuyang/6838167 输入输出格式这部分可能和你的需求有差异，但关键逻辑代码应该能用上。
user-0 提问: 求助，编写文本挖掘的编程用于毕业论文，付费！搜索词语在一篇word文档中是否出现，出现为1，没出现为0，最后结果显示在excel里。

回复:
user: user-1
content: 举例说明：A公司只提供循环泵    B公司只提供启动器。  如果搜索A公司，是有的，搜索启动器也是有的，那么  A公司 启动器  【都可以搜到】应该显示1. 同理：B公司 和循环泵也是应该出现的。  综上，需求非常不明确，无法编程实现。除非能将需求进一步细化【如：从同一行数据里面提取】

user: user-2
content: 引用 2 楼 qq_39543148 的回复:我没学过编程，如果可以的话，能不能麻烦帮我编写。谢谢了 有偿提供帮助。QQ见我的个人资料。

user: user-3
content: C# 一天即可，你可以网上搜索相关的操作

user: user-0
content: 我没学过编程，如果可以的话，能不能麻烦帮我编写。谢谢了
user-0 提问: 求助 c程序设计语言上一个关于空间分配的函数不懂，求老司机带带

回复:
user: user-1
content: 你猜得对。它记录数组首地址，以后内存分配时，就返回该该地址，然后将该指针往后移动标志未使用内存的首地址。释放内存的时候该指针往前移。
user-0 提问: 用线性链表对一个文档中的数据进行提取，跑程序的时候发现有个大问题...求高人指点！

回复:
user: user-0
content: 引用 3 楼 user-1 的回复:[quote=引用 2 楼 github_39501974 的回复:] [quote=引用 1 楼 user-1 的回复:] 得到行数后，rewind一下，再fscanf 刚试了 的确OK了！ 我再多请教一个问题：我如果要对链表里的数据进行升序排序并只输出前10个 这个该怎么做呢？[/quote] 链表排序网上搜，一大堆方法。只输出前10个应该好办，遍历时计一下数就行。 [/quote]  已解决 感谢！

user: user-1
content: 引用 2 楼 github_39501974 的回复:[quote=引用 1 楼 user-1 的回复:] 得到行数后，rewind一下，再fscanf 刚试了 的确OK了！ 我再多请教一个问题：我如果要对链表里的数据进行升序排序并只输出前10个 这个该怎么做呢？[/quote] 链表排序网上搜，一大堆方法。只输出前10个应该好办，遍历时计一下数就行。

user: user-0
content: 引用 1 楼 user-1 的回复:得到行数后，rewind一下，再fscanf 刚试了 的确OK了！ 我再多请教一个问题：我如果要对链表里的数据进行升序排序并只输出前10个 这个该怎么做呢？

user: user-1
content: 得到行数后，rewind一下，再fscanf
user-0 提问: 关于参数的入栈和自增

回复:
user: user-1
content: 引用 7 楼 yirol_ 的回复:[quote=引用 1 楼 lin5161678 的回复:] 代码错了 这是未定义行为  编译器处理方式无法确定 有多种不同输出 没有意义    这个应该是和编译器有关系。我用的是gcc[/quote]  这个跟ABI有关，编译器是按照ABI来实现，如果ABI未定义或者定义不清晰，不同编译器会有不同处理方式。但是像函数入栈顺序，这个肯定ABI定义的很清楚

user: user-2
content: http://edu.csdn.net/course/detail/2344 C语言指针与汇编内存地址-一.代码要素

user: user-3
content: 引用 6 楼 wang0635 的回复:谁说“参数是从右向左入栈的”？你的意思是从左向右？

user: user-4
content: 这个跟编译器有关，能看反汇编的话去看看，反正VC6存的都是0

user: user-5
content: 这样的问题不值得研究，这样的代码没有实用价值，工作中不能用，如果你常写出这样的代码，或许你离下岗只有半步之遥了。

user: user-6
content: 这个跟printf进栈出栈的顺序有关

user: user-7
content: 因为你直接调用库输里面的标准出函数printf(),你根本不知道在库函数printf()里面他是按什么顺序处理这些运算的，所以出来的结果是无法预知的。如果你要实现显示自增的数值，建议规范代码的书写格式，例如： int main() {   int a = 0;   int b,c,d;   b = a++;   c = a++;   d = ++a;   printf("%d,%d,%d",b,c,d);   / /出来的结果就是0,1,3  }

user: user-2
content: 关于C,C++表达式求值顺序 http://blog.csdn.net/fefe82/article/details/37833767，http://bbs.csdn.net/topics/370153775

user: user-8
content: 引用 7 楼 yirol_ 的回复:这个应该是和编译器有关系。我用的是gcc代码错了 你用什么编译器都一样  gcc 一样有不同的运行结果  你开优化看看

user: user-9
content: 引用 8 楼 yirol_ 的回复:[quote=引用 5 楼 baidu_37097818 的回复:] 旁边如果真有人这么写就会被我打一顿  一般情况下肯定不能这么写，我只是想知道这里是怎么样的？[/quote] 怎么样都可能。

user: user-10
content: 未定义行为，后期还有优化行为，全是0 0 0 0 0 ，或者全部 5 5 5 5 都可能

user: user-0
content: 引用 5 楼 baidu_37097818 的回复:旁边如果真有人这么写就会被我打一顿  一般情况下肯定不能这么写，我只是想知道这里是怎么样的？

user: user-0
content: 引用 1 楼 lin5161678 的回复:代码错了 这是未定义行为  编译器处理方式无法确定 有多种不同输出 没有意义    这个应该是和编译器有关系。我用的是gcc

user: user-9
content: 谁说“参数是从右向左入栈的”？

user: user-11
content: 旁边如果真有人这么写就会被我打一顿

user: user-12
content: 这个练不出水平，感觉

user: user-13
content: 还是要尽量规范的写

user: user-8

user: user-8
content: 代码错了 这是未定义行为  编译器处理方式无法确定 有多种不同输出 没有意义
user-0 提问: 新手求助，有关同步读取和异步读取的问题

回复:
user: user-1
content: 引用 1 楼 lian34jian 的回复:刚刚试了一次，明白了，用同步的话read会一直拿着HANDLE 造成死锁？不知道这叫不叫死锁，反正就是read一直在等待，然后write拿不到HANDLE也完成不了  是死锁

user: user-2
content: 同步 可能 阻塞 ， 异步不会阻塞。直接返回。

user: user-3
content: 楼主可以继续看看关于自旋锁、信号量等相关内容。

user: user-0
content: 刚刚试了一次，明白了，用同步的话read会一直拿着HANDLE 造成死锁？不知道这叫不叫死锁，反正就是read一直在等待，然后write拿不到HANDLE也完成不了
user-0 提问: C语言 初学者

回复:
user: user-0
content: 引用 8 楼 u010165006 的回复:[quote=引用 5 楼 qq_39513318 的回复:] [quote=引用 4 楼 u010165006 的回复:] 打开文件，读取每一行到字符数组，如果数组是以;号开头的，略过，否则，把该行写到输出文件。   能贴个代码看看吗[/quote]  这个自己写吧，不懂翻书，文件读写、字符串数组会操作就差不多了。[/quote]  行 谢谢大神

user: user-1
content: 引用 5 楼 qq_39513318 的回复:[quote=引用 4 楼 u010165006 的回复:] 打开文件，读取每一行到字符数组，如果数组是以;号开头的，略过，否则，把该行写到输出文件。   能贴个代码看看吗[/quote]  这个自己写吧，不懂翻书，文件读写、字符串数组会操作就差不多了。

user: user-0
content: 引用 3 楼 baidu_37097818 的回复:用fstream文件流吧, 然后读取到string中  不太懂哎

user: user-0
content: 引用 2 楼 xfdf1987 的回复:C处理这类字符串问题不是强项，条件允许的话，楼主考虑脚本。   老师让用C语言

user: user-0
content: 引用 4 楼 u010165006 的回复:打开文件，读取每一行到字符数组，如果数组是以;号开头的，略过，否则，把该行写到输出文件。   能贴个代码看看吗

user: user-1
content: 打开文件，读取每一行到字符数组，如果数组是以;号开头的，略过，否则，把该行写到输出文件。

user: user-2
content: 用fstream文件流吧, 然后读取到string中

user: user-3
content: C处理这类字符串问题不是强项，条件允许的话，楼主考虑脚本。

user: user-4
content: 用fgets函数读取内容，然后用strcmp函数作比较，相等的再写入指定文件。
user-0 提问: 请教大神我这样简单的操作文件，出错了，

回复:
user: user-0
content: 谢谢大家了，是我太粗心了，fopen 没有写

user: user-1
content: fopen都没有写，当然不对了。要细心了

user: user-0
content: 我没有把文件设置为只读

user: user-2
content: 代码本机试了没有问题。应该是文件被占用之类的

user: user-3
content: 引用访问冲突 fopen应该是排版的问题没显示。  检查一下文件的属性是否设置为 只读

user: user-4
content: 没写fopen么？还是没贴
user-0 提问: BOOL

回复:
user: user-1
content: 仅供参考：#include <stdio.h> #pragma pack(push,1) union U {     unsigned char byte;     struct BF {         unsigned int b0:1;//a         unsigned int b1:1;//b         unsigned int b2:1;//c     } bf; } u; #pragma pack(pop) unsigned char bt; int a,b,c; int main() {     for (bt=0;bt<8;bt++) {         u.byte=(unsigned char)bt;         a=u.bf.b0;         b=u.bf.b1;         c=u.bf.b2;         printf("byte 0x%02x -- c:%d b:%d a:%d\n",bt,c,b,a);     }     for (c=0;c<2;c++)     for (b=0;b<2;b++)     for (a=0;a<2;a++) {         u.bf.b0=a;         u.bf.b1=b;         u.bf.b2=c;         bt=u.byte;         printf("c:%d b:%d a:%d -- byte 0x%02x\n",c,b,a,bt);     }     return 0; } //byte 0x00 -- c:0 b:0 a:0 //byte 0x01 -- c:0 b:0 a:1 //byte 0x02 -- c:0 b:1 a:0 //byte 0x03 -- c:0 b:1 a:1 //byte 0x04 -- c:1 b:0 a:0 //byte 0x05 -- c:1 b:0 a:1 //byte 0x06 -- c:1 b:1 a:0 //byte 0x07 -- c:1 b:1 a:1 //c:0 b:0 a:0 -- byte 0x00 //c:0 b:0 a:1 -- byte 0x01 //c:0 b:1 a:0 -- byte 0x02 //c:0 b:1 a:1 -- byte 0x03 //c:1 b:0 a:0 -- byte 0x04 //c:1 b:0 a:1 -- byte 0x05 //c:1 b:1 a:0 -- byte 0x06 //c:1 b:1 a:1 -- byte 0x07

user: user-2
content: 你看一下sizeof( box_props)
user-0 提问: 函数调用的bug

回复:
user: user-0
content: 问题找到了，原因在和这个函数很远的地方。 某处调用了一个返回值是double的Ind函数，但是这个Ind函数的头文件未被调用方包含 ，所以编译器当做返回int处理了。然后就导致了这个bug…… 至于为什么会影响到这个Raise函数，我还需要再看看。

user: user-0
content: 引用 1 楼 xfdf1987 的回复:问题不一定在函数本身，楼主可以试试传指针 我比较想知道问题出在哪儿，换指针的目的是什么啊？

user: user-1
content: 问题不一定在函数本身，楼主可以试试传指针
user-0 提问: 关于FILE *型指针

回复:
user: user-1
content: 引用如何记录这个位置  除了文件指针外，还有一个隐含的 文件位置指针。 文件指针与物理文件关联。 文件位置指针是指文件打开之后，在文件内部进行移动的指针。 fread,fwrite,fgets,fputs,rewind等函数运行后，都有可能会改变文件位置指针的值。  可以参考： http://blog.csdn.net/chenglibin1988/article/details/8750906  各个函数如何改变文件位置指针，可以查阅该函数的MSDN文档说明。

user: user-0
content: 引用 1 楼 user-3 的回复:只有没有fclose就有FILE帮你记着位置，你不需要记。你想看看位置是多少，可以用ftell函数 谢谢,我知道了

user: user-2
content: 楼上正解！！！！！！

user: user-3
content: 只有没有fclose就有FILE帮你记着位置，你不需要记。你想看看位置是多少，可以用ftell函数
user-0 提问: 求大神帮忙解决这个问题

回复:
user: user-1
content: 引用 6 楼 qq_38046111 的回复:[quote=引用 5 楼 jianwen0529 的回复:] [quote=引用 3 楼 qq_38046111 的回复:] [quote=引用 2 楼 jianwen0529 的回复:] C#接口的泛型编程 请问上面的TOutput表示的是输出的类型吗？ [/quote] 模板参数 你先网上搜索有关C#的泛型编程的一些资料看看你就明白了[/quote] 我看到网上的没有加out。然后我这里如果不加out也是不会报错的、加了out就报错了。[/quote] 这不是已经提示错误了么，接口不能使用out

user: user-0
content: 引用 5 楼 jianwen0529 的回复:[quote=引用 3 楼 qq_38046111 的回复:] [quote=引用 2 楼 jianwen0529 的回复:] C#接口的泛型编程 请问上面的TOutput表示的是输出的类型吗？ [/quote] 模板参数 你先网上搜索有关C#的泛型编程的一些资料看看你就明白了[/quote] 我看到网上的没有加out。然后我这里如果不加out也是不会报错的、加了out就报错了。

user: user-1
content: 引用 3 楼 qq_38046111 的回复:[quote=引用 2 楼 jianwen0529 的回复:] C#接口的泛型编程 请问上面的TOutput表示的是输出的类型吗？ [/quote] 模板参数 你先网上搜索有关C#的泛型编程的一些资料看看你就明白了

user: user-0
content: 我这里应该要如何写

user: user-0
content: 引用 2 楼 jianwen0529 的回复:C#接口的泛型编程 请问上面的TOutput表示的是输出的类型吗？

user: user-1
content: C#接口的泛型编程

user: user-0
content: 这是语法的问题还是什么问题、我这是copy别人的
user-0 提问: 结构体的问题总是（输出打印素数）基本样式a+bi如果a=0输出bi如果b=0输出a

回复:
user: user-1
content: 修改后的代码如下，关键处有注释。  #include<stdio.h> #include<stdlib.h>  struct complex_struct { 	int x; 	int y; }; struct complex_struct  make_complex_struct(int x, int y) { 	struct complex_struct z; 	z.x = x; 	z.y = y; 	return z; }; int real_part(struct complex_struct z) {//返回值类型应为int 	return z.x; }; int img_part(struct complex_struct z) {//返回值类型应为int 	return z.y; }; void print_complex_struct(int x, int y) {//调整if/else分支判断顺序 	if (x == 0 && y == 0){ 		printf("error"); 	}  	else if(x == 0){ 		printf("%di", img_part(make_complex_struct(x, y))); 	} 	else if(y == 0) { 		printf("%d", real_part(make_complex_struct(x, y))); 	} 	else { 		printf("%d+%di\n", real_part(make_complex_struct(x, y)), img_part(make_complex_struct(x, y))); 	}  }; int main() { 	print_complex_struct(0, 0); 	system("pause"); 	return 0; }
user-0 提问: 为什么参加计算机竞赛的人大多数使用的语言都是c++？

回复:
user: user-1
content: 已经工作了的人没有兴趣去参加比赛。

user: user-1
content: 因为刚开始学都是从c和c++开始的，这两门最熟悉，并且效率高

user: user-2
content: 如果是算法题，一般都讲效率，c为上，如果有面向对象方面，自然c++。java只不过是使用人多，他们也大多不会c而已。

user: user-3
content: 引用C语言不是更加适合竞赛的环境吗  计算机竞赛肯定支持使用C语言。 一些竞赛题解使用C++/Java，很大概率的原因是回答者对C++/Java语言更为熟悉。  至于效率倒不用担心，因为语言导致的时间复杂度、空间复杂度的差异，完全在允许范围之内。 只要解法满足理论复杂度，不会因为使用语言不同而被卡。  有的时候，也会在题目中对使用Java语言给出放宽，类似这样的说明： Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)  楼主会C语言，花点时间学习基本语法，看懂类似的C++竞赛程序答案应该没有问题。