Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: C语言；为什么这个while可以连续输入好几组数字

回复:
user: user-0
content: 引用 5 楼 自信男孩的回复:while循环条件是从缓存里得到一个int类型数据，根据scanf是格式化输入，每次输入是以空格分开的，再根据标准输入是行缓冲，即 输入回车才能将输入缓存里的数据刷到内存。因此执行完123的输入之后再次等待输入，正好此时后面还有456，就继续执行了。 好的，谢谢指点，---------

user: user-1
content: while循环条件是从缓存里得到一个int类型数据，根据scanf是格式化输入，每次输入是以空格分开的，再根据标准输入是行缓冲，即 输入回车才能将输入缓存里的数据刷到内存。因此执行完123的输入之后再次等待输入，正好此时后面还有456，就继续执行了。

user: user-0
content: 引用 2 楼 轻箬笠 的回复:因为没有刷新输入缓冲区。下次scanf的时候，继续从输入缓冲区读入数据. while(scanf("%lu",&num)==1)                                //数字用u     { fflush(stdin);//加了这句就跟楼主想的一样了       for (div=2,isprime=1;(div*div)<=num;div++) //快速找出合适的数字       {           if(num%div==0)//余数为0 则说明可以除尽，           {               if((div*div)!=num)   //如果不等于则打印                   printf("%lu 可被整除 %lu 和 %lu.\n",num,div,num/div);               else                      printf("%lu的除数和被除数都是%lu.\n",num,div);               isprime=0;           }       }       if(isprime)           printf("%lu 是一个素数.\n",num);       printf("请输入另一个整数进行分析;");       printf("输入字母会结束.\n");     } 谢谢指点，新入门c prime plus才看了200页，清除缓冲后续应该会学到！

user: user-2
content: scanf输入数字,你用回车换行分隔也行,用空格 tab之类的也行

user: user-3
content: 因为没有刷新输入缓冲区。下次scanf的时候，继续从输入缓冲区读入数据. while(scanf("%lu",&num)==1)                                //数字用u     { fflush(stdin);//加了这句就跟楼主想的一样了       for (div=2,isprime=1;(div*div)<=num;div++) //快速找出合适的数字       {           if(num%div==0)//余数为0 则说明可以除尽，           {               if((div*div)!=num)   //如果不等于则打印                   printf("%lu 可被整除 %lu 和 %lu.\n",num,div,num/div);               else                      printf("%lu的除数和被除数都是%lu.\n",num,div);               isprime=0;           }       }       if(isprime)           printf("%lu 是一个素数.\n",num);       printf("请输入另一个整数进行分析;");       printf("输入字母会结束.\n");     }

user: user-0
content: 好像乱码了，点击原码可以查看
user-0 提问: 新手尝试中：二维字符数组按行操作的问题。

回复:
user: user-0
content: 引用 4 楼 636f6c696e的回复:初始化可以等号，后续的赋值请用strcpy 嗯，谢谢。我意识到这个问题后看论坛都这么多回复了。。

user: user-1
content: 初始化可以等号，后续的赋值请用strcpy

user: user-2
content: strncpy,strcpy

user: user-2
content: char 数组不可以用=号赋值

user: user-3
content: 直接字符串就可以 不需要那个{}
user-0 提问: 怎样在被调用的函数里生成一个四位的随机数，然后让电脑去猜，就是在“你的工作在这个函数”那里

回复:
user: user-1
content: 设置下随机数种子，如楼上所说 引用 1 楼 636f6c696e 的回复:int num = 0; while (num < 1000) // 保证num是一个四位数 {     num = rand() % 10000;  }

user: user-2
content: 引用 2 楼 PETER.QUEST 的回复:把这个代码放进去了，但是无论怎样猜出来的都是2645，求解  #include<ctime> int num = 0; srand((int)time(0)); while (num < 1000) // 保证num是一个四位数 {     num = rand() % 10000;  }

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

user: user-0
content: 把这个代码放进去了，但是无论怎样猜出来的都是2645，求解

user: user-1
content: int num = 0; while (num < 1000) // 保证num是一个四位数 {     num = rand() % 10000;  }
user-0 提问: Win10 Vmware 虚拟网络适配器导致发不出广播包的问题

回复:
user: user-1
content: win7没问题

user: user-0
content: 引用 5 楼 赵4老师 的回复:Win10网络更安全，网络防火墙更严格。我猜。 防火墙没开。

user: user-2
content: Win10网络更安全，网络防火墙更严格。我猜。

user: user-0
content: 引用 3 楼 早打大打打核战争 的回复:使用桥接模式，虚拟机相当于局域网内部的一台真机，理论上不会有任何问题，要么是设置的问题，或者可以升级VMWare高版本试试 已验证。不行。Win7是没有任何问题的。Win10我这里都有问题。

user: user-3
content: 使用桥接模式，虚拟机相当于局域网内部的一台真机，理论上不会有任何问题，要么是设置的问题，或者可以升级VMWare高版本试试

user: user-0
content: 引用 1 楼 早打大打打核战争 的回复:虚拟机设置中的网络适配器->网络连接模式，选桥接模式，不要用NAT模式  emmm我就是桥接模式。

user: user-3
content: 虚拟机设置中的网络适配器->网络连接模式，选桥接模式，不要用NAT模式
user-0 提问: Linux下进行的des加密后base64编码为什么放到网上的在线解码器上就解不出来了

回复:
user: user-1
content: void HexDump(char *buf,int len,int addr) {     int i,j,k;     char binstr[80];      for (i=0;i<len;i++) {         if (0==(i%16)) {             sprintf(binstr,"%08x -",i+addr);             sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);         } else if (15==(i%16)) {             sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);             sprintf(binstr,"%s  ",binstr);             for (j=i-15;j<=i;j++) {                 sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');             }             printf("%s\n",binstr);         } else {             sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);         }     }     if (0!=(i%16)) {         k=16-(i%16);         for (j=0;j<k;j++) {             sprintf(binstr,"%s   ",binstr);         }         sprintf(binstr,"%s  ",binstr);         k=16-k;         for (j=i-k;j<i;j++) {             sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');         }         printf("%s\n",binstr);     } }

user: user-1
content: 先澄清一个概念： 加密的对象不是字符串，是长度固定的一段二进制字节。

user: user-0
content: 引用 1 楼 赵4老师 的回复:先澄清一个概念： 加密的对象不是字符串，是长度固定的一段二进制字节。 老师，使用openssl -des 命令加密后以base64编码结果输出和这种程式代码实现是有区别的吗？ 指令得到的结果是能够被在线解码解析出来

user: user-1
content: 先澄清一个概念： 加密的对象不是字符串，是长度固定的一段二进制字节。
user-0 提问: NAND FLASH数据能破解吗？

回复:
user: user-0
content: 引用 1 楼 user-1 的回复：https://blog.csdn.net/qq_30866297/article/details/52104197看不是很懂，有人写好破解的软件么？

user: user-1
content: https://blog.csdn.net/qq_30866297/article/details/52104197
user-0 提问: 求助大神，到底哪里出错了？？

回复:
user: user-1
content: 楼主要用switch的话，可以先将字符串转成哈希值

user: user-2
content: C语言的switch是只针对int类型而言的，其他类型不支持的。

user: user-0
content: 引用 1 楼 main(进击的菜鸟)的回复:1、输入字符串要用name[20];用&只能是字符。 2、c/c++ 语言 case后面 只允许是 整型 常量 表达式,不能跟字符串。 多谢大神指点

user: user-3
content: 1、输入字符串要用name[20];用&只能是字符。 2、c/c++ 语言 case后面 只允许是 整型 常量 表达式,不能跟字符串。
user-0 提问: VS2017 编写C语言代码，计算结果出错是什么造成的

回复:
user: user-1
content: 1l|I│┃▏▕〡︱︳

user: user-0
content: 哎呀果然是这个问题，没看清楚，太感谢了，谢谢🙏

user: user-2
content: %lf 不是%1f   这个问题没搞懂为啥那么多人会把l写成1的
user-0 提问: C语言中三角函数调用失败

回复:
user: user-1
content: 很看不上这种过于高估自己语文水平的提问。

user: user-2
content: 楼主解决问题了嘛，我好像也遇到类似的问题了。求教

user: user-3
content: 我觉着楼主还是把代码和结果贴出来看看比较好

user: user-4
content: atan, atan2 Calculates the arctangent of x (atan) or the arctangent of y/x (atan2).  double atan( double x );  double atan2( double y, double x );  Routine Required Header Compatibility  atan <math.h> ANSI, Win 95, Win NT  atan2 <math.h> ANSI, Win 95, Win NT    For additional compatibility information, see Compatibility in the Introduction.  Libraries  LIBC.LIB Single thread static library, retail version  LIBCMT.LIB Multithread static library, retail version  MSVCRT.LIB Import library for MSVCRT.DLL, retail version    Return Value  atan returns the arctangent of x. atan2 returns the arctangent of y/x. If x is 0, atan returns 0. If both parameters of atan2 are 0, the function returns 0. You can modify error handling by using the _matherr routine. atan returns a value in the range –π/2 to π/2 radians; atan2 returns a value in the range –π to π radians, using the signs of both parameters to determine the quadrant of the return value.   Parameters  x, y  Any numbers  Remarks  The atan function calculates the arctangent of x. atan2 calculates the arctangent of y/x. atan2 is well defined for every point other than the origin, even if x equals 0 and y does not equal 0.  Example  /* ATAN.C: This program calculates   * the arctangent of 1 and -1.  */  #include <math.h> #include <stdio.h> #include <errno.h>  void main( void )  {    double x1, x2, y;     printf( "Enter a real number: " );    scanf( "%lf", &x1 );    y = atan( x1 );    printf( "Arctangent of %f: %f\n", x1, y );    printf( "Enter a second real number: " );    scanf( "%lf", &x2 );    y = atan2( x1, x2 );    printf( "Arctangent of %f / %f: %f\n", x1, x2, y );  }   Output  Enter a real number: -862.42 Arctangent of -862.420000: -1.569637 Enter a second real number: 78.5149 Arctangent of -862.420000 / 78.514900: -1.480006   Floating-Point Support Routines  See Also   acos, asin, cos, _matherr, sin, tan

user: user-4
content: 角度需要转换为弧度

