Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 如何将特定列的数值对齐

回复:
user: user-0
content: 非常感谢，写出来了！！！！  引用 4 楼 zhangxiangDavaid 的回复:这样可好：  FILE *fi, *fo; double d1, d2, d3; int r; int main(void) { 	if (NULL == (fi = fopen("1.txt", "r"))) 	{ 		fprintf(stderr, "Can not open file : 1.txt\n"); 		return 1; 	} 	if (NULL == (fo = fopen("2.txt", "w"))) 	{ 		fprintf(stderr, "Can not open file : 2.txt\n"); 		fclose(fi); 		return 1; 	} 	while (1) 	{ 		r = fscanf(fi, "%lf%lf%lf", &d1, &d2, &d3); 		if (3 == r) fprintf(fo, "%lg %lg %-lg\n", d1, d2, d3); 		else break; 	} 	fclose(fi); 	fclose(fo); 	return 0; } //12915 8105 - 27.52 //12925 8105 - 27.87 //13005 8105 - 9.46 //13015 8105 - 9.92 //13025 8105 - 31.77 //13035 8105 - 32.66 //13045 8105 - 33.62 //13115 8105 - 39.33 //13125 8105 - 9.05 //13135 8105 - 9.85 //13145 8105 - 9.54 //13155 8105 - 9.12 //13165 8105 - 9.69 //13175 8105 - 9.23 //13185 8105 - 43.48 //13195 8105 - 43.67 //13205 8105 - 43.85 //13215 8105 - 44.05 //13225 8105 - 44.25 //13235 8105 - 44.44 //13245 8105 - 44.64 //13255 8105 - 44.84 //13265 8105 - 45.03 //13275 8105 - 45.23 //13285 8105 - 45.43 //13295 8105 - 45.62

user: user-0
content: 非常感谢，写出来了！！！！   引用 5 楼 zysoul 的回复:不是啊，因为我要把数据弄去一个软件处理，但是软件很傻，必须得格式对齐，不然都是NULL。 我算了的，空格是每个数字为4个空格，主要是第3列的-9.xxx类的，比1其他数字少个十位数，所以负号没对齐。 有什么办法可以整吗？求指点。。谢谢  [quote=引用 3 楼 wenpinglaoyao 的回复:] 针对第三个负号的数列，自己单写一个输出函数不就行了  怎么写呢？  引用 1 楼 zhao4zhong1 的回复:人家本来是按小数点对齐的，楼主自作聪明非要按整个字符串左对齐，这不是历史的倒退吗？ 况且每列数据间空格个数不同，丝毫不影响cin或scanf系列函数读取数据。[/quote]

user: user-0
content: 不是啊，因为我要把数据弄去一个软件处理，但是软件很傻，必须得格式对齐，不然都是NULL。 我算了的，空格是每个数字为4个空格，主要是第3列的-9.xxx类的，比1其他数字少个十位数，所以负号没对齐。 有什么办法可以整吗？求指点。。谢谢  引用 3 楼 wenpinglaoyao 的回复:针对第三个负号的数列，自己单写一个输出函数不就行了  怎么写呢？  引用 1 楼 zhao4zhong1 的回复:人家本来是按小数点对齐的，楼主自作聪明非要按整个字符串左对齐，这不是历史的倒退吗？ 况且每列数据间空格个数不同，丝毫不影响cin或scanf系列函数读取数据。

user: user-1
content: 这样可好：  FILE *fi, *fo; double d1, d2, d3; int r; int main(void) { 	if (NULL == (fi = fopen("1.txt", "r"))) 	{ 		fprintf(stderr, "Can not open file : 1.txt\n"); 		return 1; 	} 	if (NULL == (fo = fopen("2.txt", "w"))) 	{ 		fprintf(stderr, "Can not open file : 2.txt\n"); 		fclose(fi); 		return 1; 	} 	while (1) 	{ 		r = fscanf(fi, "%lf%lf%lf", &d1, &d2, &d3); 		if (3 == r) fprintf(fo, "%lg %lg %-lg\n", d1, d2, d3); 		else break; 	} 	fclose(fi); 	fclose(fo); 	return 0; } //12915 8105 - 27.52 //12925 8105 - 27.87 //13005 8105 - 9.46 //13015 8105 - 9.92 //13025 8105 - 31.77 //13035 8105 - 32.66 //13045 8105 - 33.62 //13115 8105 - 39.33 //13125 8105 - 9.05 //13135 8105 - 9.85 //13145 8105 - 9.54 //13155 8105 - 9.12 //13165 8105 - 9.69 //13175 8105 - 9.23 //13185 8105 - 43.48 //13195 8105 - 43.67 //13205 8105 - 43.85 //13215 8105 - 44.05 //13225 8105 - 44.25 //13235 8105 - 44.44 //13245 8105 - 44.64 //13255 8105 - 44.84 //13265 8105 - 45.03 //13275 8105 - 45.23 //13285 8105 - 45.43 //13295 8105 - 45.62

user: user-2
content: 针对第三个负号的数列，自己单写一个输出函数不就行了

user: user-0
content: 不是啊，因为我要把数据弄去一个软件处理，但是软件很傻，必须得格式对齐，不然都是NULL。 我算了的，空格是每个数字为4个空格，主要是第3列的-9.xxx类的，比1其他数字少个十位数，所以负号没对齐。 有什么办法可以整吗？求指点。。谢谢

user: user-3
content: 人家本来是按小数点对齐的，楼主自作聪明非要按整个字符串左对齐，这不是历史的倒退吗？ 况且每列数据间空格个数不同，丝毫不影响cin或scanf系列函数读取数据。
user-0 提问: 跪求大神，gcc编译问题

回复:
user: user-0
content: 看来只能改代码了，感谢2楼 user-3 给的方法，分每人都给了。

user: user-1
content: 没有这个选项，改代码去吧 http://stackoverflow.com/questions/10526602/is-there-a-gcc-flag-to-initialise-local-variable-storage

user: user-0
content: 引用 3 楼 zhao4zhong1 的回复:-finit-local-zero       Initialize local vars and arrays to zero -fzeros                 Treat initial values of 0 like non-zero values 老师再问一下，-fzeros是哪个工具里的？没搜到相关信息。。

user: user-0
content: 引用 2 楼 user-3 的回复:恭喜你，gcc没有这种选项，你只能改代码了。编译时加上 -Wuninitialized 选项，再加上-O选项（-O1 -O2 -O3），然后编译器发现未初始化变量就会报警告，你可以根据警告改代码。  倒不是我不想这样做，主要是太多了，看着就整个人都不好了。。

user: user-0
content: 引用 3 楼 zhao4zhong1 的回复:-finit-local-zero       Initialize local vars and arrays to zero -fzeros                 Treat initial values of 0 like non-zero values 老师，这2个选项我man gcc后没看到，其他的zero的我都看了下，好像也没有，然后百度了下，好像是有 gfortran -finit-local-zero x的用法，然后我也用了，但是gfortran也报没有这个 -finit-local-zero的选项，版本是4.1.2，请问，这个要用哪个版本才能有该选项，或者要加什么组件？  多谢。

user: user-2
content: 引用 3 楼 zhao4zhong1 的回复:-finit-local-zero       Initialize local vars and arrays to zero -fzeros                 Treat initial values of 0 like non-zero values  Options for Fortran:    -finit-local-zero       Initialize local vars and arrays to zero    -fzeros                 Treat initial values of 0 like non-zero values Linux不是开源的吗？楼主高兴了在Linux加载ELF文件对应源代码中打个将无需初始化段内容清零的补丁，在gcc编译生成call函数调用之前将堆栈中临时变量清零的补丁。

user: user-2
content: gcc -v --help

user: user-2
content: -finit-local-zero       Initialize local vars and arrays to zero -fzeros                 Treat initial values of 0 like non-zero values

user: user-3
content: 恭喜你，gcc没有这种选项，你只能改代码了。编译时加上 -Wuninitialized 选项，再加上-O选项（-O1 -O2 -O3），然后编译器发现未初始化变量就会报警告，你可以根据警告改代码。

user: user-0
content: 来大神。。。绝望ing。。。
user-0 提问: typedef const struct定义的结构体如何具体使用？

回复:
user: user-1
content: 楼上的正解，要传地址

user: user-2
content: MessageCreate的第一个参数接收地址，所以应该这样调用  MessageCreate（&aabb, ccdd）;

user: user-3
content: M_essage aabb[1];
user-0 提问: configure中出现有关CFLAGS的问题

回复:
user: user-1
content: CFLAGS 是c的编译器参数设置 LDFLAGS 是链接库的路径

user: user-2
content: 看起来是./configure成功结束

user: user-3
content: 搜“跟我一起写makefile”

user: user-4
content: 一般来说不是，有的configure脚本会在最后打印出配置的参数以供确认。 当然，在没有完整的log之前并不能判断
user-0 提问: 求数组的长度——函数调用咋不行哈【我太菜了描述不好<相信你们应该能理解】

