Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 使用gdb如何单步c程序对应的汇编指令?

回复:
user: user-1
content: 应该是 i 吧  ..

user: user-2
content: layout：用于分割窗口，可以一边查看代码，一边测试： layout src：显示源代码窗口 layout asm：显示反汇编窗口 layout regs：显示源代码/反汇编和CPU寄存器窗口 layout split：显示源代码和反汇编窗口

user: user-2
content: layout regs：显示源代码/反汇编和CPU寄存器窗口

user: user-2
content: 10. 查看寄存器 要查看寄存器的值，很简单，可以使用如下命令： info registers 查看寄存器的情况(除了浮点寄存器)。 info all-registers 查看所有寄存器的情况(包括浮点寄存器)。 info registers <regname ...> 查看所指定的寄存器的情况。 寄存器中放置了程序运行时的数据，比如程序当前运行的指令地址(ip)，程序的当前堆栈地址(sp)等。同样可以使用print命令来访问寄存器的情况，只需要在寄存器名字前加一个$符号就可以了，如p。

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:layout：用于分割窗口，可以一边查看代码，一边测试： layout src：显示源代码窗口 layout asm：显示反汇编窗口 layout regs：显示源代码/反汇编和CPU寄存器窗口 layout split：显示源代码和反汇编窗口  能否同时显示源代码和寄存器窗口? 好像用layout调整的时候，要么显示源码，要么显示寄存器，只有反汇编的窗口不被覆盖。 还请指点!
user-0 提问: 将给定的数转换为字符串，原则如下，1对应a,2对应b,...26对应z,例如12258可以转换为'abbeh','aveh'

回复:
user: user-1
content: 动态规划：https://blog.csdn.net/jingjingxiazhe/article/details/88287107

user: user-1
content: 动态规划：https://blog.csdn.net/jingjingxiazhe/article/details/88287107

user: user-2
content: 会做但真不想帮伸手党贴代码。  题目要求的是个数，可以用动态规划做，非常简单。

user: user-3
content: #include <stdio.h> int main(){  	char ch,*p; 	char chs[26]; 	int i; 	int k=0; 	for(i=97;i<=122;i++){ 		chs[k]=i; 		k++; 	} 		 	p=chs; 	printf("%c",*(p+3));     return 0; }    自己加个循环改下就可以了

user: user-4
content: 仅供参考：#include <stdio.h> #include <string.h> char *a="abcde"; int L,i,j,k; void main() {     L=strlen(a);     for (i=1;i<=L;i++) {         for (j=0;j<=L-i;j++) {             for (k=j;k<j+i;k++) {                 printf("%c",a[k]);             }             printf("\n");         }     } }

user: user-5
content: 你有没有做出来~同问呀~

user: user-0
content: z写错了。。。。。大哥帮帮忙 啊  想了一下午

user: user-4
content: 逻辑有问题： 26到底对应bf还是对应z？

user: user-6
content: 将一个数字依次对10取模、除10 得到每一位的数字，然后将这个数字 + 'a' -1 得到对应的字符，重组得到字符串

user: user-0
content: 求大神啊！！！！！！！！！！！！！！！！！！锐捷笔记
user-0 提问: 算法请教，根据2组互斥对，找出一个数组使得和每组互斥对的交集为1

回复:
user: user-1
content: 比如你的例子有 (1 8 21 24 32 42 50 58) (1 14 17 28 37 46 53 60) 两组解。

user: user-1
content: 解并不唯一。

user: user-2
content: 穷举？毕竟也就穷举 2^n 个（逃  不过这样看来，整个穷举过程是个二叉树，应该能用一些剪枝的技巧
user-0 提问: 如果有同名变量的话，代码块内部的子代码块，用的是全局变量还是局部变量？