user: user-5
content: 加调试手段啊，调用atan的输入输出都打印出来不就能确定是atan的问题还是其他的问题了么？ 引用 3 楼 Kelvin_001 的回复:通过比对出错时程序区代码正常未被改写。另外程序结构有些复杂，感觉是调用环节出了问题，但是又不知道该怎么排查

user: user-0
content: 单位没问题的，是弧度的。关键是前面两次调用atan函数返回值是正确的。执行两次以后就不按照输入来了，即使是同样的输入。

user: user-0
content: 通过比对出错时程序区代码正常未被改写。另外程序结构有些复杂，感觉是调用环节出了问题，但是又不知道该怎么排查

user: user-6
content: 引用 楼主 Kelvin_001 的回复:最近在TI DSP 6701平台上写了个大地坐标系高度角计算的函数，其中用到了三角函数atan，发现前面几次调用时程序执行正常，但是执行两轮后，后续调用时，返回结果均不符合预期。经过初步排查出错时程序正常，栈未溢出。尚不知问题出在哪，恳请各位大拿指点！ 谢谢邀请，这种结果不符合预期，仅凭上面说的这些很难推断出问题所在 首先得排除掉标准函数出错的可能 那就从给的参数入手了，对这个平台不太了解，帮不上你什么

user: user-5
content: 标准库还是有这种问题我是不信的 建议加打印贴出调试结果
user-0 提问: sizeof 使用求解

回复:
user: user-1
content: 我也觉得没啥意义，应该是编译器规定，sizeof 函数的值就为1，函数指针值就和指针的大小一样

user: user-2
content: 要详细就直接翻标准文档不就好了么  sizeof的内容也不多

user: user-2
content: sizeof 不能用函数名做操作数  结果没意义 不用讨论

user: user-2
content: 引用 3 楼 636f6c696e 的回复:应该是编译器规定，sizeof 函数的值就为1没有这样的规定
user-0 提问: 结构体对问题

回复:
user: user-1
content: 这两个结构体都是1字节对齐，因为结构体成员的类型最大是char类型。

user: user-2
content: 平常不用，基本在c语言的开源库里见过几次。详情可看下 https://www.cnblogs.com/LonelyEnvoy/p/6065252.html

user: user-3
content: 1) 如果相邻位域字段的类型相同，且其位宽之和小于类型的sizeof大小，则后面的字段将紧邻前一个字段存储，直到不能容纳为止； 2) 如果相邻位域字段的类型相同，但其位宽之和大于类型的sizeof大小，则后面的字段将从新的存储单元开始，其偏移量为其类型大小的整数倍； 3) 如果相邻的位域字段的类型不同，则各编译器的具体实现有差异，VC6采取不压缩方式（不同位域字段存放在不同的位域类型字节中），Dev-C++和GCC都采取压缩方式；  所以st3大小是3，st4是1
user-0 提问: dev 运行失败，求大神解答

回复:
user: user-0
content: 引用 5 楼 user-1的回复:[quote=引用 4 楼 数码空间 的回复:] [quote=引用 3 楼 user-1的回复:]你先在右上角 改成32bit debug版本看看 还是没有用，exe文件还是无法打开[/quote] 是一闪而过还是提示无法运行啊  你可以在你的代码最后加上一条输入指令比如getchar()或者system("pause"),让它暂停再关闭[/quote] 我搜索到其他的软件有这样的问题，有解决方法，但就我这个还没找到

user: user-0
content: 引用 5 楼 user-1的回复:[quote=引用 4 楼 数码空间 的回复:] [quote=引用 3 楼 user-1的回复:]你先在右上角 改成32bit debug版本看看 还是没有用，exe文件还是无法打开[/quote] 是一闪而过还是提示无法运行啊  你可以在你的代码最后加上一条输入指令比如getchar()或者system("pause"),让它暂停再关闭[/quote] error 216：该版本的1%与你运行的windows版本不兼容....

user: user-0
content: 引用 5 楼 user-1的回复:[quote=引用 4 楼 数码空间 的回复:] [quote=引用 3 楼 user-1的回复:]你先在右上角 改成32bit debug版本看看 还是没有用，exe文件还是无法打开[/quote] 是一闪而过还是提示无法运行啊  你可以在你的代码最后加上一条输入指令比如getchar()或者system("pause"),让它暂停再关闭[/quote] 没有用，这次是提示：不支持的16位应用程序 由于与64位的windows版本不兼容，此程序或功能....无法启动或运行。请联系软件供应商询问是否有与64位windows兼容的版本

user: user-1
content: 引用 4 楼 数码空间 的回复:[quote=引用 3 楼 user-1的回复:]你先在右上角 改成32bit debug版本看看 还是没有用，exe文件还是无法打开[/quote] 是一闪而过还是提示无法运行啊  你可以在你的代码最后加上一条输入指令比如getchar()或者system("pause"),让它暂停再关闭

user: user-0
content: 引用 3 楼 user-1的回复:你先在右上角 改成32bit debug版本看看 还是没有用，exe文件还是无法打开

user: user-1
content: 你先在右上角 改成32bit debug版本看看

user: user-0
content: 引用 1 楼 user-1的回复:你首先在文件夹里找一下 看这个exe生成了没有 如果没有的话,先要编译,才能运行 有，生成了exe文件，但是双击打不开，以前都可以得，现在不知道怎么回事了

user: user-1
content: 你首先在文件夹里找一下 看这个exe生成了没有 如果没有的话,先要编译,才能运行
user-0 提问: 新手求教 c语言一个奇怪的问题

回复:
user: user-1
content: ceil是不是应该有传入参数，在Linux下不会编译成功

user: user-2
content: 可能的原因 1.编译器缺省会引入math.h 头文件 2.编译器对于未声明的函数，认为返回值是int ,  参数可以任意多个。  也就是说，这和编译器有关。

user: user-3
content: 如果引用math库，则编译器知道ceil的原型，可以正确返回 如果不引用math库，则编译器默认为ceil返回int，与原型中的double是不一样的，这是为了兼容C89标准前的程序
user-0 提问: 求大神解答这个题里A和B文件信息怎么合并的

回复:
user: user-0
content: 引用 2 楼 main(进击的菜鸟)的回复:第二页读B文件的循环语句：for(i=0;(ch=fgetc(fp))!=EOF;i++) 似乎有误，应该将i=0去掉或者自己定义一个变量才对。先将A读到数组，继续读到B，最后写到C文件，达到合并的效果。自己可以百度那些函数。 是有误的，改为i=ni就可以把A和B合在一起，谢谢大佬！

user: user-0
content: 引用 1 楼 user-2的回复:把 A B两个文件中的字符一个个读入到数组c中，再通过冒泡法排序，然后写入文件C中。  不过我觉得第二页读B文件的循环语句：for(i=0;(ch=fgetc(fp))!=EOF;i++) 似乎有误，应该将i=0去掉或者改为i=ni才对。 对的，是有误，之前没发现，谢谢大佬

user: user-1
content: 第二页读B文件的循环语句：for(i=0;(ch=fgetc(fp))!=EOF;i++) 似乎有误，应该将i=0去掉或者自己定义一个变量才对。先将A读到数组，继续读到B，最后写到C文件，达到合并的效果。自己可以百度那些函数。

user: user-2
content: 把 A B两个文件中的字符一个个读入到数组c中，再通过冒泡法排序，然后写入文件C中。  不过我觉得第二页读B文件的循环语句：for(i=0;(ch=fgetc(fp))!=EOF;i++) 似乎有误，应该将i=0去掉或者改为i=ni才对。
user-0 提问: C野指针简单理解

回复:
user: user-0
content: 引用 2 楼 自信男孩 的回复：ok，明白了，谢谢指教

user: user-1
content: 在编程中，都会对指针变量进行if判断，一旦发现了是NULL都会立即报错或者返回。因此NULL指针危险性不会很大。 这个前提是不一定的。 其他没啥问题

user: user-2
content: 危险性大不大，纯粹看人品。

user: user-3
content: free不是释放了里面的内容，而是把堆上的空间（申请的）由使用状态变成未使用状态，即其他的进程或程序可以继续使用这部分内存区域 只是对内存状态做了修改，并没有对内存里的内容作修改。

user: user-4
content: 答对了
user-0 提问: 单片机

回复:
user: user-1
content: 应该是编译器的问题吧，我运行你的程序没有一点问题

user: user-2
content: 从你贴出来的程序是没有错的。 但是根据你的错误提示，你的工程里面是不是有2个.c的源文件。你自己检查一下。 如果只有一个main.c并且这个main.c就是你贴出来的内容，应该是不会有错的。  如果可以你把你工程里所包含的文件贴出来，这样应该可以找到问题。

user: user-3
content: 程序没问题的
user-0 提问: 怎么有32呢

回复:
user: user-0
content: 引用 1 楼 lin5161678 的回复:你把main里面的变量名换掉 不要用 abc  然后你告诉我为什么func里面的c 应该是 2? 厉害了，我的哥

user: user-1
content: 你把main里面的变量名换掉 不要用 abc  然后你告诉我为什么func里面的c 应该是 2?

user: user-2
content: 默认值只看传递顺序，又不是看变量名，函数里的变量名对外是不可见的

user: user-3
content: Console.Write(Fun(c,b)); ==>fun(2,5,6) ==》return 2+5*6
user-0 提问: double的精度问题

回复:
user: user-1
content: 引用 2 楼 轻箬笠 的回复:double和floatdouble存在精度问题。强制转为int，舍弃小数点后部分。 应该是100 × d之后的结果舍弃小数部分，而不是d县舍弃小数部分再乘以100.这个需要明确的。

user: user-2
content: 存储格式参考：https://blog.csdn.net/qq_15437667/article/details/50901543 说白了你输入的数字在计算机的二进制都是无法准确表达的数字 如果是0.5 0.75这样的小数部分，二进制能够准确表达成.1和.11。但是0.99这样的小数部分，无论是float还是double都无法准确表达，都会有误差。 所以你的例子中，*100产生精度损失后，出现了误差

user: user-2
content: 你的问题要去深入float和double的存储格式才能知道了

user: user-3
content: 浮点数格式 http://bbs.csdn.net/topics/390676437