回复:
user: user-1
content: # include <stdio.h>  void f (int a []) {     printf ("%d\n", * a);     printf ("%d\n", a [1]); }  int main (void) {     /* 俺决定用数组第一个元素来存放数组大小，嘎嘎！*/     int a [3] = {sizeof a,};     f (a); }

user: user-2
content: 引用 7 楼 u013966434 的回复:[quote=引用 6 楼 mingliang37 的回复:] 数组作为参数传递给函数退化为指针，所以无法用函数来求数组的长度。 终于有人懂我的意思了-------------------------你能确定不行[/quote] C里面真不行

user: user-1
content: 引用 13 楼 cao_julians 的回复:[quote=引用 10 楼 sholber 的回复:] # include <stdio.h>  int n;  void f (int a [n]);  int main (void) {     int a [n = 3];     a [0] = 1;     a [1] = 3;     a [2] = 5;     f (a); }  void f (int a [n]) {     /*     **在这里，a依然被转换为指针，但传递进来的n可以使用。     **数组的大小在它在存续期间不会改变，即使改变了n的值。     */     while (n --)         printf ("%d\n", a [n]); }  是Ｃ10的新特性？Ｃ89和Ｃ99里没有吧？[/quote]  C99的，不过跟你的问题关系不大，我写着玩的。

user: user-3
content: 引用 10 楼 sholber 的回复:# include <stdio.h>  int n;  void f (int a [n]);  int main (void) {     int a [n = 3];     a [0] = 1;     a [1] = 3;     a [2] = 5;     f (a); }  void f (int a [n]) {     /*     **在这里，a依然被转换为指针，但传递进来的n可以使用。     **数组的大小在它在存续期间不会改变，即使改变了n的值。     */     while (n --)         printf ("%d\n", a [n]); }  是Ｃ10的新特性？Ｃ89和Ｃ99里没有吧？

user: user-0
content: 引用 6 楼 mingliang37 的回复:数组作为参数传递给函数退化为指针，所以无法用函数来求数组的长度。 终于有人懂我的意思了-------------------------你能确定不行

user: user-4
content: 数组作为参数传递给函数退化为指针，所以无法用函数来求数组的长度。

user: user-5
content: 当然可以的啊。。 len = sizeof(a) / sizeof(&a[0])

user: user-6
content: 引用 2 楼 u013966434 的回复:你讲的 我能理解 但我想知道能否通过函数调用也可以去实现求数组的长度————能不能 谢谢啦 一般这样，void fun(int *arr, int n);     //n是数组的大小

user: user-7
content: 引用 2 楼 u013966434 的回复:你讲的 我能理解 但我想知道能否通过函数调用也可以去实现求数组的长度————能不能 谢谢啦 把数组地址传给函数在函数里面是无法计算出数组大小的，因为函数的形参不管定义成数组或者指针，其本质都是指针，所以在函数里面用sizeof计算出来的是指针的大小，而不是数组的大小。

user: user-0
content: 你讲的 我能理解 但我想知道能否通过函数调用也可以去实现求数组的长度————能不能 谢谢啦

user: user-3
content: 数组名a在不同的场合中表示的意义不同，比较普遍的是表示数组首元素的指针，即a表示&a[0]; 另外很固定的场合是&a 和sizeof(a),a表示整个数组。  因此，代码第七行len得到了整个数组的字节数。 而下一行向L函数传递的是首元素的指针&a[0], 函数实参t指向了首元素a[0],函数中sizeof(*t)得到是首元素a[0]的字节数。  关于数组名的语义不同是C语言的难点，【C与指针】讲解的很好

user: user-8
content: 只能传数组地址，函数是求不出来长度的。

user: user-1
content: 纠正一下措辞，不是传进来的喔。

user: user-1
content: # include <stdio.h>  int n;  void f (int a [n]);  int main (void) {     int a [n = 3];     a [0] = 1;     a [1] = 3;     a [2] = 5;     f (a); }  void f (int a [n]) {     /*     **在这里，a依然被转换为指针，但传递进来的n可以使用。     **数组的大小在它在存续期间不会改变，即使改变了n的值。     */     while (n --)         printf ("%d\n", a [n]); }

user: user-9
content: C++中的数组不记录数组长度的，通常想把一个数组传入函数，还需要传入这个数组的长度  除非你自己写一个类来管理，类似标准模板库中的string类管理char数组

user: user-10
content: 正规的C语言 对于int L(int *t)是绝对不可能获得t数组的长度的。  在C实现中，只能用替代办法。
user-0 提问: 程序不能再别人的电脑上正常使用

回复:
user: user-1
content: 引用 12 楼 qq_25235869 的回复:@paschen 什么是静态链接？？  常规中选择在静态链接库中使用MFC，在C/C++代码生成里的运行库选择为MTd/MT

user: user-0
content: @paschen 什么是静态链接？？

user: user-1
content: 如果你是托管的C++，他电脑上得安装了相应版本的.net才能运行

user: user-1
content: 使用静态链接，否则有些电脑会缺少msvcrXXX.dll等

user: user-0
content: @zhao4zhong1 这样回答好不好  比如locale.h文件包含了那些东西？ setlocale(LC_ALL,"chs");这个文件还可以有哪些参数？

user: user-2
content: 首先记得要编译成release的，而不是DEBUG的，其次，他的电脑要有VC运行库

user: user-3
content: 引用 9 楼 qq_25235869 的回复:@zhao4zhong1 这样回答好不好  比如locale.h文件包含了那些东西？ setlocale(LC_ALL,"chs");这个文件还可以有哪些参数？ 自己打开include\locale.h看不就行了。

user: user-4
content: 谁不让你的程序在他的电脑上用，拉过来打一顿。  gcc ... -finput-charset =utf-8   -fexec-charset=gbk

user: user-3
content: #include <locale.h> #include <stdio.h> int main() {  setlocale(LC_ALL,"chs");  printf("汉字不乱码\n");  return 0; }

user: user-0
content: @zhao4zhong1 你放上来的代码 可以解释一下吗？？

user: user-3
content: 用depends.exe查看exe依赖的dll  在你的代码中添加： #include <locale.h> setlocale(LC_ALL,"chs");

user: user-5
content: 你在别人的电脑上运行以后，看下缺少什么文件，这个东西叫做动态链接库，缺少什么就在你电脑的环境中找什么文件，然后复制到可运行程序的文件夹下，然后就可以运行了，可能会出现多个缺少文件，耐心调试。

user: user-6
content: 别人的机器和你的不一样，需要一些vc的文件

user: user-7
content: 因为用到了 一些 动态库吧 没有安装开发环境的机器就不能正常使用了 把用到的动态库放在程序同一个目录里一起拷贝
user-0 提问: C语言新手入门题目，求大神指导