回复:
user: user-1
content: 说实话哈，有这个时间问不如自己想办一个办法，验证自己的猜测。--我的方法：取地址。你在main的开头输出全局a的地址 int a; int main() { cout<<&a<<endl;  for() { int a; cout<<&a<<endl;   //我用直觉法也感觉这个a是局部的。。 } }  看看两个地址一不一样不就知道是局部还是全局的啦。

user: user-2
content: 看编译器以及实现的标准  C89 肯定是局部变量覆盖全局变量且没有办法访问全局变量（至少我不知道），你这段程序在C89编译器上也编译不过，不能在for那里声明变量。  VS2010部分支持C99，GCC部分支持C99,C10，你的代码可以编译过，但是不支持 ::符号，所以还是无法访问全局变量  当然，你如果用.cpp作为后缀，用C++的编译器来编译，应该可以使用::来访问全局变量。

user: user-3
content: 用的是局部变量，此时可以用::a来表示全局变量

user: user-4
content: 看你内层有没有同名变量，有的话使用的就是内层的变量

user: user-0
content: 引用 3 楼 qq423399099 的回复:如果使用同名标识符，具有内层作用域的标识符会覆盖外层作用域的标识符。       当一局部变量和一全局变量同名时，所有对变量名的 引用都会指向局部变量，此时，如果使用全局变量，就要用作用域解析符：：来限定变量（就是说通知编译器）  可我现在使用这个变量时，是在更内层的子代码块。也是用的外层定义的局部变量吗？

user: user-4
content: 如果使用同名标识符，具有内层作用域的标识符会覆盖外层作用域的标识符。     当一局部变量和一全局变量同名时，所有对变量名的 引用都会指向局部变量，此时，如果使用全局变量，就要用作用域解析符：：来限定变量（就是说通知编译器）

user: user-5
content: 不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！  不要写连自己也预测不了结果的代码！

user: user-6
content: 是局部变量a 。
user-0 提问: 指针的减法有编译错误,提示转型是非法的。

回复:
user: user-1
content: 可以转换，没问题  不过更好的是转换成INT_PTR，否则如果是64位程序，可能会超出int范围

user: user-2
content: unsigned? long?

user: user-3
content: 是可以的吧，你用的什么编译器？
user-0 提问: 如何通过文件中的数据，直接产生结果数据

回复:
user: user-0
content: 恩。 不是很理解    能否再详细一下？ 谢谢

user: user-1
content: 输入重写向到，可以用文件中的数据做为输入

user: user-2
content: close之后再open不行吗？
user-0 提问: 小白学c

回复:
user: user-1
content: 1.printf那句多了一个双引号 2.delta > 0的条件里面，其中一个x2写成了x1 3.else后面不要跟条件  #include<stdio.h> #include<math.h> int main() { 	int a, b, c; 	double x1, x2, delta; 	printf("输入a, b, c\n"); 	scanf("%d,%d,%d", &a, &b, &c); 	delta = (double)b*b - 4 * a*c; 	if (delta > 0) 	{ 		x1 = (-b + sqrt(delta)) / (2 * a); 		x2 = (-b - sqrt(delta)) / (2 * a); 		printf("%f,%f\n", x1, x2); 	} 	else if (delta == 0) 	{ 		x1 = -b / 2 * a; 		x2 = x1; 		printf("%f,%f\n", x1, x2); 	} 	else 	{ 		printf("无解\n"); 	} 	return 0; }

user: user-2
content: else (delta<0) else后边不能有条件表达式，去掉就行了

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

user: user-0
content: 附上程序  #include<stdio.h> #include<math.h> int main() { 	int a,b,c; 	double x1,x2,delta; 	printf(“输入a,b,c”\n");     scanf("%d,%d,%d",&a,&b,&c);     delta=(double)b*b-4*a*c; 	if(delta>0) 	{          x1=(-b+sqrt(delta))/(2*a);          x1=(-b-sqrt(delta))/(2*a); 	 printf("%f,%f\n",x1,x2); 	}      else if(delta==0) 	{ 		x1=-b/2*a; 		x2=x1;                 printf("%f,%f\n",x1,x2); 	} 	 else (delta<0) */错误指向这里*/{   		                   printf("无解\n"); 	          }      return 0; }
user-0 提问: 请教下FORK（） 问题

回复:
user: user-1
content: fork 会让一个进程变成两个，相当于把正在运行的程序复制了一份。但是，在这两个进程里fork的返回值是不一样的。

user: user-0
content: 能具体点么，3楼的

user: user-2
content: fork在子进程中返回0，不是他的pid

user: user-3
content: 搜“linux fork”？ 搜“毛德操 进程调度”？
user-0 提问: lex能否表达"不包含某个字串"或者"匹配的优先级"?

回复:
user: user-1
content: 引用 5 楼 piweur 的回复:[quote=引用 3 楼 zhao4zhong1 的回复:] 提醒：正则表达式不是万能的；有限状态自动机是万能的。 参考《编译原理》中的词法分析和有限状态自动机。  你的意思是说，对于我的需求而言，lex已经不行了，必须要yacc/bison上场了，是吗?[/quote] 其实我lex+yacc和flex+bison都没研究过。只听说它们是开源的从文法自动生成词法分析/语法分析代码的工具软件。 你的问题还得具体搜相关真正弄过的前辈的博文……

user: user-0
content: 引用 3 楼 zhao4zhong1 的回复:提醒：正则表达式不是万能的；有限状态自动机是万能的。 参考《编译原理》中的词法分析和有限状态自动机。  你的意思是说，对于我的需求而言，lex已经不行了，必须要yacc/bison上场了，是吗?

user: user-2
content: lex可以将12作为一个整体对待么比如(12)这样写的话

user: user-1
content: 提醒：正则表达式不是万能的；有限状态自动机是万能的。 参考《编译原理》中的词法分析和有限状态自动机。

user: user-0
content: 引用 1 楼 user-2 的回复:如果你把0-9加到第三个式子里面是什么情况。还有救是lex的正则方式有没有说把几个字符作为整体对待的书写方式呢？  我尝试了一下，不行:  $ cat d.l %{ #include<stdio.h> %} %% 12 {printf("head\n");} 34 {printf("tail\n");} [A-Za-z0-9]*  {printf("content\n");} %%  编译运行:  $ lex d.l && gcc lex.yy.c -ll a@a-VirtualBox:~/compile$ echo "12dfas2sdf3awer34"|a.out content   还是一个贪婪匹配。没有达到我的要求。

user: user-2
content: 如果你把0-9加到第三个式子里面是什么情况。还有救是lex的正则方式有没有说把几个字符作为整体对待的书写方式呢？
user-0 提问: 自学C语言时，关于.0的

回复:
user: user-0
content: 引用 2 楼 YXTS122 的回复:unsigned int i;c语言定义变量i一定要放在块的开头，要是c++，你这样写就不会报错 谢谢，谢谢

user: user-0
content: 引用 4 楼 paschen 的回复:意思是错了，没有这种关键字 谢谢，综合上面的关键字的构成，和“”错了“”，我知道为什么了

user: user-1
content: 意思是错了，没有这种关键字

user: user-2
content: c语言变量命名： 数字、字母、下划线，都可以为变量命名。 做为变量名的开头不能为数字，如 3a_是错的，而a_3或_a3是正确 变量名不能为关键字，像if'else'printf 等等都不能

user: user-3
content: unsigned int i;c语言定义变量i一定要放在块的开头，要是c++，你这样写就不会报错

user: user-4
content: c语言标识符只能由字母，数字和下滑线组成
user-0 提问: 在一个.mat文件中存放着MATLAB的三维数组，如何用C写出来存放在一个三维数组中

回复:
user: user-1
content: 仅供参考：//在堆中开辟一个3×4×5的3维int数组 #include <stdio.h> #include <malloc.h> int ***p; int i,j,k; void main() {     p=(int ***)malloc(3*sizeof(int **));     if (NULL==p) return;     for (i=0;i<3;i++) {         p[i]=(int **)malloc(4*sizeof(int *));         if (NULL==p[i]) return;         for (j=0;j<4;j++) {             p[i][j]=(int *)malloc(5*sizeof(int));             if (NULL==p[i][j]) return;         }     }     for (i=0;i<3;i++) {         for (j=0;j<4;j++) {             for (k=0;k<5;k++) {                 p[i][j][k]=i*20+j*5+k;             }         }     }     for (i=0;i<3;i++) {         for (j=0;j<4;j++) {             for (k=0;k<5;k++) {                 printf(" %2d",p[i][j][k]);             }             printf("\n");         }         printf("---------------\n");     }     for (i=0;i<3;i++) {         for (j=0;j<4;j++) {             free(p[i][j]);         }         free(p[i]);     }     free(p); } //  0  1  2  3  4 //  5  6  7  8  9 // 10 11 12 13 14 // 15 16 17 18 19 //--------------- // 20 21 22 23 24 // 25 26 27 28 29 // 30 31 32 33 34 // 35 36 37 38 39 //--------------- // 40 41 42 43 44 // 45 46 47 48 49 // 50 51 52 53 54 // 55 56 57 58 59 //---------------

user: user-2
content: 你都已经通过matGetVariable得到mxArray类型的数据指针了，之后从这个指针得到数据存到C语言数组中应该很容易啊。 mxGetPr？ 可以参考一下Matlab mx,mex,mat等库的API文档

user: user-0
content: 我已经知道怎么转了 因为三维数组的第三个维有限制 所以不能这样直接定义double a[][][]  但是可以用动态数组创建三维数组     传值就如两个链接说的一样

user: user-3
content: http://blog.sina.com.cn/s/blog_62c832270101bdrp.html

user: user-4
content: http://www.cnblogs.com/jackcin/p/3416099.html
user-0 提问: 结构体内的字符串输入和输出的问题～

回复:
user: user-1
content: 我的问题类似，当用scanf函数直接给字符串指针的结构体成员输入字符串时，程序运行就会报错，而如果结构体成员使用字符数组来定义就不会，因为要试验C语言中不定长记录的存储等问题，所以任然坚持用字符指针作为结构体成员，最后采用先用一个普通的字符指针变量接受字符串，再把该变量赋值给结构体成员来解决。 通过调试跟踪发现，在定义结构体变量时，结构体变量本身被分配了内存，但是其字符指针成员没有被分配到有效的内存地址，编译时没有问题，运行时就会报错！使用字符数组能够正确运行的原因是，字符数组能够被分配到有效的内存空间！ PS：我没有用malloc函数来分配内存，而是依赖于编译器在定义变量时的自动分配，我用的编译环境是Cygwin64

user: user-0
content: 谢谢大神们给的解答，我做了下面几个改变 一、node->name前面的取址符去掉了，在这之前加上了  char name[10]; node->name = name; 这两条语句； 二、在Passwordinput函数中我传递给函数的是node整个结构体，而我对这个函数的定义是只对char型字符串操作，所以传入的应该是Passwordinput(node->password); 三、输出函数中，由于是双向链表，所以存储的时候是链式储存结构，是不能用pointer++来做到往下个结点跳的功能的  谢谢大神们解答

user: user-2
content: 不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！

user: user-3
content: scanf("%s", &node->name); 这句有问题，前面malloc了一个teacher结构体，name指针本身的空间有了，但是指向的空间不确定。 要指定指向的位置，可以： char c[100]; // 本地临时变量，保存输入的名字，如果100不够，可以再加 ... scanf("%s", c);  // c为临时变量，保存输入进来的 node->name =  (char)malloc((strlen(c) + 1) * sizeof(char)); // 申请保存输入字符串的空间，name指向到此区域 // 用memcpy将字符串拷贝过来 不明白可以继续问。。。 微信 JohnLee790608

user: user-0
content: 引用 4 楼 paschen的回复:字符指针不需要再取地址 对呀我知道呀可是去掉的话在VC.中会程序错误

user: user-4
content: 字符指针不需要再取地址

user: user-4
content: scanf("%s", &node->name);  改成   scanf("%s", node->name);

user: user-0
content: 引用 1 楼 user-5的回复:scanf函数第二个参数，不用取止符，原本就是字符指针， 也就是字符串首地址 不加取址符会出现错误，我也觉得应该不用加，可是不加会出错

user: user-5
content: scanf函数第二个参数，不用取止符，原本就是字符指针， 也就是字符串首地址

user: user-0
content: 引用 7 楼 赵4老师的回复:printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方，而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。  在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。 //请今后要用 int c; scanf("%c",&c); //时，都改为 char s[2]; int c; scanf("%1s",s); c=s[0]; 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 可以解释一下吗因为没在书上看过耶

user: user-0
content: 引用 6 楼 JohnLee790608的回复:scanf("%s", &node->name); 这句有问题，前面malloc了一个teacher结构体，name指针本身的空间有了，但是指向的空间不确定。 要指定指向的位置，可以： char c[100]; // 本地临时变量，保存输入的名字，如果100不够，可以再加 ... scanf("%s", c);  // c为临时变量，保存输入进来的 node->name =  (char)malloc((strlen(c) + 1) * sizeof(char)); // 申请保存输入字符串的空间，name指向到此区域 // 用memcpy将字符串拷贝过来 不明白可以继续问。。。 微信 JohnLee790608 呀好的我试试看

user: user-2
content: printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方，而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。  在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。 //请今后要用 int c; scanf("%c",&c); //时，都改为 char s[2]; int c; scanf("%1s",s); c=s[0];
user-0 提问: 大神们求助，如何通过编写程序来实现这个东西，如何通过编写代码来找出int的范围和判断这台计算机的位宽

回复:
user: user-1
content: 可以用指针来看，指针大小的四就是32位，8就是64位

user: user-0
content: 那请问各位如何判断位宽呢

user: user-2
content: 2楼正解，用sizeof求int所占字节数，每个字节为8位

user: user-3
content: sizeof由编译器决定而非由计算机的位宽决定。

user: user-4
content: sizeof(int)*8 跟编译器、操作系统、CPU和总线都有关。

user: user-5
content: http://blog.csdn.net/xuexiacm/article/details/8122267
user-0 提问: 求各位大神帮忙我的这个程序哪里出错了？

回复:
user: user-1
content: scanf函数出错， 第二个参数必须是地址，楼主以后要注意这个问题

user: user-2
content: 把函数调用改一下就好了   int main(void){ 	char a[50]; 	scanf("%s",a); 	mid(a); 	return 0; }

user: user-3
content: 请好好检查你自己的代码，我不行你那样可以编译通过，很多地方又数组越界 #include "stdafx.h" #include <stdio.h>  void mid(char c[]); int main(void){ char a[50]; scanf("%s",a); mid(a); return 0; }  void mid(char c[]) { int n=0; int mide; int b=1; while(c[n]!='\0') n++; mide = (25-n)/2; while(b<=mide){ b++; } printf("%s\n",c);  }
user-0 提问: 求问C语言中“:=”（双引号中的符号是什么意思？）

回复:
user: user-1
content: :=是很多Pascal类语言，诸如Algol68、Pascal、Modula2、Modula3、Ada... 中的赋值符号，所以这段程序可能是从Pascal写的代码改成C的，忘了把:=改成=了。

user: user-2
content: 这是别的语言里的赋值吧

user: user-3
content: 同意2楼，可能是操作符重载

user: user-4
content: 看这:=和exit倒像是PASCAL  不过if语句又不是

user: user-5
content: 这不是可用的 C 语言，你就把它当伪代码吧。  当成 C 语言的话，错误太多了 ...

user: user-0
content: 谢谢大家的帮助

user: user-0
content: 引用 8 楼 DelphiGuy 的回复::=是很多Pascal类语言，诸如Algol68、Pascal、Modula2、Modula3、Ada... 中的赋值符号，所以这段程序可能是从Pascal写的代码改成C的，忘了把:=改成=了。  哦哦，有道理有道理！，这样就可以解释的通了！！！

user: user-6
content: 引用 8 楼 DelphiGuy 的回复::=是很多Pascal类语言，诸如Algol68、Pascal、Modula2、Modula3、Ada... 中的赋值符号，所以这段程序可能是从Pascal写的代码改成C的，忘了把:=改成=了。 英雄所见略同

user: user-7
content: 不是C语言。

user: user-8
content: 没有:=这个“”运算符“”，有程序里有定义这种符号

user: user-9
content: 没有这种运算符！。。

user: user-10
content: 看一下crosslist的源码，看一下这几个成员 的 类型 ，有没有对这个运算符进行编写
user-0 提问: C语言动态数组释放单个元素内存的问题

回复:
user: user-1
content: 引用 4 楼 libinden71 的回复:[quote=引用 2 楼 user-3 的回复:] 先把删除元素之后 的所有元素向前移，然后再realloc呢 +1   压缩内存的时候注意'/0‘[/quote] 法克  后面为毛多了‘！’玩意

user: user-1
content: 引用 2 楼 user-3 的回复:先把删除元素之后 的所有元素向前移，然后再realloc呢 +1   压缩内存的时候注意'/0‘！’

user: user-2
content: 引用 2 楼 user-3 的回复:先把删除元素之后 的所有元素向前移，然后再realloc呢 妙啊！

user: user-3
content: 先把删除元素之后 的所有元素向前移，然后再realloc呢

user: user-0
content: 用realloc(数组名,--数组长度*sizeof(数据类型));这种方法可以，但是只适合删除最后一个元素，我程序报错的原因是我前面插入函数的算法写错了，欢迎继续讨论删除其他元素的解决办法！
user-0 提问: scanf_s(" %d %c %d"，&a,&b,&c)每次运行总会出错

回复:
user: user-1
content: 高版本的VS都会让你用scanf_s来替代scanf 1.可以：Alt+F7，打开工程属性，然后找到图片上标注的地方，添加一行内容_CRT_SECURE_NO_DEPRECATE就OK了 2.如果用scanf_s，在读入%c或者%s的时候必须多传入一个参数用来指定读取的长度，否则会出错

user: user-2
content: #pragma warning(disable:4996) ...

user: user-3
content: scanf_s中%c还需要一个参数，表示长度  如果不想加，就用scanf

user: user-4
content: scanf_s(" %d %c %d"，&a,&b,1,&c);

user: user-5
content: 微软的_s对于字符串要求传入缓存长度, 不会用_s就用原版...反正连警告都不看:  C4477	“scanf_s”: 格式字符串“%c”需要类型“unsigned int”的参数，但可变参数 3 拥有了类型“int *”
user-0 提问: 求大神解答一下C语言问题

回复:
user: user-1
content: 一楼正解，不过你的代码有点缺陷，如果面试官要你写这个代码的话，你会被面试官pass掉，原因是你的代码鲁棒性不好，应该在函数的最前面加上代码：  if (s == NULL || t == NULL) {         printf("The Parameter is null!");         return; }   因为参数为NULL的话，代表没有内存，不能赋值的。

user: user-2
content: 对的对的，楼上正解

user: user-3
content: 因为字符串是以\0结尾的，如果没有\0，会一直往后输出
user-0 提问: 求一个二维数组中最大的元素值 求教各位大神

回复:
user: user-1
content: #include "stdio.h" int main() {  	int a[3][4],i,j,max=0,row=0,col=0; 	printf("请输入12个整数:\n"); 	for(i=0;i<3;i++) 	{ 	for(j=0;j<4;j++) 	{ 	scanf("%d",&a[i][j]); 	} 	} 	max=a[0][0];  	for(i=0;i<3;i++) 	{ 	for(j=0;j<4;j++) 	{ 		if(a[i][j]>max) 		{ 		max=a[i][j]; 		row=i; 		col=j; 		} 	} 	} 	printf("max=%d\nrow=%d\ncol=%d\n",max,row,col);  }

user: user-0
content: 谢谢楼上的二位

user: user-2
content: printf里应当输出max,row,col,而不是a[i][j].输出随机的值是因为经过循环后，i变为3，j变为4，越界了。

user: user-3
content: 最后printf错了,用max,不要用a[i][j], i,j都越界了
user-0 提问: 关于 peterson 方法完成进程互斥的疑问

回复:
user: user-0
content: 引用 2 楼 FancyMouse 的回复:顺便补充，你的理解完全没有问题。进程切换的确会发生在任何点，包括&&上。会出问题是因为它那代码写错了。  居然由于这一点的关系。。。 这多进程编程看来有点坑啊

user: user-1
content: 顺便补充，你的理解完全没有问题。进程切换的确会发生在任何点，包括&&上。会出问题是因为它那代码写错了。

user: user-1
content: 你这peterson反了。peterson应该是interested[other] == TRUE && turn == process。

user: user-2
content: <A href="http://www.corewise.cn/">手持终端机</A> <A href="http://www.corewise.cn/">数据采集器</A> <A href="http://www.corewise.cn/">RFID手持设备</A>
user-0 提问: 在其他函数中引用另一个函数中的局部变量 会有什么问题呢

回复:
user: user-1
content: 未定义行为。 刚好值没有被修改，并不代表你就可以这样去用（以后出了BUG都不知道是哪的问题）

user: user-2
content: 结果正确最多只能算是运气好  你试着在，在你printf后面再输出一次或许就不是那个值了  所以不要返回局部变量的地址，因为这个变量函数结束就销毁了

user: user-3
content: 在局部变量前加static

user: user-4
content: 碰巧没变更害人 不要把偶然当成必然

user: user-5
content: 国破山河在...

user: user-0
content: fun()方法返回的地址值和实际取得的数值不相同啊

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

user: user-6
content: fun() 结束时变量i 已经被系统回收，但是还没被再次利用（所有值还是i的值）！你在调用之后下个断点，然后随便打印一段话，你观察下内存 这时候在打印i的值 如果被利用了它就会是一堆垃圾数据！
user-0 提问: C语言求助

回复:
user: user-1
content: 那条scanf分成三条语句写，每一个输入完输入回车然后输入下一个

user: user-2
content: 主要是逗号， 输入字符串的时候,输入的逗号也是字符串的一部分。直到遇到 空白符 后面的 ,%d,%s 都没法匹配了 而 第一个数据，超过了数组能够容纳的字符串的字符数。造成越界访问

user: user-3
content: scanf("%19s%d%19s",p1->name,&p1->ID_number,p1->MAC_address);//输入各项请用空格间隔

user: user-0
content: 引用 1楼lm_whales 的回复:内存越界了 逗号 分割的字符串，是不会当成两个字符读取的那内存越界怎么处理呢，name我在前面也有声明并且分配内存了呀。

user: user-0
content: 那内存越界怎么处理呢，name我在前面也有声明并且分配内存了呀。

user: user-2
content: 内存越界了 逗号 分割的字符串，是不会当成两个字符读取的

user: user-0
content: 引用 7楼小灸舞 的回复:scanf("%s,%d,%s",p1->name,&p1->ID_number,p1->MAC_address); 这样的写法，编译器没法搞清楚你输入进来的逗号到底是%s的一部分呢还是分隔符呢 改成空格分隔的。 scanf("%s %d %s",p1->name,&p1->ID_number,p1->MAC_address);嗯，感谢

user: user-0
content: 引用 4楼赵4老师 的回复:scanf("%19s%d%19s",p1->name,&p1->ID_number,p1->MAC_address);//输入各项请用空格间隔嗯，感谢

user: user-0
content: 引用 5楼lm_whales 的回复:主要是逗号， 输入字符串的时候,输入的逗号也是字符串的一部分。直到遇到 空白符 后面的 ,%d,%s 都没法匹配了 而 第一个数据，超过了数组能够容纳的字符串的字符数。造成越界访问嗯，感谢

user: user-3
content: 4楼正解！

user: user-4
content: scanf("%s,%d,%s",p1->name,&p1->ID_number,p1->MAC_address); 这样的写法，编译器没法搞清楚你输入进来的逗号到底是%s的一部分呢还是分隔符呢 改成空格分隔的。 scanf("%s %d %s",p1->name,&p1->ID_number,p1->MAC_address);
user-0 提问: ld生成文件时报错

回复:
user: user-0
content: 自顶，帮看下啊。

user: user-0
content: 引用 4 楼 Rewen 的回复:没有加入  libc.so，crti.o 等库吧。  把这些库都加进去看看。  加进去如下，还是报错啊？  [neo@localhost ld]$ lsb_release -d Description:    Red Hat Enterprise Linux Server release 6.1 (Santiago) [neo@localhost ld]$ ld t1.o /usr/lib64/crti.o -lc -o t1 ld: warning: cannot find entry symbol _start; defaulting to 00000000004002b4 [neo@localhost ld]$ ./t1 -bash: ./t1: /lib/ld64.so.1: bad ELF interpreter: No such file or directory [neo@localhost ld]$

user: user-1
content: 没有加入  libc.so，crti.o 等库吧。  把这些库都加进去看看。

user: user-0
content: 引用 1 楼 user-2 的回复:ld t2.o -lc -o t2  你好，执行了，如下提示，还是报错  [weihu@nagios libcurl]$ cat t2.c  #include <stdio.h>  int main() {         printf("hello world!\n");         return 0; } [weihu@nagios libcurl]$ gcc -c t2.c -o t2.o [weihu@nagios libcurl]$ ld t2.o -lc -o t2 ld: warning: cannot find entry symbol _start; defaulting to 0000000000400260 [weihu@nagios libcurl]$ ./t2  -bash: ./t2: /lib/ld64.so.1: bad ELF interpreter: No such file or directory [weihu@nagios libcurl]$

user: user-2
content: ld t2.o -lc -o t2

user: user-2
content: ld t2.o -lc -o t2
user-0 提问: c帖

回复:
user: user-1
content: 在百度知道看到同样的问题的回答 亲测，有用！ 将文件夹中的MinGW64改成MinGW32似乎就可以了 (或者将MinGW32改成MinGW64）

user: user-2
content: 代码写错了，大哥  #include <stdio.h> void main() { int i; int a[20]={1,1}; for(i=2;i=20;i++) { a[i]=a[i-2]+a[i-1]; } for(i=0;i<20;i++) { if(0==i%5) { printf("\n"); } printf("%12d",a[i]); } printf("\n"); }

user: user-3
content: dev c++中不支持void main,改成main或int main

user: user-4
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-0
content: 呃呃，下了好几个的。都不行

user: user-5
content: 引用 2 楼 AS1832 的回复:那个=20，却是写错了。但是问题不在哪里呀！怎样可以让它的二进制目录不缺失呢？  不清楚了，可能下载的不全吧，重新下载安装试下

user: user-0
content: 那个=20，却是写错了。但是问题不在哪里呀！怎样可以让它的二进制目录不缺失呢？

user: user-5
content: for(i=2;i=20;i++)  应该是  for(i=2;i<20;i++)  吧
user-0 提问: 计算机编程语言,词法分析都可以用正规式来表达?

回复:
user: user-1
content: RG=DFA < BNF=CFG < LL(1) < LR

user: user-2
content: 基本上计算机语言是2型文法，并不是线性的，但能不能转成3型的还得看是什么语言吧，你试试能用3型文法描述数学表达式吗

user: user-3
content: 3型文法最简单啊, 你为虾米要给自己找麻烦一定要弄个递归可枚举的..

user: user-4
content: 要不先弄懂啥叫“图灵机”？
user-0 提问: 求解释输出结果

回复:
user: user-1
content: 因为你指向的是NULL，转成ulong以后就是0了 比如你改成char	*pc = "sdfd";这样的就能看到地址了

user: user-1
content: 指针变量加1，即向后移动1 个位置表示指针变量指向下一个数据元素的首地址。而不是在原地址基础上加1。至于真实的地址加了多少，要看原来指针指向的数据类型是什么。 http://blog.csdn.net/wade23/article/details/4546119

user: user-0
content: 我不明白输出的不是一堆地址值。

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

user: user-3
content: 指针加1，指针移动的距离等于指针所指类型长度

user: user-4
content: T*类型指针+n 移动距离为 n * sizeof(T)  所以pc是char*，所以结果为 0 + 1 * sizeof(char) = 1  同理其他几个
user-0 提问: 为什么会出现这个哪里错了吗

回复:
user: user-0
content: 果然啊因为不细心搞错了换行符学习到了

user: user-1
content: 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。  关于自己是否适合编程的很简单的测试： 在报纸或杂志上随便找一段约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: printf("%n");  改成 printf("\n");
user-0 提问: 一个大学重修过c语言的人来问个数组转换的问题

回复:
user: user-1
content: 作为一个C程序员，对  scanf,sscanf,fscanf  printf,sprintf,fprintf 这类函数的用法，还是要做到“拳不离手，曲不离口”的。

user: user-2
content: 引用 5 楼 忘世麒麟的回复:if(pos == -1)   ->     if(pos == string::npos) C是没有string的

user: user-2
content: http://www.cnblogs.com/gleam/p/3607984.html

user: user-2
content: char存的只是字符，如果要字符串， 你需要一个二维字符数组

user: user-3
content: if(pos == -1)   ->     if(pos == string::npos)

user: user-3
content: float buff[2]={1.2,2.2}; 	char szbuf[1024]; 	sprintf(szbuf,"%f",buff[0]); 	string szStr = szbuf; 	int pos = szStr.find("."); 	if(pos == -1) 	{ 		cout<<"没有找到小数点"<<endl; 	} 	else 		cout<<"小数点在(从0开始计数):"<<pos<<endl;

user: user-3
content: 引用 1 楼 y_kings 的回复:好吧，我承认我被网上的东西误导了。。我的意思是buf[0]=1;buf[1]=.;buf[2]=2;然后问题是在我不知道小数点前面有几位的情况下，怎么知道小数点该放哪？ 使用sprintf函数.

user: user-4
content: 没学好也不至于char只能表示一个字符也不知道吧

user: user-0
content: 好吧，我承认我被网上的东西误导了。。我的意思是buf[0]=1;buf[1]=.;buf[2]=2;然后问题是在我不知道小数点前面有几位的情况下，怎么知道小数点该放哪？
user-0 提问: 一维数组如何转化为二维数组，仅限C语言

回复:
user: user-0
content: 引用 6 楼 ooolinux的回复:要输入的数字先写到文本文件input.txt里，程序运行的时候重定向从那个文件输入，避免反复键盘输入的繁琐。 或者在程序中用随机数来产生成绩，避免手动输入。 嗯，我尝试一下。谭浩强的C语言，刚刚学到函数呢。今天自己琢磨了数组作为参数的情况。

user: user-1
content: 请那些喜欢将数组作为函数参数传来传去或作为函数返回值的码农思考一下为什么不把整个互联网内容当作函数参数传来传去或作为函数返回值呢？

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

user: user-2
content: 定义一个Student结构，包括姓名和四门课成绩。

user: user-3
content: http://blog.csdn.net/tobebetterprogrammer/article/details/18260029 可以用来参考一下，C/C++有些部分处理方式是差不多的。

user: user-2
content: 要输入的数字先写到文本文件input.txt里，程序运行的时候重定向从那个文件输入，避免反复键盘输入的繁琐。 或者在程序中用随机数来产生成绩，避免手动输入。

user: user-0
content: 引用 3 楼 干的漂亮的回复:int a[40]; /*依次输入成绩*/ /*每个学生的average成绩*/ for(i=0;i<40;i+=4) { 	sum=0; 	m=i; 	for(m=i;m<i+4;m++) 	sum+=a[m]; 	printf("%d student average score=%d\n",i/4+1,sum/4); } /*pass */ for(i=0;i<4;i++) { 	sum=0; 	for(m=i;m<40;m+=4) 		if(a[m]>60) 			sum++; 	printf("subject %d pass %d\n",i,sum/10.0); }  /*max*/ max=a[0]; maxer=0; for(i=1;i<40;i++) {	 	if(max<a[i]) 	{ 		max=a[i]; 		maxer=i; 	} }  printf("student %d maxScore subject is %d\n",maxer/4+1,maxer%4+1); 要求用逗号分隔的方式，一次性输入4×12个数字

user: user-4
content: 用结构体数组来记录，数组中每一项对应一个结构体，一个结构记录一个学生的各分数

user: user-5
content: int a[40]; /*依次输入成绩*/ /*每个学生的average成绩*/ for(i=0;i<40;i+=4) { 	sum=0; 	m=i; 	for(m=i;m<i+4;m++) 	sum+=a[m]; 	printf("%d student average score=%d\n",i/4+1,sum/4); } /*pass */ for(i=0;i<4;i++) { 	sum=0; 	for(m=i;m<40;m+=4) 		if(a[m]>60) 			sum++; 	printf("subject %d pass %d\n",i,sum/10.0); }  /*max*/ max=a[0]; maxer=0; for(i=1;i<40;i++) {	 	if(max<a[i]) 	{ 		max=a[i]; 		maxer=i; 	} }  printf("student %d maxScore subject is %d\n",maxer/4+1,maxer%4+1);
user-0 提问: 求一篇用C语言描述的数据结构的单链表的功能代码 另外帮我看看我这个代码怎么错的

回复:
user: user-1
content: 你这个程序有很多问题： 1.CreateHead既然已经有返回值了，根本没必要传参进去了 2.getchar();以后加一句fflush(stdin)清空输入缓冲区，否则会读入回车符 3.你的链表连接部分也不对 4.你的Print函数也不对，应该先输入再s = s->next,while判断的应该是s而不是s->next  # include<stdio.h> # include<malloc.h> typedef struct Node { 	int date; 	struct Node *next; }Node, *LinkList; LinkList CreateHead() { 	LinkList L = (LinkList)malloc(sizeof(LinkList)); 	L->next = NULL; 	Node *s,*p = L; 	char c; 	int flag = 1; 	while (flag) 	{ 		printf("请输入字符\t"); 		c = getchar(); 		fflush(stdin); 		if (c != '$') 		{ 			s = (Node *)malloc(sizeof(Node)); 			s->date = c; 			s->next = NULL; 			p->next = s; 			p = s; 		} 		else 			flag = 0; 	} 	return L; } void Print(LinkList L) { 	Node *s; 	s = (Node *)malloc(sizeof(Node)); 	s = L->next; 	while (s != NULL) 	{ 		 		printf("%c", s->date); 		s = s->next; 	} } int main() { 	LinkList L1; 	L1 = CreateHead(); 	Print(L1); 	return 0; }

user: user-0
content: 是的。。。。。。

user: user-2
content: 你CreateHead中的L都没初始，就直接使用L->next了
user-0 提问: 解答一下关于“C语言的指针和地址”之间的一个小疑点，感觉混淆了

回复:
user: user-1
content: 在被调函数中有一句是“ *aver=ave;”，我刚开始写的错误语句是"aver=&ave;"；  -- 前者是对 aver 指向的地址写入数值。对指针解引用。 后者是对 aver 这个指针变量赋值，另它指向 ave。

user: user-2
content: 楼主以为aver=&ave两边都加个*就等价于 *aver=ave;了

user: user-3
content: 函数中的aver在函数中属于局部变量，aver在被调用的函数中原本指向实参，aver=&ave;此时aver指向了ave的地址了，此时实参和函数中的形参指针aver指向的不是一个地址了。 若有疑问请发邮件：likun_557@163.com

user: user-4
content: *aver=ave; 根据参数把它所指的变量给修改了（真改了，符合要求） aver=&ave; 把传过来的参数给修改了（改了也白改）
user-0 提问: C语言算法题：按权重分糖果，求解为什么AC不了

回复:
user: user-1
content: 画出得分的曲线图 凡是处于谷底的得1 块 其他人，根据阶梯，得到左右两个方向，阶梯数最大的个数的糖果  例如第一组数据                                                                 91.69          3                                          /            84.67                65                        2                 /            \          /  0.41                  63.34                             1  一共三个台阶高度，第一级 得到1个，第二级得到2个，第三级得到3个

user: user-0
content: #include <stdio.h> int n,i; long sum; int candy[100005]; float mark[100005]; int main() { 	scanf("%d",&n);   	for(i=0;i<n;i++){ 		scanf("%f",&mark[i]); 		candy[i]=1; 	} 	sum=0; 	for(i=1;i<n;i++){ 		if(mark[i-1]<mark[i]){ 			candy[i]=candy[i-1]+1; 		} 	} 	for(i=n-1;i>0;i--){ 		if(mark[i]<mark[i-1]&&candy[i]>=candy[i-1]){ 			candy[i-1]=candy[i]+1; 		} 	} 	for(i=0;i<n;i++){ 		sum+=candy[i]; 		//printf("%d ",candy[i]); 	}  	printf("%d\n",sum); 	return 0; }

user: user-0
content: 引用 1 楼 user-1 的回复:画出得分的曲线图 凡是处于谷底的得1 块 其他人，根据阶梯，得到左右两个方向，阶梯数最大的个数的糖果  例如第一组数据                                                                 91.69          3                                          /            84.67                65                        2                 /            \          /  0.41                  63.34                             1  一共三个台阶高度，第一级 得到1个，第二级得到2个，第三级得到3个我也试过这种方法AC不了，要不给你网址试试，http://acm.scu.edu.cn/soj/problem.action?id=4457
user-0 提问: C语言，关于循环问题求助！

回复:
user: user-1
content: 问题2：  while(w!=1){          scanf("%*s");  printf("Error,please enter a number ,as 1, 157,-6...\n");  }  你这里只要条件满足，肯定会进入死循环的，因为没有跳出条件啊。。。

user: user-1
content: 问题1： 你的目的是，当输入的不是1的时候，做循环体里面的事情？ 你这样是不对的，因为scanf的返回值不是b的内容。 而是匹配的输入数量。 而且当输入结束的时候返回EOF，这个值也不是1啊。所以永远不会结束，只能死循环了。。。

user: user-0
content: 抱歉，手打代码的时候在抽烟，没注意检测代码问题，你指出的问题编译时都是不存在的。 哎，这个问题头疼，编译是能通过的，也能运行，但是有这个BUG就是感觉特别不爽，想找出问题来。

user: user-2
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-3
content: #include<stdio.h> int main() {   int b; while((scanf("%d",&b)!=1) {   printf("*"); scanf("%d",&a); }  return 0; }  （1）while循环中括号不匹配。 （2）a变量没有定义，会编译不过~~~ 楼主问的关键问题，我也说不清，呜呜~~~
user-0 提问: gcc编译提示cannot find -lpthread

回复:
user: user-1
content: 在虚拟机中的Linux下使用gcc

user: user-0
content: 引用 1 楼 user-2 的回复:mingw?  mingw 自己不带 pthread ，得自己去下一个第三方的。 那该如何安装第三方库呢？

user: user-0
content: 如何安装呢？

user: user-2
content: mingw?  mingw 自己不带 pthread ，得自己去下一个第三方的。
user-0 提问: 贪吃蛇中方向问题

回复:
user: user-0
content: 引用 8 楼 zhao4zhong1 的回复:引用 6 楼 qq_32296307 的回复:[quote=引用 5 楼 zhao4zhong1 的回复:] 搜“C源代码 贪吃蛇”膜拜大神 赵4“大神”几乎不生产“源代码”，他几乎总是百度搜索源代码的搬运工。 [/quote]

user: user-0
content: 引用 9 楼 u010165006 的回复:[quote=引用 7 楼 qq_32296307 的回复:] 不太懂，什么叫demo，我想问的是，while（1）{1.2.}1.我不按任何建，屏幕上不断打印，，可是，我有的时候，要按键，如何区分  给蛇一个初始方向 当前方向=初始方向 循环中() { 如果有上、下、左、右按键，改变当前方向 蛇沿当前方向运动一格 如果蛇头撞墙或撞身，结束循环 Sleep(一段时间); }   如果你无法理解，还是找个源代码参考一下。[/quote]ook

user: user-1
content: 引用 7 楼 qq_32296307 的回复:不太懂，什么叫demo，我想问的是，while（1）{1.2.}1.我不按任何建，屏幕上不断打印，，可是，我有的时候，要按键，如何区分  给蛇一个初始方向 当前方向=初始方向 循环中() { 如果有上、下、左、右按键，改变当前方向 蛇沿当前方向运动一格 如果蛇头撞墙或撞身，结束循环 Sleep(一段时间); }   如果你无法理解，还是找个源代码参考一下。

user: user-2
content: 引用 6 楼 qq_32296307 的回复:引用 5 楼 zhao4zhong1 的回复:搜“C源代码 贪吃蛇”膜拜大神 赵4“大神”几乎不生产“源代码”，他几乎总是百度搜索源代码的搬运工。

user: user-0
content: 引用 3 楼 u010165006 的回复:循环中() { if( ! isDEMO )     如果有上、下、左、右按键，改变当前方向 //else //    蛇自动改变当前方向 蛇沿当前方向运动一格 如果蛇头撞墙或撞身，结束循环 }不太懂，什么叫demo，我想问的是，while（1）{1.2.}1.我不按任何建，屏幕上不断打印，，可是，我有的时候，要按键，如何区分

user: user-0
content: 引用 5 楼 zhao4zhong1 的回复:搜“C源代码 贪吃蛇”膜拜大神

user: user-2
content: 搜“C源代码 贪吃蛇”

user: user-3
content: 你需要一个计时器 如果是控制台的话 可以  #include <windows.h> while(1) {    // 蛇沿当前方向运动一格    //如果蛇头撞墙或撞身，结束循环    Sleep(间隔); }

user: user-1
content: 循环中() { if( ! isDEMO )     如果有上、下、左、右按键，改变当前方向 //else //    蛇自动改变当前方向 蛇沿当前方向运动一格 如果蛇头撞墙或撞身，结束循环 }

user: user-1
content: 第二种，就是保持，我不能输入字符 ———————————— 应该不输入的时候保持方向，而不是不能输入 你为什么要不能输入，想做DEMO吗？

user: user-1
content: 给蛇一个初始方向 当前方向=初始方向 循环中() { 如果有上、下、左、右按键，改变当前方向 蛇沿当前方向运动一格 如果蛇头撞墙或撞身，结束循环 }
user-0 提问: 新人对着书打的代码，不知道为什么运行不正常。求触帮助OTZ

回复:
user: user-1
content: 在后面添加system（"pause")

user: user-2
content: 试试： fflush(stdin); getch(); //不显示输入的字符 return 0;

user: user-0
content: 哦，谢谢，是VS2012出问题了。本地windows调试器不会调试修改后的代码，一直调试的都是之前写错的代码。

user: user-3
content: 可以再加一个getchar  或者用system(“pause”)

user: user-3
content: getchar接收了scanf_s留下的换行符\n  所以直接退出了
user-0 提问: leetcode 3sum提不上去，请大神看看哪里出问题了？？？

回复:
user: user-1
content: int** rets = (int**)malloc(sizeof(int*)*numsSize);  应该是这一条分配的空间不够，test case的数组长度为27，但是return size为28，所以这里会小。 比如改成 int** rets = (int**)malloc(sizeof(int*)*numsSize *2); 是可以accepted的。当然这个2只是测试，感觉这个空间分配应该按照排列组合公式的Cnumsize中取3来设置。  你的代码确实在VS上可以正确运行，也能得到28个结果。这里还没想通，等待大神结贴。

user: user-2
content: 边界条件 输入输出格式 ……

user: user-0
content: 引用 1 楼 user-3 的回复:出错的那组数据，本地调试的时候没有问题吗？没发现问题，我直接把结果打印出来了。

user: user-3
content: 出错的那组数据，本地调试的时候没有问题吗？

user: user-3
content: 引用 2 楼 littlebeat123 的回复:引用 1 楼 user-3 的回复:出错的那组数据，本地调试的时候没有问题吗？没发现问题，我直接把结果打印出来了。 试了一下，确实如你所说，本地运行没有问题。目测是未定义行为引起的不同，好好检查程序吧。顺便感叹一下好久没写 c 程序了。
user-0 提问: static

回复:
user: user-1
content: 引用 4 楼 Stacey的专栏的回复:所以如果变量b在一个子函数里,b会比子函数里的其他普通变量更早的就存在了,在编译时就存在了,对吗? 对，这一点和全局变量一样

user: user-0
content: 所以如果变量b在一个子函数里,b会比子函数里的其他普通变量更早的就存在了,在编译时就存在了,对吗?

user: user-1
content: 编译时就确定了，之后函数中每次运行不会为b赋值2

user: user-1
content: 静态变量是在程序运行时就存在了，而不是函数启动时

user: user-2
content: 编译时就确定了值 执行前、程序装入内存时，变量的值也存入了
user-0 提问: 小白求助...关于C语言socket传输失败的问题

回复:
user: user-0
content: 好了，解决了...原来是lon不小心设成char型了....

user: user-0
content: 刚刚发现小文件（一次可以传输完的）都没问题，但是大文件（需循环传输）客户端好像不能接收... 请问这是为什么呢?

user: user-0
content: 但是服务器每传输一个文件就开一个新的socket来等待客户端开始,每传一个文件结束后都用shutdown()来等待传输结束然后令客户端结束recv()，好像这样子强制同步不存在数据包分割的问题啊.....

user: user-1
content: 不知道有多少前人掉在TCP Socket send(人多)send(病少)send(财富) recv(人多病)recv(少财富) 陷阱里面啊！ http://bbs.csdn.net/topics/380167545

user: user-0
content: 检查过被写入文件的内容，内容是正确的，并没有发现有粘包的问题... 同一台机器内传输，阻塞TCP，应该也不存在丢包的问题... Orz

user: user-0
content: 刚刚发现代码中fwrite()少写了一个‘f’，改过来后errno全部正常（为0），也有文件写入了。 但是写入的文件数少于应传的文件数。。。都是在本地进行传输（127.0.0.1），怎么会这样呢？

user: user-0
content: send()的返回值一直是大于0的，然后我在客户端调用了errno有一些值显示是9.... 这是怎么回事...

user: user-2
content: 看看send返回值是啥
user-0 提问: 新手求解

回复:
user: user-1
content: 先从基础慢慢来即可

user: user-2
content: 还不如找个师傅来的合适

user: user-3
content: 学习编程还是别加群，水军太多，自己看书看资料，不懂来逛论坛，请教前辈们，同新手小白一枚，一起努力

user: user-4
content: 赞同三楼的说法， 工具太先进， 编程能力会下降！ 还是多写代码实在， 交流是虚的！ 除非讨论概念上的东西，还得自己动手练！

user: user-5
content: 很多时候，使用的工具越先进，人越笨；得到得越轻松，人越懒。

user: user-6
content: 学语言不是靠群的，需要静下心看书，有问题可以来论坛提问

user: user-5
content: 对学习编程者的忠告： 多用小脑和手，少用大脑、眼睛和嘴，会更快地学会编程！ 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步Debug版对应汇编一行！ 单步Debug版对应汇编千行不如单步Release版对应汇编一行！ 不会单步Release版对应汇编？在你想单步Release版C/C++代码片断的前面临时加一句DebugBreak();重建所有，然后在IDE中运行。（一般人我不告诉他！）  VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时候。
user-0 提问: 想自学编程，请问c语言怎么学

回复:
user: user-1
content: 下载个虚拟机，我用的是ubuntu12.04 然后看谭浩强的C语言、、、不断编程，不断百度

user: user-2
content: 引用 10 楼 zhao4zhong1 的回复:[quote=引用 9 楼 g62r83t27 的回复:] 软件：一台虚拟机，一个Linux操作系统，一本好书http://docs.linuxtone.org/ebooks/C&CPP/c/，一个百度 ＋每天默念zhao4zhong1语录若干遍。[/quote]  这个的确有用，本人亲测好使！

user: user-3
content: 买一本C语言书，先用txt把代码抄写几遍

user: user-4
content: https://www.zhihu.com/question/19668080

user: user-5
content: 引用 9 楼 g62r83t27 的回复:软件：一台虚拟机，一个Linux操作系统，一本好书http://docs.linuxtone.org/ebooks/C&CPP/c/，一个百度 ＋每天默念zhao4zhong1语录若干遍。

user: user-6
content: 软件：一台虚拟机，一个Linux操作系统，一本好书http://docs.linuxtone.org/ebooks/C&CPP/c/，一个百度

user: user-7
content: 想自学编程，请问c语言怎么学 --- 你不都说了吗，自学呀,,,

user: user-5
content: 对学习编程者的忠告： 多用小脑和手，少用大脑、眼睛和嘴，会更快地学会编程！ 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步Debug版对应汇编一行！ 单步Debug版对应汇编千行不如单步Release版对应汇编一行！ 不会单步Release版对应汇编？在你想单步Release版C/C++代码片断的前面临时加一句DebugBreak();重建所有，然后在IDE中运行。（一般人我不告诉他！）

user: user-8
content: http://bbs.csdn.net/topics/390966354/

user: user-9
content: 我用的dev c++

user: user-10
content: primer puls

user: user-10
content: 你要是有编程的基础的话可以用VC6.0编写试试，书嘛一般就是C PULS

user: user-5
content: C语言教程（附带C语言100例）http://download.csdn.net/detail/zhao4zhong1/8830817

user: user-11
content: 买本教材吧，以下任选一本都可以，能力好的买前面，能力中等的买谭浩强： C Primer Plus  C语言程序设计：现代方法：第2版(被誉为"近10年来最好的一部C语言著作") C和指针 或者谭浩强  编程软件可以用《C与C++程序设计学习与实验系统 2013.3》，比较方便。
user-0 提问: 中文输入

回复:
user: user-1
content: 根据你的描述，你实现的程序是运行在DOS(16位)下的，并且支持处理汉字。 我们知道，BC(或TC，指Turboc 2.0)是不支持汉字的，所以使用BC(或TC)开发程序，要使程序 支持汉字，一般需要了解或学习或具备以下几个主要知识点： 1、该程序需要运行在图形模式下，可使用 graphics.h 或自己实现，程序需要支持鼠标（才方便操作）。 2、[可选]熟悉寄存器与伪变量。在BC或TC中的伪变量，就是对应的寄存器名称前面多加个下划线“_”(如寄存器“AH”的伪变量是“_AH”)，伪变量如汇编语言一样，可以直接操作(读或写)硬件。 3、了解BC或TC的内存模式，根据程序的规模，选择对应的内存模式。 4、[可选]熟悉扩展内存及其编程，汉字库（使用点阵字库，16点阵国标字库大概260KB）一般加载到扩展内存中。 5、熟悉BIOS与DOS调用，主要用于驱动鼠标(或显示卡）。鼠标信息需要从DOS调用来获取。 6、了解显示器的基本显示原理。如：屏幕坐标，各种图形模式的分辨率。汉字就是通过打点来显示到屏幕上的。 7、[可选]熟悉对显卡的编程，可直接向显存中读写数据，提高显示速度。 8、熟悉国标汉字(使用最基本的GB2312),包括汉字内码(区位码)的表示方式，内码和字库的关系(通过内码取得对应的点阵数据)。 9、程序中增加编写一个简单的输入模块（拼音单字输入就可以了，相当于建立拼音串和汉字内码的对应关系）。  备注： 如果程序数据量比较大，则以上第4点需要； 如果程序要求刷新较快，则以上第2,7点需要，这时就不需要BC中的头文件 graphics.h 了，完全可以自己实现。 以上知识点，在图书馆中关于C语言的高级编程书籍一般都找得到，这道题不是“小程序”了。

user: user-2
content: 引用 2 楼 AUTO_jun 的回复:DOS下输入不了汉字，只能是输入英文打开中文输入法 ctrl+空格，或其他组合键

user: user-0
content: DOS下输入不了汉字，只能是输入英文

user: user-2
content: dos下直接输入就行呗

user: user-3
content: Win-TC里面自带CCDOS

user: user-4
content: TW天汇汉字系统
user-0 提问: 问一下if if和if else if的区别

回复:
user: user-0
content: 啊啊啊啊啊 知道鸟 谢谢

user: user-1
content: 后面带else的是找只符合一个条件的

user: user-1
content: 第一种代码：判断count[i*j]为0，随即赋值为1；判断它为1（一定为1），再赋值为0，又回去啦
user-0 提问: C语言新手求助一段代码的问题

回复:
user: user-1
content: is_full函数中=应该是==吧

user: user-2
content: bool is_full(struct Array * pArr) {     if(pArr->cnt=pArr->len)  <<<==== 这里！pArr->cnt == pArr->len         return true;     else         return false; }
user-0 提问: 单击鼠标自动输入数字。

回复:
user: user-1
content: 用C++ Builder做很简单，不过你这个想法好像不实用。  图形用户界面可以学习C++ Builder，入门比较容易。 仅供参考： 从C语言的菜单界面管理系统到C++ Builder的图形用户界面，一个简单的电话簿Demo例子 http://blog.163.com/tab_98/blog/static/1192409720158673337998/ 学C++还是C#、Java？ http://blog.163.com/tab_98/blog/static/11924097201511274543737/

user: user-2
content: http://www.autohotkey.com

user: user-3
content: 响应单击事件，事件中记录已单击次数并在满足条件时执行你需要的代码
user-0 提问: 热烈庆祝本人受关注人数即将突破11000大关！散分！！

回复:
user: user-1
content: 蹭蹭喜气

user: user-2
content: 我分可怜，来接个分。

user: user-3
content: 好多次在论坛都受到赵老师的指点  受益良多  谢谢

user: user-4

user: user-5

user: user-6
content: 哇，厉害厉害，抢分抢分

user: user-7
content: 我也刚给你关注了，大哥，我那问题还没解决，能帮忙看下吗，第一个

user: user-8
content: 又建一楼

user: user-8
content: 建楼

user: user-9
content: 牛b

user: user-10
content: 想知道Matlab怎么安装

user: user-11
content: 666好多都是事实就是近近景近景

user: user-12
content: 收收收收收收

user: user-13
content: 我一般是狙击枪

user: user-14
content: 6了，赵老师

user: user-15
content: 谢谢老师散分

user: user-16

user: user-17
content: 厉害了，在很多帖子中都能看到

user: user-18
content: 新手不懂什么是抢分，分是什么 ，有干货就行

user: user-19
content: 新人报道，外加祝贺
user-0 提问: char *s[]={。。。}，s的类型是char *[]还是char ** ？

回复:
user: user-0
content: 可以让编译器告诉我们变量类型 代码： 	char *s[]={"Hello","world","123","abc","test"}; 	char t[][6]={"Hello","world","123","abc","test"}; 	s=1; 	t=2; 编译错误信息： cannot convert from 'const int' to 'char *[5]' cannot convert from 'const int' to 'char [5][6]'

user: user-1
content: 把声明变量时的变量名去掉，剩下的就是它的类型。 所以是 char *[] 类型。 如果要用它作为实际参数，形式参数变量的类型用该是 char **。

user: user-2
content: 理解和讨论之前请先学会如何观察！ 仅供参考：//char (*(*x[3])())[5];//x是什么类型的变量? // //分析C语言声明，关键是搞清楚这个变量是个什么东西（函数、指针、数组）， //是函数那么剩下的就是他的参数和返回值， //是指针那剩下部分是说明他指向什么， //是数组剩下的部分就是说明数组的成员是什么类型。 //解析C语言声明规则： //从左侧第一个标识符开始，按照优先级进行结合。*表示是..的指针，const表示只读的，volatile表示可变的，[]表示是数组，()表示是函数。 // //x和[3]结合说明是一个大小为3的数组，该数组的每个元素为一类指针，该类指针指向一类函数，该类函数无参数，返回一类指针，该类指针指向一个大小为5的char型数组 #include <stdio.h> #include <typeinfo.h> char num[5]; char (*x00())[5] {     return # } int main() {     char (*(*x[3])())[5];//是个数组，大小为3     char (*(*x0  )())[5];//数组的元素，是个函数指针     char (*( x00 )())[5];//函数原型，参数为空，返回值为指针     char (*  x000   )[5];//返回值      x0 = x00;     x[0] = x0;     x[1] = x0;     x[2] = x0;     printf("typeid(x).name() is %s\n",typeid(x).name());     return 0; } //typeid(x).name() is char (* (__cdecl**)(void))[5]

user: user-3
content: s本身是个数组，数组中的元素是char*指针而已  区分数组和指针的区别，某些情况下数组可以退化为指针，但数组与指针是两种类型，所以不造价于char**

user: user-3
content: s 是 char*[5] 类型

user: user-4
content: char *s[]；注意优先级，[]这个符号的优先级要高，所以s先于它结合，即s是一个数组，而数组内的元素为char*。

user: user-5
content: s是一个指针数组，和普通的数组一样，s代表数组首地址，不能移动 char **定义的是一个二级指针，这个指针又指向一个指针，而这个指针指向一个char变量，这个二级指针是一个指针变量，是可以移动的
user-0 提问: note: expected ‘int * (*)()’ but argument is of type ‘int’

回复:
user: user-1
content: 贴代码 截屏看不完整

user: user-0
content: 引用 5 楼 lm_whales 的回复:errno 比较特殊，可能会变成 int *(*)() 正解！！ errno被定义正宏了，会变成int *（*）（）型

user: user-2
content: errno 比较特殊，可能会变成 int *(*)()

user: user-3
content: 错误提示说的很明白。 要么多贴点代码。

user: user-0
content: 引用 1 楼 user-4 的回复:参数应该是int * (*)()类型，但你给的是int类型，类型不对 可是我的Logger 第二个参数就是定义int型啊 void Logger(int priority, int errno, char* fmt, ...);

user: user-4
content: 参数应该是int * (*)()类型，但你给的是int类型，类型不对
user-0 提问: 小白刚学c，求助大神

回复:
user: user-1
content: 引用 6 楼 sixto47的回复:[quote=引用 5 楼 paschen 的回复:] 如果要用逗号，scanf那句改成：scanf("%d,%d,%d",&a,&b,&c); 我发个修改版，你再帮我看看到底还有什么问题，谢谢 #include <stdio.h> #include <math.h> int main() {    int a,b,c;    printf("input a,b,c\n");    scanf("%d%d%d",&a,&b,&c);    double  delta;    double  x1;    double  x2;    delta = b * b - 4 * a * c ;    if(delta > 0)    { 	   x1 = (-b - sqrt( delta ))/ (2 * a) ;        x2 = (-b + sqrt( delta ))/(2 * a) ; 	   printf("x1 = %.2f,x2 = %.2f\n",x1,x2) ;    }    else if (delta == 0)    { 	   x1=(-b) / (2 * a ); 	   x2=x1 ; 	   printf("x1 = %.2f,x2 = %.2f\n",x1,x2 ;    }    else     { 	   printf("无解\n");    } } [/quote] printf("x1 = %.2f,x2 = %.2f\n",x1,x2 ;  后面少了一半括号

user: user-0
content: 引用 5 楼 paschen 的回复:如果要用逗号，scanf那句改成：scanf("%d,%d,%d",&a,&b,&c); 我发个修改版，你再帮我看看到底还有什么问题，谢谢 #include <stdio.h> #include <math.h> int main() {    int a,b,c;    printf("input a,b,c\n");    scanf("%d%d%d",&a,&b,&c);    double  delta;    double  x1;    double  x2;    delta = b * b - 4 * a * c ;    if(delta > 0)    { 	   x1 = (-b - sqrt( delta ))/ (2 * a) ;        x2 = (-b + sqrt( delta ))/(2 * a) ; 	   printf("x1 = %.2f,x2 = %.2f\n",x1,x2) ;    }    else if (delta == 0)    { 	   x1=(-b) / (2 * a ); 	   x2=x1 ; 	   printf("x1 = %.2f,x2 = %.2f\n",x1,x2 ;    }    else     { 	   printf("无解\n");    } }

user: user-1
content: 如果要用逗号，scanf那句改成：scanf("%d,%d,%d",&a,&b,&c);

user: user-1
content: 引用 3 楼 sixto47的回复:运行还是有点问题，答案不太对，输入1,2,1    1,5,6依然还是显示无解，上面的代码问题，我是已经改过了 你应该输入 1 2 1  也就是中间用空格隔开，而不是逗号

user: user-0
content: 运行还是有点问题，答案不太对，输入1,2,1    1,5,6依然还是显示无解，上面的代码问题，我是已经改过了

user: user-1
content: else if (delta =0)  改成 else if (delta ==0)  经常写错就写成else if (0 == delta)，这样少了=号编译器会报错

user: user-2
content: 1.printf("input a,b,c/n");应该是printf("input a,b,c\n"); 2.else if (delta = 0)应该是else if (delta == 0)  #include <stdio.h> #include <math.h> int main() { 	int a, b, c; 	printf("input a,b,c\n"); 	scanf("%d%d%d", &a, &b, &c); 	double delta; 	double x1; 	double x2; 	delta = (b*b - 4 * a*c); 	if (delta > 0) 	{ 		x1 = (-b - sqrt(delta) / (2 * a)); 		x2 = (-b + sqrt(delta) / (2 * a)); 		printf("x1=%.2f,   x2=%.2f\n", x1, x2); 	} 	else if (delta == 0) 	{ 		x1 = (-b) / (2 * a); 		x2 = x1; 		printf("x1=%.2f,  x2=%.2f\n", x1, x2); 	} 	else 	{ 		printf("无解”!\n"); 	} 	return 0; }
user-0 提问: 构造数据类型的不解

回复:
user: user-1
content: 这个就是值传递和地址传递的区别了。 值传递时被调函数和主调函数操作的变量并不是同一个。 http://blog.csdn.net/u011045793/article/details/40264263

user: user-2
content: 第二题，数组c传递时退化为指针，指针是值值传递，但指针函数中修改的不是指针，而是指针手电筒的值，故可修改到

user: user-2
content: 第一题 f 函数是按值传递，所以函数中修改的一切都不会反应到主函数中的a，所以显示的仍然是主函数中初始时候的值

user: user-3
content: 因为一个是指针另一个不是啊
user-0 提问: 这是为什么

回复:
user: user-1
content: 可以用codeblocks哦

user: user-2
content: 换visual studio, 好看多了，用起来也更方便

user: user-3
content: 换VS肯定比他看好

user: user-4
content: Ctrl + A  ， Alt + F8

user: user-5
content: 引用 4 楼 qq_36139729的回复:[quote=引用 1 楼 珍惜生命远离CPP的回复:]VC6 ? alt+F8 前面的好了，怎么后面的汉字不会向后移。[/quote] http://bbs.csdn.net/topics/391817815?page=1  可用于VC6

user: user-0
content: 引用 1 楼 珍惜生命远离CPP的回复:VC6 ? alt+F8 前面的好了，怎么后面的汉字不会向后移。

user: user-5
content: 注意代码的缩进等，如果觉得自己控制麻烦，可以下载VAX插件

user: user-6
content: 换成VS，你就比它好看了 http://blog.csdn.net/cometnet/article/details/19551125

user: user-7
content: VC6 ? alt+F8
user-0 提问: 关于c语言结构体初始化的问题

回复:
user: user-1
content: scanf("%s %s %d\n", &Book[i].title, &Book[i].author, &Book[i].book_id);//这样会吃掉输入的回车，回车就不能结束输入了。 //改成   scanf(" %s %s %d", &Book[i].title, &Book[i].author, &Book[i].book_id); //第一个字符串不允许空白，空行等,输入的空白符，会被吃掉 //或者  scanf("%s %s %d", &Book[i].title, &Book[i].author, &Book[i].book_id);//第一个字符串可以是空白，空行等 PS： 输入的时候，开始的回车（等空白符)可以吃掉， 如果不需要输入一行的空格，以及空行等的的话 结尾的回车，不要吃掉，因为scanf 输入，是以回车结束的  如果格式的最后是空白符， 就会把所有输入的空白符吃掉直到输入非空白为止。

user: user-2
content: 你用单步调试看看就知道了。比如第一次输入后，程序到哪里了i=?

user: user-3
content: 将字符串读入字符数组不需要用&

user: user-4
content: 而且你使用scanf需要接着使用个getchar清除掉回车，四处错误，数组个球错误与约束条件错误，已经scanf使用的错误

user: user-4
content: 除了scand有错，你还需要看到你的for里的条件也错了，你的结构体数组知有两个

user: user-5
content: scanf("%s %s %d\n", &Book[i].title, &Book[i].author, &Book[i].book_id);  scanf里面去掉\n  空白字符会使scanf()函数在读操作中略去输入中的一个或多个空白字符，空白符包括空格,\t,\n等等，直到第一个非空白符出现为止。

user: user-6
content: scanf("%s %s %d\n", &Book[i].title, &Book[i].author, &Book[i].book_id);这句里面多了一个'\n'  #include <stdio.h> #include <string.h>  struct Books { 	char  title[50]; 	char  author[50]; 	int   book_id; };  int main() {  	struct Books Book[2]; 	int i, j;  	/*给结构体数组赋值*/ 	for (i = 0; i <= 2; i++) 	{ 		scanf("%s %s %d", &Book[i].title, &Book[i].author, &Book[i].book_id); 	} 	/*显示结构体内容*/ 	for (j = 0; j <= 2; j++) 	{ 		printf("Book[%d] title : %s\nBook[%d] author : %s\nBook[%d] book_id : %d\n", j, Book[j].title, j, Book[j].author, j, Book[j].book_id);  	} 	return 0; }
user-0 提问: vs2013下opencv,运行成功但不显示图片

回复:
user: user-1
content: 这个问题就是没有把图片路径加载正确，可以这样做：运行前先点击运行（空运行），然后在你的VS2010的PROjects中找到刚那个工程，选择刚才那个文件，然后点击进去，知道看到有debug，m.cpp为止，把需要的图片复制进去就可以直接引用了

user: user-2
content: 楼主问题解决了吗？怎么解决的呢

user: user-3
content: 如果确定图片及路径没有问题，在最后加上 return(0); 试试。

user: user-4
content: 我也遇到了 请问楼主最后解决了吗？

user: user-5
content: 遇到了同样的问题，程序运行成功，就是不显示图片，改成绝对路径也还是不显示，请各位大神指教

user: user-6
content: VS的当前目录是指你工程所在目录，不是你的EXE所在目录 改成绝对路径后试试

user: user-7
content: 把你的图片复制到C盘  Mat img = imread("C:\\1.jpg"); imshow("【载入的图片】", img); waitKey(6000);

user: user-8
content: 代码运行完了不代表函数执行成功，检查你路径文件，建议用绝对路径试下

user: user-9
content: Mat img = imread("d:\\mydir\\1.jpg");
user-0 提问: 现在开发c语言的软件是什么

回复:
user: user-1
content: 我们平时用source insight多一些，比vs占据内存小，运行流畅。

user: user-2
content: 手机 VS 可以通过模拟器开发

user: user-2
content: 嵌入式，一般是keil C 或者某一类芯片专用C语言,可能是厂家自行开发的 例如DSP 的就是

user: user-3
content: WINDOWS下可以用VS开发

user: user-4
content: Code::Blocks

user: user-5
content: Dev-cpp

user: user-6
content: VS GCC Clang 其他的就不多了

user: user-7
content: Visual Studio 6/2005/2008/2010/2012/2013 各版本编译器 下载 http://bbs.csdn.net/topics/390812579 Visual C++ 2010 Express简体中文版http://pan.baidu.com/s/1bnwRVLt
user-0 提问: 安装vc6.0出现的问题，求各位大神帮忙

回复:
user: user-1
content: 引用 4 楼 qq_19471959 的回复:[quote=引用 3 楼 zhao4zhong1 的回复:] Visual Studio 6/2005/2008/2010/2012/2013 各版本编译器 下载 http://bbs.csdn.net/topics/390812579 Visual C++ 2010 Express简体中文版http://pan.baidu.com/s/1bnwRVLt  赵老师啊   麻烦推荐下c语言视频嘛[/quote] http://edu.csdn.net/courses/o280_s281

user: user-0
content: 引用 3 楼 zhao4zhong1 的回复:Visual Studio 6/2005/2008/2010/2012/2013 各版本编译器 下载 http://bbs.csdn.net/topics/390812579 Visual C++ 2010 Express简体中文版http://pan.baidu.com/s/1bnwRVLt  赵老师啊   麻烦推荐下c语言视频嘛

user: user-1
content: Visual Studio 6/2005/2008/2010/2012/2013 各版本编译器 下载 http://bbs.csdn.net/topics/390812579 Visual C++ 2010 Express简体中文版http://pan.baidu.com/s/1bnwRVLt

user: user-2
content: 别用VC6了，VC6和现在操作系统兼容不好，对标准支持也不好，15年前的东西了，使用新版VS吧，可以去 MSDN我告诉你 上下载

user: user-3
content: VC6太老了，换成VS http://blog.csdn.net/cometnet/article/details/19551125
user-0 提问: 考研真题 能详细帮我解释一下吗 谢谢了！！！

回复:
user: user-0
content: 谢谢谢谢 我是跨专业考C的 正在努力学习中 谢谢大家了

user: user-1
content: 仅仅是个二进制与10进制转换而已，比如第一次输入2， 第一步，输出(2)10=，第二步,d=2/2;d=1;S=1*2=2; 第三步,调用自己，传递n=1;因为d=1; 第四步,d=1/2=0;if(d==0) e=1; 因为e=1;输出n%M结果(2)10=(1， 因为s=2，不等e；所以这步不执行，返回e, 往下走，从刚才自己调用自己那里出来，因为这里的e不等1, 所以下一步，输出n%M，输出1, 因为S等于e，所以输出), 当前的显示结果是(2)10=(10)2;执行完毕 ，回到main函数,执行return 0；执行完。      自己单步跟踪，不会就画流程图，不然你这样靠什么研，赵老师都救不了你。。

user: user-2
content: 为啥我看到楼上两个，突然笑了

user: user-3

user: user-4
content: 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。  “给定一个小点的输入，完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门！ 递归函数关注以下几个因素 ·退出条件 ·参数有哪些 ·返回值是什么 ·局部变量有哪些 ·全局变量有哪些 ·何时输出 ·会不会导致堆栈溢出

user: user-5
content: 起码说下哪不明白，process函数中递归调用自己  如果还是困惑，建议调试时单步跟踪程序运行观察分析

user: user-6
content: 里面有个递归调用， 递归调用的关键 1.递归结束条件 2.每一轮与上一轮的关系 要是觉得实在不好理解， 下断点自己看吧

user: user-2
content: 大四了都看不懂这个。。。我建议你别考研了。。。
user-0 提问: 输入一个字符串统计并输出其中正整数和负整数的个数以及对应的平均值

回复:
user: user-0
content: 用公式e=1+1/1!+1/2!+1/3!+···+1/n! 计算e的值  #include<stdio.h> void main() {int i,j,n; double e,fac; scanf("%d",&n); for(e=1,i=1;i<=n;i++) {for(fac=1,j=1;j<=i;j++)   fac=fac*i; e=e+1/fac;} printf("%.20lf\n",e); }   继续求解救啊亲们，输入的n为100都只能得出2.29几结果

user: user-0
content: 引用 3 楼 user-1 的回复:[quote=引用 2 楼 popowa的回复:]好吧，我知道了，是ab没赋初值······ 编译没有报错,  编译器不行…[/quote] 额，当初因为安不好，就装了一个绿色版

user: user-1
content: 引用 8 楼 popowa的回复:[quote=引用 6 楼 user-1 的回复:] [quote=引用 5 楼 popowa的回复:]用公式e=1+1/1!+1/2!+1/3!+···+1/n! 计算e的值  #include<stdio.h> void main() {int i,j,n; double e,fac; scanf("%d",&n); for(e=1,i=1;i<=n;i++) {for(fac=1,j=1;j<=i;j++)   fac=fac*i; e=e+1/fac;} printf("%.20lf\n",e); }   继续求解救啊亲们，输入的n为100都只能得出2.29几结果 第二个for用j，还有就是程序的书写规范，注意缩进，老师，应给上课强调的，这样程序可读性就强！[/quote]  我错了！我好像搞错了阶乘要求的东西了！ 是的，就是把fac*i改成fac*j [/quote] 恩，哈哈，考计算机二级的话，学点基础的，在学点指针，应该就可以了！

user: user-0
content: 引用 6 楼 user-1 的回复:[quote=引用 5 楼 popowa的回复:]用公式e=1+1/1!+1/2!+1/3!+···+1/n! 计算e的值  #include<stdio.h> void main() {int i,j,n; double e,fac; scanf("%d",&n); for(e=1,i=1;i<=n;i++) {for(fac=1,j=1;j<=i;j++)   fac=fac*i; e=e+1/fac;} printf("%.20lf\n",e); }   继续求解救啊亲们，输入的n为100都只能得出2.29几结果 第二个for用j，还有就是程序的书写规范，注意缩进，老师，应给上课强调的，这样程序可读性就强！[/quote]  我错了！我好像搞错了阶乘要求的东西了！ 是的，就是把fac*i改成fac*j

user: user-0
content: 额，第二个for是用的 j 啊，额缩进好像也差不多是那样了吧，可是问题到底出在哪？

user: user-1
content: 引用 5 楼 popowa的回复:用公式e=1+1/1!+1/2!+1/3!+···+1/n! 计算e的值  #include<stdio.h> void main() {int i,j,n; double e,fac; scanf("%d",&n); for(e=1,i=1;i<=n;i++) {for(fac=1,j=1;j<=i;j++)   fac=fac*i; e=e+1/fac;} printf("%.20lf\n",e); }   继续求解救啊亲们，输入的n为100都只能得出2.29几结果 第二个for用j，还有就是程序的书写规范，注意缩进，老师，应给上课强调的，这样程序可读性就强！

user: user-1
content: 引用 2 楼 popowa的回复:好吧，我知道了，是ab没赋初值······ 编译没有报错,  编译器不行…

user: user-0
content: 好吧，我知道了，是ab没赋初值······

user: user-0
content: 有没有人救救我