user: user-4
content: 引用 5 楼 Martin Morning 的回复:[quote=引用 4 楼 轻箬笠的回复:][quote=引用 3 楼 Martin Morning 的回复:] [quote=引用 2 楼 轻箬笠的回复:]double和floatdouble存在精度问题。强制转为int，舍弃小数点后部分。 可是为什么99和199要减1，299就不用了[/quote] 这个跟IEEE754的标准有关系。[/quote] 意思是不同环境下运行结果不同吗[/quote] 楼主可以用http://www.binaryconvert.com/result_float.html?decimal=050046057057这个地址下面的转换器试试看。 对于单精度数float 0.99=9.900000095367431640625E-1 1.99=1.9900000095367431640625E0 2.99=2.9900000095367431640625E0 -0.99=-9.900000095367431640625E-1 对于双精度数double 0.99=9.89999999999999991118215802999E-1 1.99=1.989999999999999991118215803E0 2.99=2.99000000000000021316282072803E0 3.99=3.99000000000000021316282072803E0 跟楼主的打印结果相符合

user: user-0
content: 引用 4 楼 轻箬笠的回复:[quote=引用 3 楼 Martin Morning 的回复:] [quote=引用 2 楼 轻箬笠的回复:]double和floatdouble存在精度问题。强制转为int，舍弃小数点后部分。 可是为什么99和199要减1，299就不用了[/quote] 这个跟IEEE754的标准有关系。[/quote] 意思是不同环境下运行结果不同吗

user: user-4
content: 引用 3 楼 Martin Morning 的回复:[quote=引用 2 楼 轻箬笠的回复:]double和floatdouble存在精度问题。强制转为int，舍弃小数点后部分。 可是为什么99和199要减1，299就不用了[/quote] 这个跟IEEE754的标准有关系。

user: user-0
content: 引用 2 楼 轻箬笠的回复:double和floatdouble存在精度问题。强制转为int，舍弃小数点后部分。 可是为什么99和199要减1，299就不用了

user: user-4
content: double和floatdouble存在精度问题。强制转为int，舍弃小数点后部分。

user: user-5
content: 建议多多看看基础课程
user-0 提问: 求助，一段代码放在非主函数里会报错，但放在main里可以正常运行。。怎么回事