回复:
user: user-1
content: 修改如下：  int main() { 	int i, j, m, k, l; 	//int a[20]; 	int a[1000]; 	for (i = 2; i <= 1000; i++) 	{ 		k = l = 0; 		memset(a, 0, sizeof(int) * 1000); 		for (j = 1; j < i; j++) 		{ 			if (i % j == 0) 			{ 				a[k] = j; 				l += a[k]; 				k++; 			} 		} 		if (l == i) 		{ 			printf("%d its facrors are ", i); 			for (m = 0; a[m + 1]; m++) 				printf("%d,", a[m]); 			printf("%d\n", a[m]); 		} 	} 	return 0; } //6 its facrors are 1, 2, 3 //28 its facrors are 1, 2, 4, 7, 14 //496 its facrors are 1, 2, 4, 8, 16, 31, 62, 124, 248

user: user-2
content: if (l == i) 		{ 			printf("%d its facrors are", i); 			for (m = 0; m<k; m++) 				printf("%d,", a[m]);

user: user-2
content: 设个断点调试。 l += a[k];这句话中k越界了，你数组a只有20个空间，k远远大于20
user-0 提问: 怎么样用VC实现，已知若干离散点，用圆弧拟合，求出圆心坐标和半径

回复:
user: user-1
content: 自己用几何不能实现吗,就几个公式, 两根弦,中心线交叉,得到圆心......

user: user-2
content: 圆弧拟合 源码 http://www.baigoogledu.com/s.php?hl=zh-CN&q=%D4%B2%BB%A1%C4%E2%BA%CF+%D4%B4%C2%EB
user-0 提问: 菜鸟请教广工一道OJ题

回复:
user: user-1
content: 你两层for当然TLE啊，看看n有多大。这题显然要做线性算法

user: user-0
content: 引用 1 楼 user-1 的回复:你两层for当然TLE啊，看看n有多大。这题显然要做线性算法  谢谢你的回复
user-0 提问: 结构体中点号

回复:
user: user-1
content: vs下，也可使用  struct Data { 	int a; 	int b; }; int main(void) { 	struct Data d = 	{ 		.a = 12, 		.b = 13, 	}; 	printf("d.a=%d,d.b=%d\n", d.a, d.b); 	return 0; }

user: user-0
content: 如果在使用这个结构体GT2005_plat 时，使用方法还是和普通的初始化方式一样吧

user: user-2
content: 2L 正解，  内核里到处是这种代码。

user: user-3
content: 这是GCC的扩展语法，为了方便初始化 .后面的都是结构体成员名字

user: user-0
content: 是不是对一个结构体变量的初始化。
user-0 提问: 关于同一个程序不同编译器下运行结果不同的问题

回复:
user: user-0
content: 引用 5 楼 u014444402 的回复:lf的问题吧。换成f就成了。 为什么呢？？？

user: user-1
content: 有没有其它的代码干扰？

user: user-2
content: lf的问题吧。换成f就成了。

user: user-0
content: 引用 1 楼 zhangxiangDavaid 的回复:意外，匪夷所思，你再试试 确定，每次的结果都是啊

user: user-0
content: 引用 1 楼 zhangxiangDavaid 的回复:意外，匪夷所思，你再试试  试了好几次了

user: user-3
content: 不大可能吧 你确定codeblocks执行的代码是这个？

user: user-1
content: 意外，匪夷所思，你再试试
user-0 提问: 结构体在主函数之上定义如何在文件子函数中使用 Dev c++

回复:
user: user-0
content: 那个#include后面的"另一个.c"是我用的文件包含啊.

user: user-1
content: 你把main函数放在最底下就可以了啊，还有，你为什么会include一个.c文件

user: user-2
content: 将相关头文件添加到当前项目中。

user: user-3
content: 你前面的是struct stu，而在函数lingyige() 中的是struct student 如图：

user: user-0
content: 3楼说的我知道错了,但是我又修改了错误,还是和原来的错误一样````而且,我在做的另一个包括很多子程序的这种形式主函数,结构也不能用.

user: user-4
content: 编译器问题，可以这样使用：  struct stu { 	int a; 	char b; }; int main(void) { 	//声明struct stu类型的变量 	struct stu s; 	s.a = 12; 	s.b = 13; 	return 0; }

user: user-0
content: 但是我想用的是文件子函数.....
user-0 提问: 求助：嗯！代吗现在读写数字并保存进文件可以了，但当名字改成汉字时就会不能输出原始数据了

回复:
user: user-1
content: 程序员的常识之一：不要将程序源代码或项目或exe放在桌面这种复杂（多半带空格和汉字且在防火墙或杀毒软件严密控制的C盘上）的目录下。

user: user-2
content: 打开文件前 加上这个试试  std::locale::global(std::locale("")); 另外路径少用中文
user-0 提问: opengl 的画曲线函数 gluNurbsCurve（）的控制点二维数组怎么赋值？

回复:
user: user-1
content: 引用 2 楼 guoyunfei1 的回复:谢谢啊 百万军中取上将首级如探囊取物，千万行里改关键源码在弹指瞬间。

user: user-0
content: 谢谢啊

user: user-1
content: GLfloat ** ctrlpoints;       //new 一个动态二维数组     ctrlpoints = new float * [9];     for (i = 0;i < 9;i++)         ctrlpoints[i]= new float [3]; 改成 GLfloat *ctrlpoints;       //new 一个动态二维数组     ctrlpoints = new float [9*3];  for(i=0;i<9;i++)          //给二维数组赋值     {         for(j=0;j<3;j++)         {           ctrlpoints[i*3+j] = buffCtlPts[i][j] ; //把控制点数据传给变量         }     } 试试看
user-0 提问: 关于调试

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

user: user-2
content: F9设断点，F5运行，F10单步执行，F11进入函数，好了差不多这样，然后看看监视器。

user: user-3
content: 网上搜呗。如：vs调试技巧

user: user-4
content: 调试没有技巧，在你觉得有问题的地方下断点，查看局部变量运行到此处的值，是否异常。其它变量watch
user-0 提问: 关于循环链表解决约瑟夫环的问题

回复:
user: user-1
content: 代码有内存泄露的问题，值得注意

user: user-1
content: 修改如下：  void JOSEPHU(int n, int m) { 	int i, j; 	list = NULL; 	for (i = 1; i <= n; i++) 	{ 		p = (struct node*)malloc(sizeof(node)); 		p->data = i; 		if (list == NULL) 			list = p; 		else 			r->next = p; 		r = p; 	} 	p->next = list;    /*建立一个循环链表*/ 	p = list; 	for (i = 1; i <= n; i++) 	{ 		printf("%d  ", p->data); 		p = p->next; 	} 	printf("\n"); /*打印链表,并检查循环链表是不输入正确*/ 	for (i = 1; i<n; i++) 	{ 		for (j = 1; j<m; j++) 		{ 			r = p; 			p = p->next; 		} 		printf("出局人:%d\n", p->data); 		r->next = p->next; 		p = p->next;     //加一句 	} }
user-0 提问: 求解

回复:
user: user-1
content: …………………… #include <stdio.h>  int main(void) { 	int a, b; 	while (scanf("%d+%d", &a, &b) != EOF) 	{ 		printf("%d\n", a+b); 	} 	return 0; }

user: user-2
content: 修改后， 15行   n = strlen(A) > strlen(B) ? strlen(A) : strlen(B);  多余

user: user-2
content: 有bug，修改如下：  char A[4], B[4]; int main(void)//39 { 	int i, j, n; 	i = j = 0; 	char str[10]; 	scanf("%s", str);  	while ('+' != str[i]) i++; 	i--; 	while (i > -1) A[j++] = str[i--]; 	i = strlen(str) - 1; 	j = 0; 	while ('+' != str[i]) B[j++] = str[i--]; 	n = strlen(A) > strlen(B) ? strlen(A) : strlen(B); 	if (strlen(A) >= strlen(B)) 	{ 		for (i = 0; i < strlen(B); i++) 		{ 			j = A[i] - '0' + B[i] - '0'; 			A[i] = j % 10 + '0'; 			A[i + 1] += j / 10; 		} 		i = strlen(A) - 1; 		while (i > -1) printf("%c", A[i--]); 	} 	else 	{ 		for (i = 0; i < strlen(A); i++) 		{ 			j = A[i] - '0' + B[i] - '0'; 			B[i] = j % 10 + '0'; 			B[i + 1] += j / 10; 		} 		i = strlen(B) - 1; 		while (i > -1) printf("%c", B[i--]); 	} 	printf("\n"); 	return 0; }

user: user-2
content: 这样可好：  char A[4], B[4]; int main(void) { 	int i, j, n; 	i = j = 0; 	char str[10]; 	scanf("%s", str); 	while ('+' != str[i]) i++; 	i--; 	while (i > -1) A[j++] = str[i--]; 	i = strlen(str) - 1; 	j = 0; 	while ('+' != str[i]) B[j++] = str[i--]; 	n = strlen(A) > strlen(B) ? strlen(A) : strlen(B); 	for (i = 0; i < n; i++) 	{ 		j = A[i] - '0' + B[i] - '0';  		A[i] = j % 10 + '0';  		if (j >= 10) A[i + 1] += j / 10; 	} 	i = strlen(A) - 1; 	while (i > -1) printf("%c", A[i--]); 	printf("\n"); 	return 0; }
user-0 提问: malloc的使用？

回复:
user: user-1
content: 其实电脑开机后物理内存的每个字节都是可读写的，从来不会因为所谓的new、delete或malloc、free而被创建、销毁。区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页，一页通常为4KB。  借邻居家一分地种菜，为什么我刚才种了一亩，邻居家也没来人痛扁我呢？

user: user-2
content: 开车要求系安全带，但你想偷懒就是不系，结果开了几次发现没啥事，但反过来不能说明不系安全带就是正确的。对于你系不系安全带的问题，交警部门也不可能在每辆车启动时来检查你有没有系安全带。说的有点罗嗦，自己体会吧。

user: user-3
content: 不要违法操作，虽然不一定出事，但做多了，一定会出事。

user: user-0
content: 引用 楼主 liguanjun09050642 的回复:按照某课本写的栈，用函数malloc将预分配空间设置为1，为什么输入10个数字没有报错？ #include <iostream> using namespace std; #include <stdlib.h>  #define SInitSize 1 #define SizeIncrese 10 #define OVERFLOW 1  typedef  int SElemType ; typedef int Status;  struct Stack {     SElemType *top;     SElemType *base;     int StackSize; };  void InitStack(Stack &s) {     s.base=(SElemType *)malloc(SInitSize*sizeof(SElemType));     if(!s.base)         exit(OVERFLOW);     s.top=s.base; }  void Push(Stack &s, const SElemType e) { /*    if(s.top-s.base>=s.StackSize)         s.base=(SElemType *)realloc(s.base,(s.StackSize+SizeIncrese)*sizeof(SElemType));     if(!s.base)         exit(OVERFLOW); */     *s.top=e;     ++s.top; }  Status Pop(Stack &s, SElemType &e) {     if(s.top==s.base)         return 0;     --s.top;     e=*s.top;     return 1; }  void Print(const Stack &s) {     SElemType *currptr=s.top;     while(currptr!=s.base)     {         --currptr;         cout<<*currptr<<' ';      } }  int main() {     Stack s;     InitStack(s);     SElemType e;     while(cin>>e)         Push(s,e);     Print(s);      return 0; }   引用 1 楼 zhangxiangDavaid 的回复:意外，不可依赖 引用 2 楼 user-4 的回复:别写这种风格的代码..  C 不C  C++不C++的 溢出没报错是因为你颜值高，人品好我是小白

user: user-4
content: 别写这种风格的代码..  C 不C  C++不C++的 溢出没报错是因为你颜值高，人品好

user: user-3
content: 意外，不可依赖
user-0 提问: 函数指针， gcc编译报错

回复:
user: user-1
content: pfAppy 最后一个参，搞错了吧  ( ...., pvExtra);   // 没有*  (一般函数指针都习惯直接用)  /// --------------- 乱码..!!!!!  把终端的显示编码调一下。

user: user-2
content: 直接pfApply()
user-0 提问: 来大神帮帮忙，如下程序是文件的写入部分形式，怎么按照写入格式读取出来再写入到文本文件？？

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

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

user: user-1
content: 引用 3 楼 qq_28058879 的回复:求大神们    不要用数组的   不知道 有几个值 malloc,realloc,free

user: user-0
content: 求大神们    不要用数组的   不知道 有几个值

user: user-0

user: user-0
content: bool save_to_file(const char *filename) {  	int i; 	FILE *fp; 	size_t written;  	double dx = m_dx * m_spatial_scale; 	double dy = m_dy * m_spatial_scale; 	double dz = m_dz * m_spatial_scale;   	if (m_buf_idx == NULL) return false;  	fp = fopen(filename, "wb"); 	if (!fp) return false;   	//nx,ny,nz 	fwrite(&m_numx, sizeof(int), 1, fp); 	fwrite(&m_numy, sizeof(int), 1, fp); 	fwrite(&m_numz, sizeof(int), 1, fp); 	//dx, dy, dz 	for (i = 0; i < m_numx; i++) { 		fwrite(&dx, sizeof(double), 1, fp); 	} 	for (i = 0; i < m_numy; i++) { 		fwrite(&dy, sizeof(double), 1, fp); 	} 	for (i = 0; i < m_numz; i++) { 		fwrite(&dz, sizeof(double), 1, fp); 	} 	//material index buf 	//m_bufsize = m_numx * m_numy * m_numz; 	written = fwrite(m_buf_idx, sizeof(uint16_t), m_bufsize, fp); 	//material index buf 	fclose(fp);  	if (written != m_bufsize) return false;  	return true; }   这是写入的函数

user: user-2
content: char *filename = "1.txt"; #define m_bufsize 4 typedef unsigned __int16 uint16_t; int write() { 	FILE *fp; 	size_t written; 	fp = fopen(filename, "wb"); 	if (!fp) return 0; 	unsigned __int16 m_buf_idx[4] = { 12, 14, 16, 18 }; 	//material index buf 	//m_bufsize = m_numx * m_numy * m_numz; 	written = fwrite(m_buf_idx, sizeof(uint16_t), m_bufsize, fp); 	//material index buf 	fclose(fp);  	if (written != m_bufsize) return 0; 	return 1; } int read() { 	FILE *fp; 	size_t readn; 	fp = fopen(filename, "rb"); 	if (!fp) return 0; 	uint16_t m_buf_idx[m_bufsize]; 	readn = fread(m_buf_idx, sizeof(uint16_t), m_bufsize, fp); 	fclose(fp); 	if (readn != m_bufsize) return 0; 	//写入新的文件 	fp = fopen("2.txt", "wb"); 	if (!fp) return 0; 	size_t written; 	written = fwrite(m_buf_idx, sizeof(uint16_t), m_bufsize, fp); 	fclose(fp); 	if (written != m_bufsize) return 0; 	return 1; } int main(void) { 	if (write()) printf("write success\n"); 	else printf("write fail\n"); 	if (read()) printf("read success\n"); 	else printf("read fail\n");  	return 0; }
user-0 提问: 菜鸟请教为什么会得到runtime error

回复:
user: user-0
content: 引用 6 楼 brookmill 的回复:你们两个的代码，在输入“20 9”的时候结果不一样。 我把你的这一行  sum=sum+k*(shang/xia); 改成            fact = k*(shang/xia);    sum=sum+fact; 这样结果就一样了。 至于为什么，我也不知道，可能是浮点数计算的误差造成的。  你好，按你的改了，但提交后还是Runtime Error，按OJ返回的这个结果可能是除数为0，但个人又觉得不太可能，请问你觉得会不会有可能

user: user-1
content: 你们两个的代码，在输入“20 9”的时候结果不一样。 我把你的这一行  sum=sum+k*(shang/xia); 改成            fact = k*(shang/xia);    sum=sum+fact; 这样结果就一样了。 至于为什么，我也不知道，可能是浮点数计算的误差造成的。

user: user-0
content: 引用 3 楼 brookmill 的回复:直接算pow(x,i)/(t!)肯定会爆的。 我觉得应该分步计算，大致像是类似这样：x/(1*2*3)*x/(4*5)……但是又涉及到精度控制，我也没想好具体应该怎么做。  这是我同学的代码，感觉我的跟他的思路差不多，但为什么他提交就对而我却是错的呢，请问我们两个的代码哪里不一样呢？  #include<stdio.h> #include<math.h> int main() {     double sinx,x;     int n;     while(scanf("%lf%d",&x,&n)!=EOF)     {         double fenzi,fenmu,xiang,flag,k;         int i,j;         flag=-1;         sinx=0;         k=pow(10,-n);         i=1;         xiang=1;         while(fabs(xiang)>=k)         {             flag=-1*flag;             fenmu=1;             fenzi=pow(x,2*i-1);              for(j=1;j<=2*i-1;j++)             fenmu=fenmu*j;              xiang=flag*(fenzi/fenmu);              sinx=sinx+xiang;             i++;         }       printf("%.*lf\n",n,sinx);     }     return 0; }

user: user-2
content: 看来是一个数据范围的问题

user: user-1
content: 直接算pow(x,i)/(t!)肯定会爆的。 我觉得应该分步计算，大致像是类似这样：x/(1*2*3)*x/(4*5)……但是又涉及到精度控制，我也没想好具体应该怎么做。

user: user-1
content: 这样直接算阶乘，fact的结果会爆表吧。 注意题目说x是任意实数，那么当x很大的时候pow(x,i)就会超出double的范围了

user: user-2
content: 看不出有啥子问题
user-0 提问: fscanf的用法

回复:
user: user-1
content: Read formatted data from a stream. More secure versions of these functions are available; see fscanf_s, _fscanf_s_l, fwscanf_s, _fwscanf_s_l. Parameters stream Pointer to FILE structure. format Format-control string. argument Optional arguments. locale The locale to use. Return Value Each of these functions returns the number of fields successfully converted and assigned; the return value does not include fields that were read but not assigned. A return value of 0 indicates that no fields were assigned. If an error occurs, or if the end of the file stream is reached before the first conversion, the return value is EOF for fscanf and fwscanf. These functions validate their parameters. If stream or format is a null pointer, the invalid parameter handler is invoked, as described in Parameter Validation. If execution is allowed to continue, these functions return EOF and set errno to EINVAL. Remarks The fscanf function reads data from the current position of stream into the locations given by argument (if any). Each argument must be a pointer to a variable of a type that corresponds to a type specifier in format. format controls the interpretation of the input fields and has the same form and function as the format argument for scanf; see scanf for a description of format. fwscanf is a wide-character version of fscanf; the format argument to fwscanf is a wide-character string. These functions behave identically identically if the stream is opened in ANSI mode. fscanf doesn't currently support input from a UNICODE stream. The versions of these functions with the _l suffix are identical except that they use the locale parameter passed in instead of the current thread locale.

user: user-1
content: fscanf()是读 fprintf()是写  #include<stdio.h> int main(void) { 	FILE * Testfscanf; 	char name[15] = "Testfscanf";  	if ((Testfscanf = fopen("Testfscanf.txt", "a+")) == NULL) { 		fprintf(stderr, "error"); 	} 	//fscanf(Testfscanf, "%s", name);   //读 	fprintf(Testfscanf, "%s", name);    //写 	fclose(Testfscanf); 	return 0; }
user-0 提问: 【求助】 malloc首次执行有错，先执行其他，没错

回复:
user: user-1
content: 你的代码中，malloc申请的内存大小只和len有关，和i无关

user: user-2
content: 贴完整的代码，另外是不是申请太大，不够

user: user-1
content: for（i） for循环到底怎么写的

user: user-3
content: 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。
user-0 提问: Linux 这个现象是内存泄漏吗？

回复:
user: user-1
content: 引用 4 楼 Kende0120 的回复:[quote=引用 2 楼 hnwyllmm 的回复:] RSS增长不一定是内存泄露 RSS：该进程占用的物理内存的总数量，单位是KB。 进程占用的内存首先体现在虚拟内存上，如果进程访问到某个内存的时候，才会给他分配真实的物理内存。当然物理内存是有限的，如果增长到限制的最大值，那就不会再增长了，这时候不增长也不能说没有内存泄露。 是否真的有内存泄露，可以运行的时间延长，观察进程占用的内存是否确实一直增长 内存泄露检测工具是一种辅助手法，能够帮助程序员检测出肉眼不易观察的内存泄露，但是也不能完全依赖  先纠正一下，不是RSS， 是RES。  程序的处理顺序 ：接收到命令后分配内存，启动子线程，运行后再关掉子线程，最后释放内存。 每次接收到命令后RES都会增大，即使释放内存后也不会减少，而是随着运行的次数增加而持续增大 这个有问题吗？ [/quote] 如果是RES的话，是不是可能用了第三方的内存库，或者内存池，内存并没有释放，因此内核并没有释放对应的物理内存，反而运行时间久了还会增加

user: user-0
content: 引用 3 楼 wangzuxi 的回复:内存泄露调试工具很多，valgrind比较有名  谢谢，我会下载来试用一下。

user: user-0
content: 引用 2 楼 hnwyllmm 的回复:RSS增长不一定是内存泄露 RSS：该进程占用的物理内存的总数量，单位是KB。 进程占用的内存首先体现在虚拟内存上，如果进程访问到某个内存的时候，才会给他分配真实的物理内存。当然物理内存是有限的，如果增长到限制的最大值，那就不会再增长了，这时候不增长也不能说没有内存泄露。 是否真的有内存泄露，可以运行的时间延长，观察进程占用的内存是否确实一直增长 内存泄露检测工具是一种辅助手法，能够帮助程序员检测出肉眼不易观察的内存泄露，但是也不能完全依赖  先纠正一下，不是RSS， 是RES。  程序的处理顺序 ：接收到命令后分配内存，启动子线程，运行后再关掉子线程，最后释放内存。 每次接收到命令后RES都会增大，即使释放内存后也不会减少，而是随着运行的次数增加而持续增大 这个有问题吗？

user: user-2
content: 内存泄露调试工具很多，valgrind比较有名

user: user-1
content: RSS增长不一定是内存泄露 RSS：该进程占用的物理内存的总数量，单位是KB。 进程占用的内存首先体现在虚拟内存上，如果进程访问到某个内存的时候，才会给他分配真实的物理内存。当然物理内存是有限的，如果增长到限制的最大值，那就不会再增长了，这时候不增长也不能说没有内存泄露。 是否真的有内存泄露，可以运行的时间延长，观察进程占用的内存是否确实一直增长 内存泄露检测工具是一种辅助手法，能够帮助程序员检测出肉眼不易观察的内存泄露，但是也不能完全依赖

user: user-3
content: 循环调用疑似泄露的代码， 如果有内存泄露， 效果很明显。
user-0 提问: pipe的小问题

回复:
user: user-0
content: 引用 2 楼 zhangxiangDavaid 的回复: nbytes = (fd[0],readbuffer,sizeof(readbuffer));  //改为 nbytes = read(fd[0],readbuffer,sizeof(readbuffer)); 果然如此，大牛，我太粗心大意了

user: user-1
content: nbytes = (fd[0],readbuffer,sizeof(readbuffer));  //改为 nbytes = read(fd[0],readbuffer,sizeof(readbuffer));

user: user-0
content: 好像没有写入数据，后面就直接开始读了，然后无线循环读………………
user-0 提问: 关于2048的问题

回复:
user: user-1
content: C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\rand.c /*** *rand.c - random number generator * *       Copyright (c) Microsoft Corporation. All rights reserved. * *Purpose: *       defines rand(), srand() - random number generator * *******************************************************************************/  #include <cruntime.h> #include <mtdll.h> #include <stddef.h> #include <stdlib.h>  /*** *void srand(seed) - seed the random number generator * *Purpose: *       Seeds the random number generator with the int given.  Adapted from the *       BASIC random number generator. * *Entry: *       unsigned seed - seed to seed rand # generator with * *Exit: *       None. * *Exceptions: * *******************************************************************************/  void __cdecl srand (         unsigned int seed         ) {         _getptd()->_holdrand = (unsigned long)seed; }   /*** *int rand() - returns a random number * *Purpose: *       returns a pseudo-random number 0 through 32767. * *Entry: *       None. * *Exit: *       Returns a pseudo-random number 0 through 32767. * *Exceptions: * *******************************************************************************/  int __cdecl rand (         void         ) {         _ptiddata ptd = _getptd();          return( ((ptd->_holdrand = ptd->_holdrand * 214013L             + 2531011L) >> 16) & 0x7fff ); }

user: user-0
content: 引用 1 楼 user-3 的回复:Srand这个函数应该只运行一次，他是随机数种子，起初始化作用。你把它放在每一个随机数函数执行之前是多余的， 原来是这样

user: user-2
content: 参考代码段： https://github.com/707wk/Senior-middle-school/tree/master/2048

user: user-3
content: Srand这个函数应该只运行一次，他是随机数种子，起初始化作用。你把它放在每一个随机数函数执行之前是多余的，
user-0 提问: 谁能帮我设计一个C语言游戏,就是输入a或b,最后输出a或b

回复:
user: user-1
content: 2楼概念错误！ a==b等价于!a>b && !b>a

user: user-2
content: 这样可好：  #include <stdio.h> #include <time.h> int a, b; char choice; int main(void) { 	srand(time(NULL)); 	while (1) 	{ 		a = rand() % 100; 		b = rand() % 100; 		do 		{ 			printf("input a or b :"); 			scanf("%c", &choice); fflush(stdin); 		} while ('a' != choice && 'b' != choice); 		printf("a=%d,b=%d\n", a, b); 		switch (choice) 		{ 		case 'a':  			if (a >= b) printf("Win\n"); 			else printf("Fail\n"); 			break; 		case 'b': 			if (b >= a) printf("Win\n"); 			else printf("Fail\n"); 			break; 		} 	} 	return 0; }

user: user-1
content: #include <stdio.h> #include <stdlib.h> #include <time.h> int a,b; char g; int main() {     srand(time(NULL));     a=rand();     b=rand();     while (1) {         printf("I have two number a and b,please guess which is bigger(a or b):");fflush(stdout);         rewind(stdin);         scanf("%c",&g);         if ('a'==g || 'b'==g) break;     }     if (('a'==g && a>b)       ||('b'==g && b>a)) {         printf("Lucky! You get it! a,b is %d,%d\n",a,b);     } else {         printf("Sorry! You loose. a,b is %d,%d\n",a,b);     }     return 0; } //c:\test>test //I have two number a and b,please guess which is bigger(a or b):c //I have two number a and b,please guess which is bigger(a or b):a //Sorry! You loose. a,b is 12377,17191 // //c:\test>test //I have two number a and b,please guess which is bigger(a or b):a //Lucky! You get it! a,b is 12471,1215 //
user-0 提问: 程序通讯协议，服务器给客户端发送一串文本，例如begin/ speed 50 /begin，那么客户端应该怎么去解析这个文本。

回复:
user: user-1
content: protobuf

user: user-2
content: Socket  对于TCP/UDP协议 直接提取，就可以得到原串....然后对你自己的字符串进行解析就ok了

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

user: user-0
content: 这个一般是怎么写的呢？给个思路，谢谢呀。

user: user-4
content: 服务端和客户端定好发送解析协议。
user-0 提问: C语言字符数组

回复:
user: user-1
content: 这样可好：  #include <stdio.h> int main() { 	char c[10]; 	c[0] = 'I'; c[1] = ' '; c[2] = 'a'; c[3] = 'm'; c[4] = ' '; c[5] = 'h'; c[6] = 'a'; c[7] = 'p'; c[8] = 'p'; c[9] = 'y'; 	printf("%c%c%c%c%c%c%c%c%c%c\n", c[0], c[1], c[2], c[3], c[4], c[5], c[6], c[7], c[8], c[9], c[10]); 	printf("%.10s", c); 	return 0; } //I am happy //I am happy

user: user-2
content: char s[] = "I am happy"; puts(s);

user: user-3
content: #include <stdio.h> int main(int argc, char *argv[]) {     char c[] = "I am happy";     printf ("%s\n",c);      return 0; }

user: user-4
content: #include <stdio.h> int main () { char c[]="i am happy",*p=c; while(*p){  printf("%c",*p++);   }  return 0; }  给分吧！

user: user-5
content: #include <stdio.h>  main() { 	int i=0; 	char c[11]="I am happy"; 	for(i=0;i<10;i++) 	{ 		printf("%c",c[i]); 	} }  ／／不知道这样算简短吗？
user-0 提问: 求嵌入式开发板代码解读（要求：对代码整体结构及每行代码进行注释）.一旦选中，可支付宝支付100元人民币。多谢。

回复:
user: user-0
content: 请问代码中很多东西我看不懂，虽然我的C代码量有1万行左右，请问我该如何着手。谢谢。

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

user: user-2
content: 这不是已经写的很清楚了吗?
user-0 提问: 我用快速幂求矩阵乘积不知道WA在哪里了

回复:
user: user-1
content: http://www.baidu.com/s?wd=快速幂求矩阵乘积&ie=utf-8

user: user-2
content: 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。  “多一少一”问题占程序员常犯错误的10%以上！ 避免“多一少一”问题的方法之一是将比如<10甚至<5的数代入程序片断，搬手指头心算验证一下程序到底应该写为 x、x-1、x+1中的哪个？ <、<=、==、>、>=中的哪个？
user-0 提问: 关于数组实现约瑟夫环的问题

回复:
user: user-1
content: 几点解释：  各变量的含义： a[N]记录每个人的编号：1、2、3……N b[N]对应每个人是否出局的标记：值0表明人已出局  理解第二个for循环 n从-1开始 for (sum = p; sum > 1; sum--){  //sum>1表明最后只留一人     for (i = 1; i <= 7;) {      //从这里看出数到7的人出局                      n = (n + 1)%p;          //n每次往前走一步，但具体值需对p求余，这是一个环         if (b[n] == 1)          //只有未出局的人才计数，所以只有b[n]为1，才算走了一步             i++;            }            printf(" %d", a[n]);        //打印出局人的编号     b[n] = 0;                   //此人出局 }

user: user-1
content: 约瑟夫问题的数组解法 http://blog.csdn.net/zhangxiangdavaid/article/details/25057811

user: user-2
content: 仅供参考：//假设有n个人团团围做，从第1个人开始数数，数到第m个人时候，第m个人出列， //然后继续从1开始数数，数到第m个人退出 #include <stdio.h> #include <conio.h> int i,k,t; int n,m; static char f[1001];//0该座位未出圈,1该座位已出圈 void main() {     while (1) {         printf("Input n m(1000>=n>=m>=1):");         fflush(stdout);         rewind(stdin);         if (2==scanf("%d%d",&n,&m)) {             if (1000>=n && n>=m && m>=1) break;         }     }     t=0;//已出圈总人数     i=1;//座位编号     k=1;//当前要数的数     while (1) {         if (0==f[i]) {             if (m==k) {                 t++;                 f[i]=1;                 printf("%3d ",i);                 if (0==t%10) printf("\n");                 if (t>=n) break;             }             k++;if (k>m) k=1;         }         i++;if (i>n) i=1;     }     cprintf("Press any key ...");     getch(); }
user-0 提问: PIC CAN发送中对错误的处理

回复:
user: user-0
content: 我又试了一个上午的中断，无奈的是，貌似IRXIE与IRXIF都不听我的指挥，至少ICD3上的变量表上的值一直不变，但我总觉得实际上是变的。不然不可能在我关闭上位机时，可以进入中断，而第二次发送时却又无法进入了。也不可能发生如下情况，中断将IRXIE关闭，才可以避免连续地反复进入中断，我之所以这么做，是因为我怎么也无法将IRXIF置1。我想过，有无可能中断的进入，其实与IRXIE无关，一直显示0，只是进入之后，判断IRXIF成功了，一直显示1。但并没有找到其他任何低级中断。 最后使用的办法是，  while(TXB0CONbits.TXREQ)     {        // if (!TXB2CONbits.TXREQ) break;         if(TXB0CONbits.TXERR)//break;             TXB0CONbits.TXREQ=0;        // __delay_ms(2);     } 此外，经过测试，delay并不会影响定时器的中断。除非别的地方，有一些错误。 这个中断的问题，暂时搁置，以后希望可以明白。

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:#include <windows.h> //... TXB0CONbits.TXREQ = 1; //置1，则开始发送 int n; while(1) {  if (!TXB0CONbits.TXREQ) break;//发送完毕，退出  Sleep(100);//延时100ms  n++;  if (n>=600) break;//一分钟超时，退出。 }   我之前用的__delay的函数，但是存在一个问题，因为我计算积分需要精确的定时，但据说__delay中无法进行定时器中断，是这样么？

user: user-1
content: #include <windows.h> //... TXB0CONbits.TXREQ = 1; //置1，则开始发送 int n; while(1) {  if (!TXB0CONbits.TXREQ) break;//发送完毕，退出  Sleep(100);//延时100ms  n++;  if (n>=600) break;//一分钟超时，退出。 }
user-0 提问: 为什么我用keybd_event 没效果

回复:
user: user-1
content: 关闭360等流氓软件试试

user: user-2
content: 我也是看伊成的视屏也错在这不知道什么问题，如果解决了请回复下谢谢

user: user-3
content: 为什我是Windows7系统也不行软件是VS2010

user: user-0
content: 问题已经解决 换个系统搞定了

user: user-0

user: user-0
content: 还是不行啊  没效果

user: user-4
content: keybd_event(0x5b,0,0,0); 	keybd_event('R',0,0,0); 	keybd_event('R',0,2,0); 	keybd_event(0x5b,0,2,0); 可用 我也在看尹成

user: user-0
content: 是不是系统问题 你们用的是不是win8 能实现？？？

user: user-5
content: keybd_event The keybd_event function synthesizes a keystroke. The system can use such a synthesized keystroke to generate a WM_KEYUP or WM_KEYDOWN message. The keyboard driver's interrupt handler calls the keybd_event function.   Windows NT: This function has been superseded. Use SendInput instead.  VOID keybd_event(   BYTE bVk,           // virtual-key code   BYTE bScan,         // hardware scan code   DWORD dwFlags,      // flags specifying various function options   DWORD dwExtraInfo   // additional data associated with keystroke );   Parameters bVk  Specifies a virtual-key code. The code must be a value in the range 1 to 254.  bScan  Specifies a hardware scan code for the key.  dwFlags  A set of flag bits that specify various aspects of function operation. An application can use any combination of the following predefined constant values to set the flags. Value Meaning  KEYEVENTF_EXTENDEDKEY If specified, the scan code was preceded by a prefix byte having the value 0xE0 (224).  KEYEVENTF_KEYUP If specified, the key is being released. If not specified, the key is being depressed.    dwExtraInfo  Specifies an additional 32-bit value associated with the key stroke.  Return Values This function has no return value.   Remarks Although keybd_event passes an OEM-dependent hardware scan code to the system, applications should not use the scan code. The system converts scan codes to virtual-key codes internally and clears the up/down bit in the scan code before passing it to applications.   An application can simulate a press of the PRINTSCREEN key in order to obtain a screen snapshot and save it to the clipboard. To do this, call keybd_event with the bVk parameter set to VK_SNAPSHOT, and the bScan parameter set to 0 for a snapshot of the full screen or set bScan to 1 for a snapshot of the active window.   Windows CE: Windows CE supports an additional flag for the dwFlags parameter. Use the KEYEVENTF_SILENT flag to simulate a keystroke without making a clicking sound.  Windows CE does not support the KEYEVENTF_EXTENDEDKEY flag.  QuickInfo   Windows NT: Requires version 3.1 or later.   Windows: Requires Windows 95 or later.   Windows CE: Requires version 1.0 or later.   Header: Declared in winuser.h.   Import Library: Use user32.lib.  See Also Keyboard Input Overview, Keyboard Input Functions, GetAsyncKeyState, GetKeyState, MapVirtualKey, SetKeyboardState

user: user-6
content: 按键按下后，需要再设置 KEYEVENTF_KEYUP状态
user-0 提问: 向大神求教一个代码运行后与本人期望不符的小问题

回复:
user: user-0
content: 引用 3 楼 zhangxiangDavaid 的回复:[quote=引用 2 楼 ma815841356 的回复:] [quote=引用 1 楼 cs_dingz 的回复:] 你把%d\n换成%d空格试试。。  换成空格输出就正常了，这是为何呢？求指点[/quote] 10000以内的素数太多，黑窗口只有这么大，最早输出的，就无法看到了。 素数从2开始，建议从i=2，开始输出[/quote]  谢谢指点

user: user-1
content: 引用 2 楼 ma815841356 的回复:[quote=引用 1 楼 cs_dingz 的回复:] 你把%d\n换成%d空格试试。。  换成空格输出就正常了，这是为何呢？求指点[/quote] 10000以内的素数太多，黑窗口只有这么大，最早输出的，就无法看到了。 素数从2开始，建议从i=2，开始输出

user: user-0
content: 引用 1 楼 cs_dingz 的回复:你把%d\n换成%d空格试试。。  换成空格输出就正常了，这是为何呢？求指点

user: user-2
content: 你把%d\n换成%d空格试试。。
user-0 提问: 走过路过千万不要错过，跪求大牛帮忙

回复:
user: user-0
content: 大神，你懂图像配准的算法吗？求帮忙看看 我这个题目最后应该做出什么样的结果。题目：基于sift特征的图像配准算法的实现  用opencv 跟vs来实现。

user: user-1
content: 引用 6 楼 chenxihayi 的回复:大神，我是做图像匹配的，不是拼接 原来匹配和拼接不是一回事呀！ 但拼接的时候不是要匹配边缘处的特征吗？ 匹配不就是除了边缘处需要匹配特征，整个画面都需要匹配特征吗？  饿了别叫妈！叫“饿了么”

user: user-0
content: 大神，我是做图像匹配的，不是拼接

user: user-2
content: 咳咳， 先把opencv环境配置好再说  之后再研究opencv的api， 找现成的不太可能

user: user-1
content: 建议楼主先编译链接调试OpenCV自带的相关例子代码。

user: user-1
content: https://www.baidu.com/s?wd=opencv%20%E5%9B%BE%E8%B1%A1%E6%8B%BC%E6%8E%A5&rsv_spt=1&issp=1&f=8&rsv_bp=0&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_sug3=24&rsv_sug1=21

user: user-0
content: 想知道opencv里面有关于图像配准的算法吗？

user: user-0
content: 以前从未结仇过opencv啊，想知道哪个版本的好用啊?
user-0 提问: 判断出栈顺序是否正确。

回复:
user: user-1
content: 直接比对，不等的部分压栈，就知道结果 #include <stdio.h> #define N (1000+10) int n,m,k, a[N],b[N],sk[N]; bool check(){     int top =0,*pa=a,*pae=a+n,*pb=b,*pbe=b+n;     while(pb!=pbe){         if(pa<pae&&*pb==*pa) {             if(top==m) return false;             ++pb,++pa;         }         else if(top&&*pb==sk[top-1]) ++pb,--top;         else if(pa<pae) {             if(top==m) return false;             sk[top++]   =*pa++;         }else return false;     }     return true; }  int main () {    scanf("%d%d%d",&m,&n,&k);    for(int i=0;i<n;i++) scanf("%d",a+i);    while(k--){         for(int i=0;i<n;i++) scanf("%d",b+i);         printf("%s\n",check() ? "YES" : "NO");    } }

user: user-2
content: 奔跑吧，参考：  int N, M, K; int *Push, *Pop, *Stack; int i, j, r, s; int main(void) { 	scanf("%d%d%d", &M, &N, &K); 	Stack = malloc(sizeof(int)*M); 	Push = malloc(sizeof(int)*N); 	Pop = malloc(sizeof(int)*N); 	//读入压栈序列 	for (i = 0; i < N; i++) scanf("%d", Push + i); 	r = 0; 	while (r < K) 	{ 		//读入出栈序列 		for (j = 0; j < N; j++) scanf("%d", Pop + j); 		i = j = 0; 		s = -1; 		while (j < N) 		{ 			if (-1 == s || Stack[s] < Pop[j])  //栈若是空的或栈顶元素小于当前出栈元素，则入栈 			{  				if(s < M - 1) Stack[++s] = Push[i++]; 				else  //栈空间有限，无法继续入栈 				{ 					printf("NO\n");   					break; 				} 			} 			if (Stack[s] == Pop[j])  //出栈 			{ 				s--; 				j++; 			} 			else if (Stack[s] > Pop[j]) 			{ 				printf("NO\n"); 				break; 			} 		} 		if (j == N) printf("YES\n");  //全部都可以出栈，则序列正确 		r++; 	} 	free(Push); 	free(Pop); 	free(Stack); 	return 0; }

user: user-3
content: https://www.baidu.com/s?wd=%E5%88%A4%E6%96%AD%E5%87%BA%E6%A0%88%E9%A1%BA%E5%BA%8F+C%E6%BA%90%E4%BB%A3%E7%A0%81&rsv_spt=1&issp=1&f=8&rsv_bp=0&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_n=2&rsv_sug3=7&rsv_sug1=6&rsv_sug4=262&inputT=7871

user: user-4
content: 简单的模拟出栈入栈操作，将元素依次入栈。然后根据输入的次序依次出栈。比如给出的出栈次序是 1 4 3 7 6 2 5，首先将1入栈，发现输入数据中的第一个正好是1。将1出栈，下面是4，由于栈是空，并且刚才只把1入栈，接下来将2 3 4依次入栈，些时栈顶元素是4，与输入数据的第二个元素相等，将4出栈。然后3出栈，接下来处理7，由于此时栈顶元素是2，7大于2所以接下来将5 6 7依次入栈（栈中元素为7 6 5 2）。然后栈顶元素与输入数据的7比较相等，7出栈，然后6也相等，6出栈。此时栈中元素(5 2)，待判断的输入数据为2 5。2与栈顶元素比较2<5，所以这个序列是不可能出栈顺序。
user-0 提问: 1个2维或2个1维数组的去重复

回复:
user: user-0
content: 谢谢你的回复，有个问题，为什么data是9 不是10个数么，不过你的思路很好，谢谢

user: user-1
content: 这样可好：  int data_1[10] = { 2, 1, 3, 5, 2, 8, 2, 8, 9, 10 }; int data_2[10] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; int data[9]; int comp(void *a, void *b) { 	return *(int*)a - *(int*)b; } int main(void) { 	int i, n; 	for (i = 1; i < 10; i++) data[i - 1] = data_1[i] * 10 + data_2[i]; 	qsort(data, 9, sizeof(int), comp);  	n = 9; 	for (i = 1; i < 9; i++) 	{ 		if (data[i] == data[i-1]) n--; 	} 	printf("%d\n", n); 	return 0; }
user-0 提问: 这是我看了一道题后，自己编的，题是会了，但是我自己之前编的有错，不弄清楚不舒服，帮我看看，谢谢

回复:
user: user-1
content: n是for的变量，在while里面不能改 k =n, i=0; while(k) a[i++] =k%10, k/=10;

user: user-2
content: 你的for循环里面没有循环条件，编译器不会给你编译通过，而且不符合语法规范。

user: user-2
content: #include <stdio.h>  void main() { 	int i = 95859, j; 	int a[5]; 	for (i = 95860; i < 100000; i++) 	{ 		a[0] = i/10000; 		a[1] = i/1000%10; 		a[2] = i/100%10; 		a[3] = i/10%10; 		a[4] = i%10; 		while ((a[0] == a[4]) && (a[1] == a[3])) 		{ 				for (j = 0; j < 5; j++) 				{ 					printf("%d ", a[j]); 				} 				printf("\n"); 				return; 		} 	} }

user: user-3
content: 我在你的代码for循环开始处添加一句 printf("woaino  %d  ",n); 运行结果是  原因就是n是main（）函数中的变量，对于for循环来说就属于外部全局的，所以，除了第一次，每次循环n都是从11开始，加到11后，进入while循环，执行n=n/10; n变为1，然后n++变成2，再在for循环中加到11，然后继续，所以找不到了。 只需要在for循环中添加 int m = n; 然后用m取值即可。你试试。

user: user-4
content: 修改如下：  #include"stdio.h" int main() { 	int a[5]; 	int i, j, n;  	for (n = 95860;; n++) 	{ 		i = 0; 		j = n;    //用j记录n的值 		while (j>10) 		{ 			a[i++] = j % 10; 			j = j / 10; 		} 		a[i] = j; 		if (a[0] == a[4] && a[1] == a[3]) 		{ 			printf("%d%d%d%d%d\n", a[0], a[1], a[2], a[3], a[4]); 			break; 		}  	} 	/*我来说下，首先a数组是用来存放每个位上的数的，那个if是用来选数，我们现在就是要 	在95860后面开始找，找到一个数，那个数它是对称相等的，比如95859，以8位分界线 	两边的数对称相等。*/ 	return 0; }
user-0 提问: 内存申请

回复:
user: user-1
content: Windows： 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。  Linux： 进程意外退出会在当前目录下产生‘core’文件或形如‘core.数字’的文件比如‘core.1234’ 使用命令 gdb 运行程序名 core或core.数字 进入gdb然后使用bt命令 可以查看进程意外退出前函数调用的堆栈，内容为从上到下列出对应从里层到外层的函数调用历史。 如果进程意外退出不产生core文件，参考“ulimit -c core文件最大块大小”命令

user: user-0
content: 引用 3 楼 zhangxiangDavaid 的回复:一种可能的修改：  #include<stdio.h> #include<malloc.h> #include<string.h> #include<stdlib.h> void func(char **p)  //更改普通变量的值，使用一级指针；更改一级指针的值，使用二级指针 { 	*p = (char *)malloc(sizeof(char)*20);  //分配20个字节 } int main(int argc, char *argv[]) { 	char *s = NULL; 	func(&s);   //传入变量的地址 	strcpy(s, "i love xiyou_linux"); 	puts(s); 	return 0; }   谢谢谢谢 自己想的太简单了 看来我真的还需要好好学习 要学的东西还好多呢

user: user-0
content: 引用 2 楼 zhangxiangDavaid 的回复:解释如下：  #include<stdio.h> #include<malloc.h> #include<string.h> #include<stdlib.h> void func(char *p) { 	//这里只申请了一个字节 sizeof(char) = 1 	p = (char *)malloc(sizeof(char)); //  申请内存，但是却没有说明具体大小，是不可以的吧？ } int main(int argc, char *argv[]) { 	char *s = NULL; 	func(s);   //实参与形参的问题，s还是NULL，所以下一句出错 	strcpy(s, "i love xiyou_linux");//我觉得这里也有问题吧，这意思九是复制到首地址里了吧？ 	puts(s); 	return 0; }  所以，改正的话是 1.自定义函数func里为p申请较大的内存空间 2.再在main函数里为s申请内存  不过这样func不就没有什么用了吧

user: user-2
content: 一种可能的修改：  #include<stdio.h> #include<malloc.h> #include<string.h> #include<stdlib.h> void func(char **p)  //更改普通变量的值，使用一级指针；更改一级指针的值，使用二级指针 { 	*p = (char *)malloc(sizeof(char)*20);  //分配20个字节 } int main(int argc, char *argv[]) { 	char *s = NULL; 	func(&s);   //传入变量的地址 	strcpy(s, "i love xiyou_linux"); 	puts(s); 	return 0; }

user: user-2
content: 解释如下：  #include<stdio.h> #include<malloc.h> #include<string.h> #include<stdlib.h> void func(char *p) { 	//这里只申请了一个字节 sizeof(char) = 1 	p = (char *)malloc(sizeof(char)); //  申请内存，但是却没有说明具体大小，是不可以的吧？ } int main(int argc, char *argv[]) { 	char *s = NULL; 	func(s);   //实参与形参的问题，s还是NULL，所以下一句出错 	strcpy(s, "i love xiyou_linux");//我觉得这里也有问题吧，这意思九是复制到首地址里了吧？ 	puts(s); 	return 0; }

user: user-3
content: void func(char *p) //指针不能回传 改为char *&p { p=(char *)malloc(sizeof(char)); //  只分配了一个字节 }
user-0 提问: turboc++3.0 怎么把相关联的文件组织在一起运行？？

回复:
user: user-1
content: 新建一个工程，导入即可

user: user-2
content: 放到同一个工程源文件下即可

user: user-3
content: Project、Open Project...

user: user-4
content: 猜的，编译的时候同时编译 test.c 和 lcs.c 就应该可以了。 ps. 都啥年头了还用 turbo c++?，用 clang 或 g++ 吧。
user-0 提问: 关于C程序设计中的单词计数问题 求大神解答

回复:
user: user-0
content: if (c == ' ' || c == '\n' || c == '\t') state = OUT; else if (state == OUT){ state = IN; ++nw; } 就是这几行代码把我弄晕了 思考了很久 昨天去问老师 我只能说老师也被弄晕了 然后没怎么给我讲清楚 为什么else if(state == OUT) 后面出现了state = IN

user: user-1
content: nl记录行数，nw记录单词个数，nc记录字符个数 state=IN，表明正在读入连续非空白字符(空白字符：' '、'\n'、'\t')

user: user-0
content: 有没有其他的大牛愿意帮我详细解答一下

user: user-0
content: 引用 4 楼 user-2 的回复:This is a test. 刚开始假定状态是不在单词中（out） 1）然后读到了T，这时（out且有一个非空白字符），表明出现了一个单词，当然要把状态改成在单词中（in），且计数加一。 然后读到h，这时（in且是非空白字符）还在单词中，不要做特别的事； 读到i，读到s，类似 然后读到第一个空白，这时（in且是空白字符），表明单词结束，所以把状态改成out； 然后又读到i，重复1）这个逻辑。  总的来说就是一个简单的状态机，根据输入（每次读到的字符）和当前状态，决定下一个状态是什么，同时做一些特定逻辑的事情（比如计数）。 大牛您好 原谅我资质愚钝 你要有时间 能不能根据题目给我详细解答一下 您这个我实在有点晕 我大一新生刚接触C语言 麻烦您了

user: user-2
content: This is a test. 刚开始假定状态是不在单词中（out） 1）然后读到了T，这时（out且有一个非空白字符），表明出现了一个单词，当然要把状态改成在单词中（in），且计数加一。 然后读到h，这时（in且是非空白字符）还在单词中，不要做特别的事； 读到i，读到s，类似 然后读到第一个空白，这时（in且是空白字符），表明单词结束，所以把状态改成out； 然后又读到i，重复1）这个逻辑。  总的来说就是一个简单的状态机，根据输入（每次读到的字符）和当前状态，决定下一个状态是什么，同时做一些特定逻辑的事情（比如计数）。

user: user-0
content: 引用 2 楼 user-2 的回复:这是一个简单的状态变换而已。 请问能不能详细解答一下

user: user-2
content: 这是一个简单的状态变换而已。
user-0 提问: K&R中 宏可以节省运行时函数调用的开销。这句话如何理解呢？

回复:
user: user-1
content: 崇敬先贤，但不要迷信，更不要神圣化

user: user-1
content: K&R是在八十年代写着的，被称为“圣经”。但科学技术领域里，没有一成不变的东西，不能将他们说过的认为成永远正确、后人必须严格遵守照办的“圣旨”

user: user-0
content: 引用 12 楼 zhao4zhong1 的回复:VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时候。谢谢您的耐心指导 谢谢

user: user-2
content: VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时候。

user: user-0
content: 引用 8 楼 zhao4zhong1 的回复:计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 多用小脑和手，少用大脑、眼睛和嘴，会更快地学会编程！ 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步Debug版对应汇编一行！ 单步Debug版对应汇编千行不如单步Release版对应汇编一行！  VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时候。 （Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。） 赵老师， 单步源代码千行不如单步Debug版对应汇编一行！ 单步Debug版对应汇编千行不如单步Release版对应汇编一行！ 这两句话如何理解？求指导

user: user-0
content: 引用 9 楼 u013163178 的回复:请问楼主，同样的语句是用过程的速度快，还是用函数的速度快呢？ 比较弱，，，，，，过程调用和函数调用的区别是？

user: user-3
content: 请问楼主，同样的语句是用过程的速度快，还是用函数的速度快呢？

user: user-4
content: 不是所有的函数都会定义成宏

user: user-2
content: 计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 多用小脑和手，少用大脑、眼睛和嘴，会更快地学会编程！ 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步Debug版对应汇编一行！ 单步Debug版对应汇编千行不如单步Release版对应汇编一行！  VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时候。 （Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。）

user: user-2
content: “函数调用的开销”主要是指函数调用前将函数参数、返回地址压栈，函数调用完从栈中取出返回地址并跳到该地址继续执行使用的若干条汇编指令。

user: user-5
content: 引用 4 楼 A1174770492 的回复:引用 2 楼 wanguser-5 的回复:谁说getchar一定要定义为宏？我的意思是为啥K&R说的  和我查看源码不一样 人家说也只是说通常，并没说一定，C语言的实现有很多版本，glibc只是其中之一

user: user-4
content: 引用 3 楼 A1174770492 的回复:引用 1 楼 zhangxiangDavaid 的回复:不是所有的函数都会定义成宏这个我肯定知道，我的意思是为啥K&R说的  和我查看源码不一样 C标准只规定了函数接口，没有规定实现，具体实现得靠各大平台，不一样正常

user: user-0
content: 引用 2 楼 wanguser-5 的回复:谁说getchar一定要定义为宏？我的意思是为啥K&R说的  和我查看源码不一样

user: user-0
content: 引用 1 楼 zhangxiangDavaid 的回复:不是所有的函数都会定义成宏这个我肯定知道，我的意思是为啥K&R说的  和我查看源码不一样

user: user-5
content: 谁说getchar一定要定义为宏？
user-0 提问: 个人不明白为什么提交代码后会得到runtime error的结果，求指点迷津

回复:
user: user-1
content: 奔跑吧，参考：  #include <stdio.h> #include <stdlib.h> int year_day[2][13] = { 	{ 0, 31, 28, 31, 30 ,31, 30, 31, 31, 30, 31, 30, 31 },    	{ 0, 31, 29, 31, 30 ,31, 30, 31, 31, 30, 31, 30, 31 },  //闰年 }; int check(int year, int month, int day) { 	int pos = ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0); 	if (year > 0 && month > 0 && month <= 12 && day > 0 && day <= year_day[pos][month]) 		return 1; 	return 0; } int main(void) { 	int year, month, day; 	int i, days, pos; 	while(3 == scanf("%d%d%d", &year, &month, &day)) 	{ 		if (0 == check(year, month, day)) 		{ 			printf("Illegal date\n"); 			continue; 		} 		days = 0; 		pos = ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0); 		for (i = 1; i < month; i++) days += year_day[pos][i]; 		days += day; 		printf("%d\n", days); 	} 	return 0; }

user: user-2
content: 比如: 2015 -1 0

user: user-2
content: 提示:年月日均不可小于等于0，但是输入的测试数据有可能出现小于0的情况哦。

user: user-0
content: 引用 1 楼 focuslight 的回复:数组越界了吧 可我没发现有哪个数组越界啊，还望指点一下，谢谢

user: user-3
content: 数组越界了吧

user: user-0
content: 引用 2 楼 ma815841356 的回复:[quote=引用 1 楼 focuslight 的回复:] 数组越界了吧 可我没发现有哪个数组越界啊，还望指点一下，谢谢[/quote]  恩恩，我题目理解错误，谢谢