回复:
user: user-1
content: 你要把l n m 的指针的地址传进去才行的啊，你传了个值，mian中的l n m 又不会改变的。  修改：  void LinkList_Organize(LinkList head, LinkList *l, LinkList *n, LinkList *m) { 	Node* q, * r, * s, * t, * p = head->next; 	*l = InitiateLinkList(); 	*n = InitiateLinkList(); 	*m = InitiateLinkList(); 	q = *l, r = *n, s = *m;  mian中修改： 	LinkList_Organize(head_a, &l, &n, &m);
user-0 提问: 【求助-链接属性】

回复:
user: user-1
content: 类型声明而已，不会链接。

user: user-2
content: 谈链接属性是不是针对变量而言的，而a不是变量呢，它其实已经变成了类型，是char的别名。

user: user-3
content: typedef char a; 不就等于 #define a char;

user: user-0
content: 在哪里有讲过？快想起来告诉我
user-0 提问: c语言代码错误不知道怎么改，求助各位大佬进来看看

回复:
user: user-1
content: 函数调用与函数声明是有区别的，建议查一下这两者的区别。

user: user-2
content: 你这语法哪里学得。。。 函数调用为啥要加返回值类型？ 函数调用的用法就是func()，你写的都是void func()

user: user-3
content: 有些是编译器的问题，或许你可以把函数放在主函数前面

user: user-4
content: 函数的定义在主函数（main）前面，定义时带上类型。 拿的CASE里面写的是调用函数，但是你这几个调用函数里面为啥在定义函数？ 我觉你是想调用而不是定义，调用函数没有数据类型。 函数的定义不能嵌套在函数中。

user: user-5
content: 你这代码不全，只能说你是重新定义了一个不同的类型

user: user-0
content: 我的函数名没有问题吧😂
user-0 提问: 不能换行

回复:
user: user-1
content: 在你的IDE或编辑器的设置中找找 比如VS中的菜单上的工具->选项->文本编辑器->C/C++->自动换行 取消

user: user-0
content: 引用 1 楼 user-1的回复:修改编辑器设置中的行的长度设定 以前都是设定为每行80个字符 其实现在没必要了 怎么修改呀？我是刚入门的，还请大神赐教

user: user-1
content: 修改编辑器设置中的行的长度设定 以前都是设定为每行80个字符 其实现在没必要了
user-0 提问: 西北角法表上作业法c/c++/java实现

回复:
user: user-0
content: 或者是只有西北角法的一段代码也行，求求求大佬

user: user-0
content: 只找到有关matlab和lingo的，没有c/java

user: user-0
content: 有没有大佬啊？跪求
user-0 提问: PAT卖个萌

回复:
user: user-0
content: 引用 1 楼 user-1 的回复:你是跟PAT杠上了啊~~~ 建议增强你的代码可读性，这样你自己调试起来方便，人家看起来也方便。 需要修改的地方在下面的代码中已标明。   #include <stdio.h> #include <stdlib.h>  int main() { 	int i = 0, j = 1, a[3]; 	char c; 	char s[3][11][5];//因为一个表情符合包括多个字符，所以要用字符串 	for (; i < 3; i++) 	{ 		j = 1; 		while ((c = getchar()) != '\n') 		{ 			if (c == '[') 			{ 				scanf("%[^]]", s[i][j++]); 			} 		} 		a[i] = --j; 	} 	int n, b[5];  	scanf("%d", &n); 	for (i = 0; i < n; i++) 	{ 		for (j = 0; j < 5; j++) 			scanf("%d", &b[j]);  		if (b[0] > a[0] || b[1] > a[1] || b[2] > a[2] || b[3] > a[1] || b[4] > a[0]) //这里考虑的是超出上界 			printf("Are you kidding me? @\\/@\n"); //<===== ‘ \ ’是转义符，所以需要加一个 		else if (b[0] < 1 || b[1] < 1 || b[2] < 1 || b[3] < 1 || b[4] < 1) //<=====所以还需要考虑超出下界的情况。 			printf("Are you kidding me? @\\/@\n"); 		else 			printf("%s(%s%s%s)%s\n", s[0][b[0]], s[1][b[1]], s[2][b[2]], s[1][b[3]], s[0][b[4]]); 	} } 十分感谢。因为是自学想考研，所以想增强代码能力多做点题，不过每次遇到这种输入特别多的题出现错误我都有点束手无策的感觉。其实你这样一解决我发现问题也不是很难，下次我自己多想想后再来发帖问吧。再次感谢老哥

user: user-1
content: 你是跟PAT杠上了啊~~~ 建议增强你的代码可读性，这样你自己调试起来方便，人家看起来也方便。 需要修改的地方在下面的代码中已标明。   #include <stdio.h> #include <stdlib.h>  int main() { 	int i = 0, j = 1, a[3]; 	char c; 	char s[3][11][5];//因为一个表情符合包括多个字符，所以要用字符串 	for (; i < 3; i++) 	{ 		j = 1; 		while ((c = getchar()) != '\n') 		{ 			if (c == '[') 			{ 				scanf("%[^]]", s[i][j++]); 			} 		} 		a[i] = --j; 	} 	int n, b[5];  	scanf("%d", &n); 	for (i = 0; i < n; i++) 	{ 		for (j = 0; j < 5; j++) 			scanf("%d", &b[j]);  		if (b[0] > a[0] || b[1] > a[1] || b[2] > a[2] || b[3] > a[1] || b[4] > a[0]) //这里考虑的是超出上界 			printf("Are you kidding me? @\\/@\n"); //<===== ‘ \ ’是转义符，所以需要加一个 		else if (b[0] < 1 || b[1] < 1 || b[2] < 1 || b[3] < 1 || b[4] < 1) //<=====所以还需要考虑超出下界的情况。 			printf("Are you kidding me? @\\/@\n"); 		else 			printf("%s(%s%s%s)%s\n", s[0][b[0]], s[1][b[1]], s[2][b[2]], s[1][b[3]], s[0][b[4]]); 	} }
user-0 提问: 素数相关

回复:
user: user-1
content: 我也MARK一个。  #include<stdio.h> #include<stdbool.h> #include<stdlib.h> #include<time.h>  #define N 50  long long QuickPow(long long a,long long n,long long MOD){     long long ret=1,tmp=a%MOD;     while(n){         if(n&1) ret=ret*tmp%MOD;         tmp=tmp*tmp%MOD;         n>>=1;     }     return ret; }  bool Miller_Rabin(long long x, long long a) // a^(x-1) = 1 (mod x) {     long long tmx = x - 1;     long long s2 = tmx & -tmx;     long long res = QuickPow(a, tmx/s2, x);     if(res == 1 || res == tmx)         return 1;     while(s2>1)     {         res=(res*res)%x;         if(res == 1)             return 0;         if(res == tmx)             return 1;         s2>>=1;     }     return 0; }  bool IsPrime(long long x, int k) {     if(x == 2 || x == 3) return 1;     if(x < 2 || x%2 == 0 || x%3 == 0) return 0;     while(k--)         if(!Miller_Rabin(x, rand()%(x-2)+2))             return 0;     return 1; }  int main(){     long long m,n;     long long i;     long long sum=0;     int count=0;     int k;     srand(time(NULL));     scanf("%lld %lld", &m,&n);     if (m==1){         m=2;     }     for(i=m;i<=n;i++){         if(IsPrime(i, N)){             count++;             sum+=i;         }     }      printf("%d %lld",count,sum);     return 0; }
user-0 提问: c语言

回复:
user: user-1
content: -9在二维数组的第一行第一列，所以 i1 = 1; j1 = 1;

user: user-2
content: 这个程序实质是查找一个二维数组中数字的位置。 在二维数组中a[1][1]=-9 所以i1是1，j1也是1，计算一下结果就是7
user-0 提问: 新手请多关照：有关printf的两个问题。

回复:
user: user-0
content: 引用 4 楼 super_admi的回复:你真是太死板了。这些概念以及概念所包含的规则，只是出于某种需求人为规定的，如果你口里的物理学家和化学家因“有效数字”的概念而出现错误，那他们为什么还强行要使用这个概念？直接“保留X位小数”不是更好？ [quote=引用 2 楼 weixin_45358177 的回复:] [quote=引用 1 楼 Python_angew的回复:]有效数字为小数点后第一个不为零的数字开始计算的 啊，真是如此。谢谢你。但是 这对于物理学家和化学家其实是不对的。[/quote][/quote] 谢谢回复。不过你可能不知道有效数字除了保留小数（有时候根本轮不上小数位）外的重要意义。单说一个数的话可能不知道它是干什么的，而在实验中，由于测量不同物理量仪器可能精度不匹配，比如滴定管和普通托盘天平，比如分度值不同的电压表和电流表，不同有效位数的数据运算的结果保留几位有效数字，这时涉及多个数据，才能体现有效数字的重要意义。另外，如此不加声明的用一个已经要明确定义的科学名词是不合适的。而这至少在敝校（我觉得在其他很多地方也一样），只是高中这么一个初级阶段，都是被认为是概念混淆的。

user: user-1
content: 你真是太死板了。这些概念以及概念所包含的规则，只是出于某种需求人为规定的，如果你口里的物理学家和化学家因“有效数字”的概念而出现错误，那他们为什么还强行要使用这个概念？直接“保留X位小数”不是更好？ 引用 2 楼 weixin_45358177 的回复:[quote=引用 1 楼 Python_angew的回复:]有效数字为小数点后第一个不为零的数字开始计算的 啊，真是如此。谢谢你。但是 这对于物理学家和化学家其实是不对的。[/quote]

user: user-2
content: 关于这样的问题， 最好直接找到C99的官方叙述。

user: user-0
content: 引用 1 楼 Python_angew的回复:有效数字为小数点后第一个不为零的数字开始计算的 啊，真是如此。谢谢你。但是 这对于物理学家和化学家其实是不对的。

user: user-3
content: 有效数字为小数点后第一个不为零的数字开始计算的
user-0 提问: C语言开发能做数码相机?

回复:
user: user-1
content: 数码相机类开发属于影像编解码类产品。 肯定是需要你具备影像处理， 编解码等知识储备， 甚至有可能要求你有运用DSP或者ASIC等相关技术。 这些都需要用C语言作为基础。 不是C语言能做什么， 而是作为基本使用的工具.

user: user-2
content: 1.外设驱动； 2.内置算法。
user-0 提问: 模拟计算器，求大佬带

回复:
user: user-0
content: 明天就要交了，慌的一批

user: user-0
content: 不会写矩阵运算

user: user-0
content: 实现二维数组功能就是说这个是要用矩阵乘法吗？
user-0 提问: 我这个关于职工管理系统文件编译好像有问题，求解答，我运行代码连接好像有问题

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: ？什么东西提到了我？

user: user-3
content: 那肯定了，除非你特别厉害

user: user-0
content: 引用 10 楼 main(进击的菜鸟)的回复:[quote=引用 9 楼 九华山小和尚 的回复:] [quote=引用 8 楼 main(进击的菜鸟)的回复:]最好功能逐个实现，从最基础的开始，其他的先注释掉，这种项目不要急于写一大堆 这个项目我感觉不是很大，那样慢慢写太浪费时间了[/quote] 但是一旦出错就就像你这样子[/quote] 以后写大的程序都是一个一个功能慢慢实现吗

user: user-3
content: 引用 9 楼 九华山小和尚 的回复:[quote=引用 8 楼 main(进击的菜鸟)的回复:]最好功能逐个实现，从最基础的开始，其他的先注释掉，这种项目不要急于写一大堆 这个项目我感觉不是很大，那样慢慢写太浪费时间了[/quote] 但是一旦出错就就像你这样子

user: user-0
content: 引用 8 楼 main(进击的菜鸟)的回复:最好功能逐个实现，从最基础的开始，其他的先注释掉，这种项目不要急于写一大堆 这个项目我感觉不是很大，那样慢慢写太浪费时间了

user: user-3
content: 最好功能逐个实现，从最基础的开始，其他的先注释掉，这种项目不要急于写一大堆

user: user-0
content: 引用 3 楼 636f6c696e的回复:编译问题90%百度就能解决了，就算论坛上问也贴下编译错误内容啊 好的，等下我来贴一下

user: user-4
content: 编译问题90%百度就能解决了，就算论坛上问也贴下编译错误内容啊

user: user-0
content: 引用 6 楼 慕思暗的回复:包教包会不急不急   不急 what?你说什么，没看懂

user: user-0
content: 引用 1 楼 自信男孩 的回复:这么长的代码，建议通过注释部分功能，然后再逐步放开部分功能，一次来查找问题出在哪个功能函数里，这样也比较容易解决问题我明天试试，没什么经验，我不知道是不是文件那里用错了

user: user-5
content: 这么长的代码，建议通过注释部分功能，然后再逐步放开部分功能，一次来查找问题出在哪个功能函数里，这样也比较容易解决问题
user-0 提问: 萌新问下if嵌套结构的问题

回复:
user: user-1
content: 不合格哈哈  v哈哈v

user: user-0
content: 已经知道了，等号应该是d==0，判别要两个等号，没注意

user: user-0

user: user-0
content: 求大佬们帮忙
user-0 提问: 还是关于return的问题。

回复:
user: user-1
content: 引用 4 楼 weixin_45358177的回复:[quote=引用 3 楼 user-2的回复:]return 返回数据而已，你可以接收，也可以不接受，你定义的是int,但是你没有返回int,你自己看编译的输出结果里面是不是有警告 是有警告。但是我还是没有理解为什么有的时候没有return结果就不对；还有M，N是全局变量的时候 ，没写return就没有影响？[/quote] 你定义函数时给了函数是什么类型的就要return返回什么类型的数据，return也可以用于结束此段代码执行

user: user-2
content: 你换一个编译器你的代码会报错，编译不过。你自己定义的函数类型都有一个int要返回，但是你没有返回，这个是你自己写错了

user: user-0
content: 引用 3 楼 user-2的回复:return 返回数据而已，你可以接收，也可以不接受，你定义的是int,但是你没有返回int,你自己看编译的输出结果里面是不是有警告 是有警告。但是我还是没有理解为什么有的时候没有return结果就不对；还有M，N是全局变量的时候 ，没写return就没有影响？

user: user-2
content: return 返回数据而已，你可以接收，也可以不接受，你定义的是int,但是你没有返回int,你自己看编译的输出结果里面是不是有警告

user: user-0
content: 引用 1 楼 user-2的回复:你的m,n是全局变量 那么return的作用到底是什么呢？是储存一个结果的作用吗？

user: user-2
content: 你的m,n是全局变量
user-0 提问: 为什么是一次都不执行？

回复:
user: user-1
content: 这个程序应该是输出无数个-1

user: user-2
content: 对于判断是否相等的逻辑表达式， 在coding的时候， 建议尽量将常量或者表达式的返回放在左侧， 这样一旦漏写了一个等号， 编译器会告诉你这个错误。 如以下可写成： int main() { int k=0;    while(0 == k) { k=k-1; printf ("%d",k); } return 0;

user: user-1
content: 恩，搞错了赋值0就直接跳出了

user: user-3
content: 错了哦，while(k=0) 一次都不会执行哦 引用 2 楼 冢中枯骨 的回复:这个程序应该是输出无数个-1

user: user-4
content: while(k=0) -> 1. 判断k=0表达式的结果 2.k=0表达式的结果为k的值 3. k的值被赋值为0 4. 0表示假 5. 一次都不执行循环

user: user-5
content: 一个＝是赋值操作，两个＝才是相等

user: user-6
content: 我建议你可以看看程序编译后的汇编和OD调试一下程序，你就应该会明白了，要看while编译成汇编的时候变成什么的跳转指令，根据不同的跳转指令和标志寄存器来决定是否进入while的循环，而k=0本身是不修改标志寄存器的，如果像你上面写的程序的话，标志寄存器应该都是默认为0，跳转指令根据标志寄存器的值就会自动跳过while结构体循环了。

user: user-7
content: 我想你是想要k == 0作为while语句的条件吧
user-0 提问: C语言：关于%c,只能打印一个，为什么加了while，就可以打印出来全部，

回复:
user: user-1
content: 其实只要你后面输入的ch≠'g'你就会一直处于while循环中，当然可以多次读取并打印你每次输入的ch值了

user: user-2
content: 在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。 //请今后要用 char c; scanf("%c",&c); //时，都改为 char s[2]; char c; scanf("%1s",s); c=s[0]; //自动跳过一个或多个空格或Tab字符或回车换行，读取下一个字符。

user: user-0
content: 引用 3 楼 轻箬笠 的回复:我错了 挨个打印是因为你的输入流没读完，所以每次scanf("%c",&ch);都能读到一个字符。  引用 6 楼 轻箬笠 的回复:可以看下这篇文章https://blog.csdn.net/xlost_sl/article/details/46432377 开始在缓冲区读取字符，当它读完第一个字符后释放了那个字符所占的内存看过了，大概意思是内存缓冲区的值会一直在，用字符就会去掉一个，下面的第二个字符就变成第一个了，直到！=  这个值有效g就结束。

user: user-0
content: 引用 6 楼 轻箬笠的回复:可以看下这篇文章https://blog.csdn.net/xlost_sl/article/details/46432377 开始在缓冲区读取字符，当它读完第一个字符后释放了那个字符所占的内存 好的，我会看的，谢谢

user: user-0
content: 引用 7 楼 ggglivw的回复:char ch;     scanf("%c",&ch); 只能读取一个char 你这个和我的想法不挨着

user: user-3
content: char ch;     scanf("%c",&ch); 只能读取一个char

user: user-4
content: 可以看下这篇文章https://blog.csdn.net/xlost_sl/article/details/46432377 开始在缓冲区读取字符，当它读完第一个字符后释放了那个字符所占的内存

user: user-0
content: 引用 3 楼 轻箬笠 的回复:我错了 挨个打印是因为你的输入流没读完，所以每次scanf("%c",&ch);都能读到一个字符。既然可以读到，为什么可以顺着读下去，而不是只读第一个？我现在是初入门，之前学的是%c,只能读一个，也就是一个字符串的第一个字符。

user: user-0
content: 引用 2 楼 轻箬笠 的回复:int main(void) {     char ch;     scanf("%c",&ch);     while (ch++!='g')     {        printf("%c",ch);     }     return 0;  } 挨个打印，你得让ch++目前不加也可以打印直到碰倒限制的g

user: user-4
content: 我错了 挨个打印是因为你的输入流没读完，所以每次scanf("%c",&ch);都能读到一个字符。

user: user-4
content: int main(void) {     char ch;     scanf("%c",&ch);     while (ch++!='g')     {        printf("%c",ch);     }     return 0;  } 挨个打印，你得让ch++

user: user-0
content: 主要不明白ch !='g'这一块的运行结果对字符是怎么就能挨个打印了？
user-0 提问: 情况是这样的，我写了个控制台程序，用Shell_NotifyIcon给程序加了个托盘区图标，现在想实现右键托盘图标弹出菜单，应该怎么做呢

回复:
user: user-0
content: 上面是自己想在控制台下写一个隐藏的窗口来获取消息，从而激活托盘图标能够响应右键可以弹出图标，这里我把创建这个隐藏的子窗口写在另一个线程里，在控制台主线程过程中运行，可是没有效果，是哪里不对吗（这里创建的是控制台程序，所以用了GetModuleHandle获取当前实例句柄），另外nif是前面定义好的NIF托盘结构体。跪求解答  或者不用这样，只要能有在控制台下可以右键我创建好的托盘图标弹出菜单的方法也可以。成功解决问题可以追加分数

user: user-0
content: HMENU hMenu; HWND hWnd1; LRESULT CALLBACK    WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { 	switch (message)      {    	case WM_NOTIFYICON: 		{ 			switch(lParam) 	        case WM_RBUTTONDOWN: 			{ 				POINT pt; 				GetCursorPos(&pt); 				hMenu= CreatePopupMenu(); 				AppendMenu(hMenu,MF_STRING,IDM_GOBACK,L"回到主菜单"); 				AppendMenu(hMenu, MF_SEPARATOR, 0, NULL); 	         AppendMenu(hMenu,MF_STRING,IDM_HELP,L"帮助"); 			 AppendMenu(hMenu, MF_SEPARATOR, 0, NULL); 	         AppendMenu(hMenu,MF_STRING,IDM_EXIT,L"退出游戏"); 			 AppendMenu(hMenu,MF_SEPARATOR,0,NULL); 			 TrackPopupMenu(hMenu, TPM_RIGHTBUTTON,  pt.x, pt.y, NULL, hwnd, NULL); 			}break; 		} 		break;      case WM_DESTROY:          PostQuitMessage(0);          break;      default:          return DefWindowProc(hwnd, message, wParam, lParam);      }      return 0; } unsigned int _stdcall THREAD(void *lpParam) { 	nif.cbSize=sizeof(nif); 	nif.hWnd=hWnd; 	nif.uID=600; 	nif.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP; 	nif.szTip[0]=L'提'; 	nif.szTip[1]=L'示'; 	nif.hIcon=(HICON)LoadImage(NULL, _T("resource\\1.ICO"), IMAGE_ICON, 32, 32, LR_LOADFROMFILE);  	nif.dwState=NIS_SHAREDICON; 	nif.uCallbackMessage= WM_NOTIFYICON; 	Shell_NotifyIcon(NIM_ADD,&nif); 	HINSTANCE hInstance = ::GetModuleHandle(NULL); 	WNDCLASSEXW wcex;     wcex.cbSize = sizeof(WNDCLASSEX);  wcex.style   = CS_HREDRAW | CS_VREDRAW;  wcex.lpfnWndProc = WndProc;  wcex.cbClsExtra  = 0;  wcex.cbWndExtra  = 0;  wcex.hInstance  = hInstance;  wcex.hIcon   = NULL;  wcex.hCursor  = LoadCursor(NULL, IDC_ARROW);  wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);  wcex.lpszMenuName = NULL;//MAKEINTRESOURCE(IDC_XEYE);  wcex.lpszClassName = L"EW";  wcex.hIconSm  = NULL;  RegisterClassEx(&wcex);      hWnd1=CreateWindowEx(WS_EX_NOACTIVATE, // 该参数保证该窗口永不被激活    L"EW", L"title",    WS_POPUP,    0, 0, 10, 10,    NULL, NULL, 0, NULL) ; 	  MSG msg;    // 主消息循环:        while (GetMessage(&msg, nullptr, 0, 0))       {           TranslateMessage(&msg);           DispatchMessage(&msg);       }        return msg.wParam;    }
user-0 提问: 麻烦帮忙解答一下图片上的题，谢谢

回复:
user: user-0
content: 是要好好看看书了，谢谢你的解答:)

user: user-1
content: 学了一学期都搞不定，该好好看书了  #include <stdio.h>  float sum = 0, max = 0 ; int cnt = 0, failCnt = 0 ; void Score(float score) { 	sum += score ; 	cnt += 1 ; }  void MaxScore(float score) { 	if(max < score) 		max = score ; }  void GetFailCnt(float score) { 	if(score < 60) 		failCnt += 1 ; }  int main()  { 	float score = 0 ; 	while(1) 	{ 		scanf("%f", &score) ; 		if(score < 0)	//输入负数停止 			break ;  		Score(score) ; 		MaxScore(score) ; 		GetFailCnt(score) ; 	} 	 	printf("总分：%f\n平均分：%f\n最高分：%f\n不及格人数：%d\n",  		sum, sum/cnt, max, failCnt) ;  	return 0;  }
user-0 提问: 新手求助，为什么运行到登录函数 输入用户名程序就会死掉

回复:
user: user-1
content: 这个问题你自己看下堆栈，编译器其实已经告诉你答案了，超大概率是2楼说的，空指针问题。C系列的语言，指针操作前一定判断NULL，越界。

user: user-2
content: 检查你的D盘是否有你要读取的这个文件：information.txt
user-0 提问: 新手请多指教：有关Return的问题

回复:
user: user-0
content: 引用 2 楼 user-2的回复:你这add实现函数没有类型可以编译过？？ 不写类型是默认int。

user: user-1
content: 函数的返回值一般由寄存器eax返回，你在调试器中可以看看eax的变化

user: user-2
content: 你这add实现函数没有类型可以编译过？？

user: user-0
content: 我赋值长是1，宽是2，最后结果是2。
user-0 提问: 新手请多关照：有关变量声明的问题

回复:
user: user-0
content: 引用 6 楼 ggglivw的回复:你们老师是体育老师寒假看了几天书就来教你们的？ 确实有点儿失望，高考完抱着很大的好奇心找了个学校学C语言，好多问题却只能自己解决。我觉得老师自己就不重视概念，只重操作。而我的学习经历告诉我只有弄清概念才知道每一步到底该干什么，为什么这样做，才能算“有思想的芦苇”，而不是低级的机器人。有些东西我通过高中数学知识的迁移都理解得比老师容易。所以谢谢前辈的帮助了。

user: user-1
content: 注意局部变量的作用域是函数内，除了函数就没有意义和无效的。

user: user-2
content: 你们老师是体育老师寒假看了几天书就来教你们的？

user: user-3
content: 。。。。。。。。。。。。。这个都怪老师么 引用 4 楼 weixin_45358177 的回复:[quote=引用 2 楼 曹佑之的回复:]全局变量、局部变量的作用域不同。。。。。。 main里面认识MN,但是add函数中不认识。。。。 谢谢啦，我买本教程自己看吧，老师没有讲这些内容。[/quote]

user: user-0
content: 引用 2 楼 曹佑之的回复:全局变量、局部变量的作用域不同。。。。。。 main里面认识MN,但是add函数中不认识。。。。 谢谢啦，我买本教程自己看吧，老师没有讲这些内容。

user: user-0
content: 引用 1 楼 ggglivw的回复:没毛病，确实没有声明，注意变量的生命周期，这个是基础中的基础，再看下书. 唉，老师讲的确实不到位啊，这个基础问题确实没讲到。

user: user-4
content: 全局变量、局部变量的作用域不同。。。。。。 main里面认识MN,但是add函数中不认识。。。。

user: user-2
content: 没毛病，确实没有声明，注意变量的生命周期，这个是基础中的基础，再看下书.
user-0 提问: 初学者请多关照：&&两侧不是命题时？

回复:
user: user-1
content: &&的结果只有2个，true和false, 左右的条件非0即true

user: user-0
content: 引用 1 楼 ggglivw的回复:a&&b的意思是a和b都非0即可 那么 就是说逻辑运算符，比如&&两侧可以是命题，判断真假，返回0或1；也可以是 数值 通过判断是否为0来返回0和1。对吗？

user: user-2
content: 引用 5 楼 weixin_45358177 的回复:[quote=引用 1 楼 ggglivw的回复:]a&&b的意思是a和b都非0即可 谢谢帮助，那么负数也是1吗？[/quote]负数当然不是 1

user: user-3
content: 引用 4 楼 weixin_45358177 的回复:[quote=引用 3 楼 曹佑之的回复:]非0为真，也就是两个数不是0的情况就是真。 谢谢你，那就是说负数也是1吗？[/quote]  计算规则是判断两个数：0或者非0     所以不论正负

user: user-2
content: && 判断的不是什么命题不命题的  &&检查2个表达式求值结果 是不是0 (或者0.0 或者NULL等)

user: user-0
content: 引用 2 楼 ggglivw的回复:这个问题你自己用编译器尝试下，很容易就试出来的，常规点的0，1，-1，0xffffffff, 0x8fffffff 还有一个问题，除了0，1外其他值是怎么出来的？

user: user-0
content: 引用 1 楼 ggglivw的回复:a&&b的意思是a和b都非0即可 谢谢帮助，那么负数也是1吗？

user: user-0
content: 引用 3 楼 曹佑之的回复:非0为真，也就是两个数不是0的情况就是真。 谢谢你，那就是说负数也是1吗？

user: user-3
content: 非0为真，也就是两个数不是0的情况就是真。

user: user-1
content: 这个问题你自己用编译器尝试下，很容易就试出来的，常规点的0，1，-1，0xffffffff, 0x8fffffff

user: user-1
content: a&&b的意思是a和b都非0即可
user-0 提问: C语言函数模块的定义参数列表功能说明以及函数间的调用关系程序的详细结构

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

user: user-2
user-0 提问: PTA C语言666问题

回复:
user: user-1
content: 能先说一下什么问题吗？另外，题目的需求是什么，但从代码去理解吗？如果但从代码去理解，代码是不是应该先没问题，所以 很矛盾。

user: user-2
content: int main() {     int n,sn=0,i,k=1;     scanf("%d",&n);     for(i=1;i<=n;i++)     {         sn=sn+k*6;         k=pow(10,i);     }     printf("%d\n",sn);     return 0;      }
user-0 提问: C语言这是一个计算时间的程序，把秒数转换为分钟和秒数

回复:
user: user-0
content: 引用 1 楼 轻箬笠 的回复:while(sec > 0);//这个分号多余了好的谢谢，是我的认真度还不够，这么简单的问题也没发现，憋了好久。非常感谢第一时间回答我的问题。

user: user-1
content: while(sec > 0);//这个分号多余了

user: user-2
content: 這個問題常常發生在打字太快

user: user-3
content: 都是从菜鸟过来的。
user-0 提问: C语言考试

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-0
content: 引用 2 楼 636f6c696e的回复:恭喜挂科，虽然楼主考完试是不会来看的 这么久了我还是来看了，没挂科，七十几

user: user-0
content: 引用 1 楼 ggglivw的回复:还有30分钟考试完毕 没挂科欧，七十几，嘻嘻😄

user: user-0
content: 😂😂😂😂😂这个没挂科，七十几分

user: user-2
content: 恭喜挂科，虽然楼主考完试是不会来看的

user: user-3
content: 还有30分钟考试完毕

user: user-4
content: 看了一下，好像过了考试时间哦，那就不用写了，哈哈。。。。。 暑假愉快。。。
user-0 提问: Memery  c 代码实现(本人小白，希望大家提出问题)

回复:
user: user-0
content: 引用 2 楼 user-2的回复:char  *src_t=(char  *)src; 这行需要加const。  memerycpy改成memorycpy。  还有同一块内存不同部位copy的时候有重叠的情况会有bug。 谢谢你 亲，可以指点一下怎么去规避这种bug呢，关于这点我没有想到过

user: user-1
content: 逻辑理解上应该是对的， 但是由于coding不太规范， 可能会让你的这段source code编译失败。 不信， 可以将这段代码放到IDE里编译试试看.

user: user-2
content: char  *src_t=(char  *)src; 这行需要加const。  memerycpy改成memorycpy。  还有同一块内存不同部位copy的时候有重叠的情况会有bug。

user: user-2
content: char  *src_t=(char  *)src;
user-0 提问: 编写一个程序

回复:
user: user-0
content: 引用 1 楼 user-1的回复:我希望公式没有敲错。  #include <stdio.h> #include <math.h>  #define NCNT 10000  double P = 206235.0; double E = 0.082; double L = 3.0; double A = 6378137.0;  double CalH(double mu) {     return E*cos(mu); }  double CalM(double mu) {     return A*(1-pow(E,2))/sqrt(pow(1-pow(E,2)*sin(mu),3)); }  double CalS(double mu) {     double s = 0, x = 0;     for(int i = 1; i < NCNT + 1; i ++)     {         x = (x + mu/NCNT);         s = s + CalM(x)*(mu/NCNT);     }     return s; }  double CalN(double mu) {     return A/sqrt(1-pow(E,2)*pow(sin(mu),2)); }  double getX(double mu) {     return CalS(mu) + pow(L,2)*CalN(mu)*sin(mu)*cos(mu)/(2*pow(P,2)) + pow(L,4)*CalN(mu)*sin(mu)*cos(mu)*(5-pow(tan(mu),2)+9*pow(CalH(mu),2)+4*pow(CalH(mu),4)); }  double getY(double mu) {     return L*CalN(mu)*cos(mu)/P +            pow(L,3)*CalN(mu)*pow(cos(mu),3)*(1-pow(tan(mu),2)+pow(CalH(mu),2))/(6*pow(P,3)) +            pow(L,5)*CalN(mu)*pow(cos(mu),5)*(5-180*pow(tan(mu),2)+pow(tan(mu),4)); }  int main() {     double x, y, mu;     mu = 46.0;     x = getX(mu);     y = getY(mu);     printf("X = %f,  Y = %f\r\n", x, y);     return 0; } 太感谢了，，，感谢相助。

user: user-1
content: 我希望公式没有敲错。  #include <stdio.h> #include <math.h>  #define NCNT 10000  double P = 206235.0; double E = 0.082; double L = 3.0; double A = 6378137.0;  double CalH(double mu) {     return E*cos(mu); }  double CalM(double mu) {     return A*(1-pow(E,2))/sqrt(pow(1-pow(E,2)*sin(mu),3)); }  double CalS(double mu) {     double s = 0, x = 0;     for(int i = 1; i < NCNT + 1; i ++)     {         x = (x + mu/NCNT);         s = s + CalM(x)*(mu/NCNT);     }     return s; }  double CalN(double mu) {     return A/sqrt(1-pow(E,2)*pow(sin(mu),2)); }  double getX(double mu) {     return CalS(mu) + pow(L,2)*CalN(mu)*sin(mu)*cos(mu)/(2*pow(P,2)) + pow(L,4)*CalN(mu)*sin(mu)*cos(mu)*(5-pow(tan(mu),2)+9*pow(CalH(mu),2)+4*pow(CalH(mu),4)); }  double getY(double mu) {     return L*CalN(mu)*cos(mu)/P +            pow(L,3)*CalN(mu)*pow(cos(mu),3)*(1-pow(tan(mu),2)+pow(CalH(mu),2))/(6*pow(P,3)) +            pow(L,5)*CalN(mu)*pow(cos(mu),5)*(5-180*pow(tan(mu),2)+pow(tan(mu),4)); }  int main() {     double x, y, mu;     mu = 46.0;     x = getX(mu);     y = getY(mu);     printf("X = %f,  Y = %f\r\n", x, y);     return 0; }
user-0 提问: C++函数sprintf在安卓与PC下的区别

回复:
user: user-0
content: 引用 9 楼 早打大打打核战争 的回复:用math.h的nearbyint：   fesetround(FE_TONEAREST);   printf("%.0lf\n", nearbyint(0.5));   printf("%.0lf\n", nearbyint(1.5)); 谢谢啦

user: user-0
content: 引用 2 楼 赵4老师的回复:浮点数格式 http://bbs.csdn.net/topics/390676437 谢谢。不过我怀疑是不同系统之间的差异

user: user-0
content: 对的。使用sprintf的%.0f，是四舍五入的。 只是同样的代码下，安卓与pc下的结果一直都不一样，安卓的这个结果还是固定的，试了五六台安卓设备，都是这样子。 精度应该是上下浮动，那应该会有概率的得到不同结果。 另外上面代码中，我换成使用round来获取四舍五入的值，则必定是进一的。 所以有点搞不懂这个的原理

user: user-1
content: 用math.h的nearbyint：   fesetround(FE_TONEAREST);   printf("%.0lf\n", nearbyint(0.5));   printf("%.0lf\n", nearbyint(1.5));

user: user-0
content: 引用 6 楼 早打大打打核战争的回复:这是编译器使用的round方法造成的，而且看起来fesetround无效，库函数printf、sprintf之类的使用固定的舍入方法，严格来说，安卓上的输出是对的，因为IEEE754定义了5种舍入方法，默认是roundTiesToEven，所以0.5转换到整数是0，1.5则是2 请问下，pc上面，没有采用这种标准是吗？

user: user-0
content: 引用 6 楼 早打大打打核战争的回复:这是编译器使用的round方法造成的，而且看起来fesetround无效，库函数printf、sprintf之类的使用固定的舍入方法，严格来说，安卓上的输出是对的，因为IEEE754定义了5种舍入方法，默认是roundTiesToEven，所以0.5转换到整数是0，1.5则是2 果然是这个标准，好头晕。 还是谢谢啦

user: user-1
content: 这是编译器使用的round方法造成的，而且看起来fesetround无效，库函数printf、sprintf之类的使用固定的舍入方法，严格来说，安卓上的输出是对的，因为IEEE754定义了5种舍入方法，默认是roundTiesToEven，所以0.5转换到整数是0，1.5则是2

user: user-2
content: 比如 double d1=1; double d0=0.5; d1 += d0; 不同的环境下,d1有可能是1.500000001也可能是1.49999999995 而sprintf的时候会四舍五入

user: user-3
content: 浮点数格式 http://bbs.csdn.net/topics/390676437

user: user-2
content: double和float的数都存在精度问题的。
user-0 提问: 二级指针求助

回复:
user: user-1
content: str为一级指针数组，p为二级指针 第四行是二级指针p指向一级指针str 第五行是二级指针p降级一次变为一级指针，p指向的是str【0】的值，显示hello（提示：这里的星号表示降级和上面定义char的星号表示指针。数组不打中括号，默认首地址str【0】） 第六行是二级指针p的指向向下偏移一次再降级，指向的就是一级指针str[1]，打印出的就是the

user: user-2
content: 数组里面存的应该是 【char *】【char *】【char *】 p是指向数组元素的指针。 p+1所指向的位置的移动长度就是sizeof(char *)，也就是说指向下一个数组元素。

user: user-3
content: p=str[0]的地址，*p=str[0]地址的内存信息=“hello” p+1=str[1]的地址，*(p+1)=str[1]地址的内存信息=“the” 依次类推
user-0 提问: 使用C语言读取特定编码的文件内容

回复:
user: user-1
content: 这不扯呢吗？谁告诉你c语言默认是用utf8编码读取文件了，这明明跟文件和系统编码有关。 如果文件存的是gbk编码，文件内容是“中”，你觉得读出来的字节是两字节还是三字节？

user: user-2
content: 参考 https://github.com/sunxfancy/ExIconv
user-0 提问: 我用fread写入一个链表进文件，但是读出来就出错了

回复:
user: user-1
content: p->next = head->next;         head->next = p; 感觉是这里错了吧，p是新申请的，那么应该把前一个结构体的成员赋值为p而不是把p的成员赋值为前一个成员的地址
user-0 提问: 哪里错了，该怎么改呀，

回复:
user: user-1
content: 另外，重复定义x，y --> 第4，5行前面int去掉； 先读入a，b，再计算x，y --> 调整下scanf语句和计算x，y语句顺序； scanf语句双引号里面最好不要加逗号，不然你读入的时候也要输入逗号 --> 把双引号里面逗号去掉，读入的时候以空格或者回车作为间隔

user: user-2
content: 楼主写过hello world吗？为啥include语句后面还有分号啊？

user: user-3
content: 建议 1) 去掉include后面的分号； 2) 去掉x = a + b; y = a - b；前面的int； 3) 完成上面的第2步后，把x = a + b; y = a -b;放到scanf语句之后；否则得不到你想要的结果；

user: user-1
content: 还有第一行，#include <stdio.h>后面不要加分号

user: user-4
content: 楼上说的对。 要么：int a,b,x,y;修改为int a,b; 要么：后面的int x = a+b修改为x=a+b; 即前面的int去掉。  还有要计算x,y的数值，应该在scanf后进行x=a+b;等运算。

user: user-5
content: x,y重复定义了 将int a,b,x,y;改为int a,b; 即可。

user: user-6
content: 引用 7 楼 文言言 的回复:先输入a，b。再对x，y赋值  我也有这个疑问，，ab复制之前不能用这两个变量去初始化别的变量吧。。

user: user-7
content: 先输入a，b。再对x，y赋值
user-0 提问: 数据结构c语言严版中的二叉树遍历中*visit

回复:
user: user-1
content: Visit是一个函数指针，他代表着一种处理当前结点data的方式 先序遍历的话，就是先visit(T->data),，然后再遍历左孩子和右孩子。 书上不是有个最简单的visit函数嘛，他直接打印了当前结点T的data。你就吧那个参数TElemType e看成 T->data就行了。 就是看你想怎么输出二叉树结点的数据就怎么写这个visit。 我自己理解书上的 status OK ERROR OVERFLOW  #define OK 0 #define ERROR -1 #define OVERFLOW -2  typedef int Status;
user-0 提问: 求大佬解一下这一题谢谢!

回复:
user: user-1
content: 是连续return 0，否则return -1  int func_checkNum(int iNumber) { 	int iTemp = 0; 	 	if(iNumber < 10) 	{ 		return -1; 	} 	 	int iValue = iNumber%2; 	 	iTemp = iNumber/10; 	 	if(iValue == iTemp%2) 	{ 		return 0; 	} 	 	return func_checkNum(iNumber/10); }

user: user-2
content: 别做伸手党，自己动手做做

user: user-3
content: 循环提取连续两个位的数字判断和是否为偶就可以啦
user-0 提问: function' : incompatible types - from 'int [100]' to 'const char *'

回复:
user: user-1
content: 先弄明白a是做什么的，为什么定义成int类型缺当成字符数组用

user: user-2
content: int a[100]={0}; int 数组为什么赋值成一个字符串？

user: user-3
content: 编译器问题，如果不想换编译器，可以改成a[100]={}试试。 还有，命名风格弄好点，变量尽量有实际的意义，除非for里面的迭代临时变量，变量尽量初始化，避免雷。

user: user-3
content: i没有初始化，strlen要求的是char*，你传递的是int*

user: user-4
content: 错的是 strlen(a) 不是定义初始化 a

user: user-5
content: 将a[100]={'\0'}单独拿出来 写 char a[100]={0}; 即可解决 '\0'的值就是0，和写0是一样的
user-0 提问: 关于51单片机的交流电压表设计的程序，有些不理解，有没有哪位仁兄帮忙解释下，主要是写论文需要

回复:
user: user-1
content: 你说你有一些不理解，不知道你哪里不理解。 这个程序就2块。 1. 读取ADC0809的值 2. 把读取的数字值换算成真实值，然后显示出来。  根据程序来看，你硬件只能显示四位数，用的共阴，扫描方式。
user-0 提问: C语言疑惑题

回复:
user: user-1
content: 宏定义在预编译阶段是要展开的，展开就是8 > 2 ? 8 : 2 * 5.0，结果可想而知， 如果加上括号，就是(8 > 2 ? 8 : 2) * 5.0 结果就是40.0

user: user-2
content: 理解和讨论之前请先学会如何观察！  VC编译选项加/EP /P（项目、属性、配置属性、C/C++、预处理器、预处理到文件：是，预处理取消显示行号：是），重新编译，查看宏展开后对应的.i文件。gcc加-E http://bbs.csdn.net/topics/391003898

user: user-3
content: #define 宏定义只是单纯的替换文本

user: user-4
content: 引用 1 楼 user-6 的回复:宏是展开，展开后注意运算顺序 A(8,2)*5.0等价于(8>2)?8:2*5.0，所以结果是8 +1. 宏定义单纯展开，这种一般写成inline函数或者加足够多的()

user: user-5
content: 将表达式替换进去，相当于8 > 2 ？8  : 2*5.0，乘的是b的值，但没有意义，表达式已经选了8为最终结果。加个括号之后，会先计算表达式值为8再乘5，结果为40

user: user-6
content: 宏是展开，展开后注意运算顺序 A(8,2)*5.0等价于(8>2)?8:2*5.0，所以结果是8
user-0 提问: 新手提问：关于若干行整数要怎么处理？用数组吗？

回复:
user: user-1
content: 是的，这题有一个陷阱，否则太简单了 这样改一下就好了（除非他整出-0这种流氓的测试用例）   while (scanf("%d%d", &a, &b) != EOF)     printf("Case %d: %d %c %d = %d\n",             c++, a, b < 0 ? '-' : '+', b < 0 ? -b : b, a + b);

user: user-2
content: 引用 5 楼 早打大打打核战争 的回复:读一行输出一行，直到碰到EOF #include <stdio.h>  int main() {   int a, b, c = 1;    while (scanf("%d%d", &a, &b) != EOF)     printf("Case %d: %d + %d = %d\n", c++, a, b, a + b);    return 0; } 有问题的 比如  输入  -10 -5 输出应该是  Case 1: -10 - 5 = -15 你会输出 -10 + -5

user: user-1
content: 读一行输出一行，直到碰到EOF #include <stdio.h>  int main() {   int a, b, c = 1;    while (scanf("%d%d", &a, &b) != EOF)     printf("Case %d: %d + %d = %d\n", c++, a, b, a + b);    return 0; }

user: user-3
content: 用三个int变量就可以了，然后循环执行； num1, num2, sum

user: user-4
content: 确实破题目，如果一次输入几千行的整数，再加上printf的输出，你们学校的机器处理时间绝对会超过1000ms. printf输出屏幕很耗时。

user: user-5
content: 这种破题目出得就不严谨，不过你可以输入一行就输出一行来做，不会有问题

user: user-6
content: 用getline吧。然后得到两个整数，再输出。退出条件是，没有得到两个整数
user-0 提问: 将1到20，放在长度19的数组里，有一个数没有在里面，编程实现输入的过程

回复:
user: user-1
content: 引用 3 楼 自信男孩 的回复:初始化一个数组为0，然后根据输入的数据与小标之间的对应关系，可以很好解决你的问题。 比如输入12，判断一下arr[12-1] == 12，如果等于说明已经输入，提示这次失败。  这个得看题目，除了这个数据结构是否还允许用其他的记录。你这样玩只能记录1-19, 20是否在里面必须要一个额外变量，如果不允许其他的数据结构就只能遍历，允许的话倒是能用if (!valid(value)) return; if (value>=20) {...}else{ a[value-1]=value ...}

user: user-2
content: 初始化一个数组为0，然后根据输入的数据与小标之间的对应关系，可以很好解决你的问题。 比如输入12，判断一下arr[12-1] == 12，如果等于说明已经输入，提示这次失败。

user: user-1
content: 如果只能用数组作为数据结构的话，每次输入先判断有消息，然后for判断一次是否重复即可，记录数据，length+1

user: user-3
content: int arr[20] = {0}; 输入一个置位一个 arr[data] = 1
user-0 提问: 数据结构C语言问题

回复:
user: user-1
content: 简单来说没做完排序，代码有问题 引用 2 楼 qq_36984590 的回复:[quote=引用 1 楼 636f6c696e的回复:]main->Fcfs 事实上Fcfs内部不能称之为排序，因为他只做了冒泡排序的一轮，生成的数据并非是有序 Fcfs不是调用的void Fcfs这个函数吗，这个排序是什么时候用到的啊[/quote]

user: user-0
content: 那我是不是把这段去了，也没有影响。

user: user-0
content: 引用 1 楼 636f6c696e的回复:main->Fcfs 事实上Fcfs内部不能称之为排序，因为他只做了冒泡排序的一轮，生成的数据并非是有序 Fcfs不是调用的void Fcfs这个函数吗，这个排序是什么时候用到的啊

user: user-1
content: main->Fcfs 事实上Fcfs内部不能称之为排序，因为他只做了冒泡排序的一轮，生成的数据并非是有序

user: user-0
content: 引用 5 楼 user-2的回复:for(i=0;i<n;i++) {   if(a[i].chansheng<a[i-1].wancheng)   {     a[i].wancheng=a[i-1].wancheng+a[i].wufu;     a[i].zhouzhuan=a[i].wancheng-a[i].chansheng;     a[i].daiquantime=a[i].zhouzhuan/a[i].wufu;   }   else   {     a[i].wancheng=a[i].chansheng+a[i].wufu;     a[i].zhouzhuan=a[i].wancheng-a[i].chansheng;     a[i].daiquantime=a[i].zhouzhuan/a[i].wufu;   } } 这段摘自你的Fcfs(),你的i从0开始自增，当i=0时， if(a[i].chansheng<a[i-1].wancheng) 实则是  if(a[0].chansheng<a[-1].wancheng)，你不觉得有问题吗？ 嗯嗯，确实有点，if里面应该加个i!=0，谢谢

user: user-2
content: for(i=0;i<n;i++) {   if(a[i].chansheng<a[i-1].wancheng)   {     a[i].wancheng=a[i-1].wancheng+a[i].wufu;     a[i].zhouzhuan=a[i].wancheng-a[i].chansheng;     a[i].daiquantime=a[i].zhouzhuan/a[i].wufu;   }   else   {     a[i].wancheng=a[i].chansheng+a[i].wufu;     a[i].zhouzhuan=a[i].wancheng-a[i].chansheng;     a[i].daiquantime=a[i].zhouzhuan/a[i].wufu;   } } 这段摘自你的Fcfs(),你的i从0开始自增，当i=0时， if(a[i].chansheng<a[i-1].wancheng) 实则是  if(a[0].chansheng<a[-1].wancheng)，你不觉得有问题吗？
user-0 提问: c/c++ 顺序 Excel 修改？ 全局变量 结构体 字符分割

回复:
user: user-0
content: 引用 2 楼 user-1的回复:[quote=引用 1 楼 qq_45220742 的回复:] 在线付费求解 文件名字叫xxx.xls又不是一定要求用excel格式，你以个文本文件叫xxx.xls不行吗 你自己可以读取就行了，读写xls文件不用库只用c估计没几个人能做到,office文档格式都是不公开的，谁没事研究这个[/quote] 那就TXT在c中读取文件用户输入 比如录入成绩

user: user-1
content: 我的ID@126.com可以发邮件给我

user: user-0
content: 哇啦，大佬能私聊吗emmmm

user: user-1
content: 引用 1 楼 qq_45220742 的回复:在线付费求解 文件名字叫xxx.xls又不是一定要求用excel格式，你以个文本文件叫xxx.xls不行吗 你自己可以读取就行了，读写xls文件不用库只用c估计没几个人能做到,office文档格式都是不公开的，谁没事研究这个

user: user-0
content: 在线付费求解
user-0 提问: cprimerplus p165面程序清单跑不出来

回复:
user: user-0
content: 引用 3 楼 真相重于对错 的回复：for (index = 0; index < SIZE; index++);	//这句 printf("%5d", score[index]); printf("\n"); for (index = 0; index < SIZE; index++);//还有这句把for语句后面的分号去掉昨天找到了，太难发现了

user: user-1
content: for (index = 0; index < SIZE; index++);	//这句 printf("%5d", score[index]); printf("\n"); for (index = 0; index < SIZE; index++);//还有这句把for语句后面的分号去掉

user: user-0
content: 头文件单独放了

user: user-0
user-0 提问: 救救孩子吧

回复:
user: user-1
content: #include<iostream> using namespace std;  int main(){ 	int width = 5, height = 5; 	for(int i=0;i<height;i++){ 		for (int j = 0; j < width; j++) { 				//二维表格，i，j代表第i行第j列，打印图形只不过是找ij的关系填表 		} 	} 	return 0; }
user-0 提问: 小白求书

回复:
user: user-1
content: 谭浩强的C语言程序设计

user: user-2
content: 引用 4 楼 云海有潮 的回复:[quote=引用 3 楼 六道佩恩的回复:]其实你再晚几个月问的话，应该有一本不错的书可以推荐 ？？？这其中还有什么门道吗[/quote] 我有个朋友在写书，，应该就是写的C语言的，

user: user-3
content: K&R的C语言程序设计跟Cprimerplus

user: user-0
content: 引用 3 楼 六道佩恩的回复:其实你再晚几个月问的话，应该有一本不错的书可以推荐 ？？？这其中还有什么门道吗

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

user: user-5
content: https://baike.baidu.com/item/c%20primer%20plus/4851344?fr=aladdin

user: user-2
content: 其实你再晚几个月问的话，应该有一本不错的书可以推荐
user-0 提问: 关闭子窗口后，会发送WM_QUIT到线程吗？

回复:
user: user-1
content: 学会使用spy++

user: user-0
content: 引用 6 楼 轻箬笠 的回复:[quote=引用 5 楼 六道佩恩 的回复:] 就是说，只在主窗口中使用PostQuitMessage是吧？  我是这么认为的。而且在子窗口调用这个函数，还有可能造成程序的崩溃。[/quote] 程序崩溃是因为资源没释放造成的吗？而且，这样的话，是不是说明子窗口和主窗口必须用不同的窗口类？

user: user-2
content: 引用 5 楼 六道佩恩 的回复:就是说，只在主窗口中使用PostQuitMessage是吧？  我是这么认为的。而且在子窗口调用这个函数，还有可能造成程序的崩溃。

user: user-0
content: 引用 4 楼 轻箬笠 的回复:反正我干了这么多年，没怎么用过这个函数。而且子窗口的话，一般destroywindow基本就可以了 就是说，只在主窗口中使用PostQuitMessage是吧？

user: user-2
content: 引用 3 楼 六道佩恩 的回复:[quote=引用 2 楼 轻箬笠 的回复:] https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-postquitmessage PostQuitMessage function Indicates to the system that a thread has made a request to terminate (quit). It is typically used in response to a WM_DESTROY message. 这个函数一般用在WM_DESTROY后面，所以不存在这个问题吧 你发这个我知道啊，所以一般子窗口的处理方式是不发送WM_QUIT消息是吧？[/quote] 反正我干了这么多年，没怎么用过这个函数。而且子窗口的话，一般destroywindow基本就可以了

user: user-0
content: 引用 2 楼 轻箬笠 的回复:https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-postquitmessage PostQuitMessage function Indicates to the system that a thread has made a request to terminate (quit). It is typically used in response to a WM_DESTROY message. 这个函数一般用在WM_DESTROY后面，所以不存在这个问题吧 你发这个我知道啊，所以一般子窗口的处理方式是不发送WM_QUIT消息是吧？

user: user-2
content: https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-postquitmessage PostQuitMessage function Indicates to the system that a thread has made a request to terminate (quit). It is typically used in response to a WM_DESTROY message. 这个函数一般用在WM_DESTROY后面，所以不存在这个问题吧
user-0 提问: 多线程编程：生产者-消费者问题。

回复:
user: user-1
content: 这个例子很简单的。。。至于有偿吗，建议看下侯捷的win32多线程程序设计这本书，讲的很好。其中有你想要的

user: user-1
content: std::thread 开启2线程，一个负责生产，压入数据，一个负责处理. 生产者通知消费者处理可以用std::mutex和std::condition_variable 来做,记得要做empty判断，通知到的时候正在阻塞才收到，处理中不知道，所以要对消费者的队列判断是否处理完毕，没有处理完毕就继续处理，直到OVER.
user-0 提问: 请大佬指点迷津

回复:
user: user-1
content: 在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。 //请今后要用 char c; scanf("%c",&c); //时，都改为 char s[2]; char c; scanf("%1s",s); c=s[0]; //自动跳过一个或多个空格或Tab字符或回车换行，读取下一个字符。

user: user-0
content: 引用 1 楼 focuslight的回复:划黑线是定义类型为struct mstop的结构变量， 百度typedef   C 中利用scanf()函数输入字符串，在按下回车后'\n'字符是被存储在了缓存区的，如果下一次继续读入字符这个换行符可能会产生影响，也可能不会产生影响。总结如下：  不会产生影响的情况：第二次输入为“字符串”（或数字）；  scanf("%s",a); scanf("%s",b); printf("%s\n",a); printf("%s\n"，b);  如果输入为:  hello world  则输出也为：  hello world  scanf()函数更基于获取单词（get world）而不是获取字符串（get string）；scanf()是以第一个非空白字符开始读入的，故第一次读入字符所输入的'\n'，在第二个scanf()函数开始时被忽略掉了。（“%d”同理）   会产生影响的情况：第二次读入的是‘字符’：  scanf("%c",&a); scanf("%c",&b); printf("%c\n",a); printf("%c\n",b);  如果输入h，在按下回车后会直接输出：  h   则直接就会输出为h和两个空行：   h   因为读入的是字符，所以在第一个字符读完后的'\n', 在运行第二个scanf()时直接被读取了，所以第二个printf()函数输出为两个'\n'; 如果想消除'\n'的影响可以在中间加个getchar()函数； 大佬，现在又有新问题了，就是执行了一两个函数后就会发现，比如输入3但是出来的还是菜单，但按一下enter键，到第二个菜单就可以，这是怎么回事啊

user: user-0
content: 引用 1 楼 focuslight的回复:划黑线是定义类型为struct mstop的结构变量， 百度typedef   C 中利用scanf()函数输入字符串，在按下回车后'\n'字符是被存储在了缓存区的，如果下一次继续读入字符这个换行符可能会产生影响，也可能不会产生影响。总结如下：  不会产生影响的情况：第二次输入为“字符串”（或数字）；  scanf("%s",a); scanf("%s",b); printf("%s\n",a); printf("%s\n"，b);  如果输入为:  hello world  则输出也为：  hello world  scanf()函数更基于获取单词（get world）而不是获取字符串（get string）；scanf()是以第一个非空白字符开始读入的，故第一次读入字符所输入的'\n'，在第二个scanf()函数开始时被忽略掉了。（“%d”同理）   会产生影响的情况：第二次读入的是‘字符’：  scanf("%c",&a); scanf("%c",&b); printf("%c\n",a); printf("%c\n",b);  如果输入h，在按下回车后会直接输出：  h   则直接就会输出为h和两个空行：   h   因为读入的是字符，所以在第一个字符读完后的'\n', 在运行第二个scanf()时直接被读取了，所以第二个printf()函数输出为两个'\n'; 如果想消除'\n'的影响可以在中间加个getchar()函数； 非常感谢你的耐心解答，问题已解决

user: user-2
content: 1.第一个问题，不必在while(ch!=0)外打印菜单并getch();给ch个初始不等于0的值就行了 循环外printf打印菜单开始的到循环的全删了 换成ch=1;   2.定义一个mstop类型的变量 stop

user: user-3
content: 划黑线是定义类型为struct mstop的结构变量， 百度typedef   C 中利用scanf()函数输入字符串，在按下回车后'\n'字符是被存储在了缓存区的，如果下一次继续读入字符这个换行符可能会产生影响，也可能不会产生影响。总结如下：  不会产生影响的情况：第二次输入为“字符串”（或数字）；  scanf("%s",a); scanf("%s",b); printf("%s\n",a); printf("%s\n"，b);  如果输入为:  hello world  则输出也为：  hello world  scanf()函数更基于获取单词（get world）而不是获取字符串（get string）；scanf()是以第一个非空白字符开始读入的，故第一次读入字符所输入的'\n'，在第二个scanf()函数开始时被忽略掉了。（“%d”同理）   会产生影响的情况：第二次读入的是‘字符’：  scanf("%c",&a); scanf("%c",&b); printf("%c\n",a); printf("%c\n",b);  如果输入h，在按下回车后会直接输出：  h   则直接就会输出为h和两个空行：   h   因为读入的是字符，所以在第一个字符读完后的'\n', 在运行第二个scanf()时直接被读取了，所以第二个printf()函数输出为两个'\n'; 如果想消除'\n'的影响可以在中间加个getchar()函数；
user-0 提问: 深度遍历怎么算啊，右边写的这些对吗

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

user: user-2
content: 我看着没问题😊，我也在学数据结构呢！