Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 帮忙改进一下程序

回复:
user: user-1
content: 建议把代码贴出来，不建议用图片～

user: user-2
content: 加printf打印调试下，get_correct逻辑非常混乱，不知道while循环里再加一个while循环是什么用意

user: user-0
content: #include<stdio.h> void get_num(char le); float get_correct(void); char get_first(void); int main(void) { 	char ch; 	while (1) 	{ 		printf("Enter the operation of your choice:\n"); 		printf("a. add\t\t\ts. subtract\n"); 		printf("m.multiply\t\td.divide\n"); 		printf("q.quit\n"); 		ch = get_first(); 		while (ch != 'a' && ch != 's' && ch != 'm' && ch != 'd' && ch != 'q') 			continue; 		get_num(ch); 	} 	return 0; } void get_num(char le) { 	float n1, n2; 	printf("Enter first number:"); 	n1 = get_correct(); 	printf("Enter second number:"); 	n2 = get_correct(); 	if (le == 'a') 		printf("%f + %f = %f", n1, n2, n1 + n2); 	else if (le == 's') 		printf("%f - %f = %f", n1, n2, n1 - n2); 	else if (le == 'm') 		printf("%f * %f = %f", n1, n2, n1 * n2); 	else if (le == 'd') 	{ 		if (n2 == 0) 			printf("Enter a nulmber other than 0:"); 		scanf_s("%f",&n2); 		printf("%f / %f = %f", n1, n2, n1 / n2); 	} 	else if (le == 'q') 	{ 		printf("Bye!\n"); 	} } float get_correct(void) { 	char ch; 	float n; 	while (scanf_s("%f", &n) != 1); 	{ 		while ((ch = getchar()) != '\n'); 			putchar(ch); 		printf(" is not a number.\n"); 		printf("Please enter a number such as 2.5,-1.78E8,or 3:1"); 		scanf_s("%f", &n); 	} 	return n; } char get_first(void) { 	char ch; 	ch = getchar(); 	while (getchar() != '\n') 		continue; 	return ch; } 回复晚了，上课。不知道还有就救不,,,,
user-0 提问: C语言 将 结构体数组的成员地址 赋值给 指向结构体的指针 问题

回复:
user: user-0
content: 引用 3 楼 覆陇黄 的回复:头一次见指针指向结构体的成员，而不是结构体的，长知识了。 同时这个问题我看了评论还没想明白 看你楼下那个大神写的就明白了

user: user-0
content: 引用 4 楼 Hippop314 的回复:这里面有几个错误： 1、结构体数组赋值，应该是{元素1, 元素2, ...}，其中元素是一个结构体，因此，元素1赋值为{成员1, 成员2, ...}，所以正确的赋值方法为：struct student st[2] = {{110, "zhang"}, {2, "li"}};直接按照你写的来做，编译器会报警告，在某些情况下，元素二没有被正确赋值。 2、st[0].name的类型是字符串，因此，应该使用char *s; s = st[0].name; 3、st[0].num的类型是int，因此，应该使用 int p; p = st[0].num; 4、至于为什么st[0].name和st[0].num通过类型强制转换赋值给类型为struct student *的s, p。最后还能正确打印出它的值。这是因为，类型强制转换除了float, double的强制转换之外，都不会改变变量内的值。因此，st[0].name强制转换赋值给s，但是，s存放的依旧是name成员的地址。printf中%s只认指针指向的地址的内容，因此，s还是指向的是字符串，打印依旧正确。对于，st[0].num强制转换赋值给p，但是，p的值依旧是num，也就是说，p指向了地址为110的内存。而110是一个无效的地址，不能使用*p取它的内容。但是，printf中的%d只关心变量的值，不关心它的内容，因此，使用%d就会将p指向的地址打出来，就是110。看上去也是对的。  原来是看上去是对的，恍然大悟哈哈哈，这题我是在看谭浩强的教材的时候看到结构体指针那一块，书上强转了stu[0].name，同时我对如果强转对象如果不是字符数组产生了好奇，才写的这一串代码，主要是为了明白它这样的结果是为啥啦

user: user-1
content: 对于地址的打印，一般是用%p，p， s都是指针，并且是结构体指针，s = (struct student*)st[0].name; p = (struct student*)st[0].num; 这样的赋值在实际中基本上没什么意义（实际中不这么用），还不好理解。

user: user-2
content: 这里面有几个错误： 1、结构体数组赋值，应该是{元素1, 元素2, ...}，其中元素是一个结构体，因此，元素1赋值为{成员1, 成员2, ...}，所以正确的赋值方法为：struct student st[2] = {{110, "zhang"}, {2, "li"}};直接按照你写的来做，编译器会报警告，在某些情况下，元素二没有被正确赋值。 2、st[0].name的类型是字符串，因此，应该使用char *s; s = st[0].name; 3、st[0].num的类型是int，因此，应该使用 int p; p = st[0].num; 4、至于为什么st[0].name和st[0].num通过类型强制转换赋值给类型为struct student *的s, p。最后还能正确打印出它的值。这是因为，类型强制转换除了float, double的强制转换之外，都不会改变变量内的值。因此，st[0].name强制转换赋值给s，但是，s存放的依旧是name成员的地址。printf中%s只认指针指向的地址的内容，因此，s还是指向的是字符串，打印依旧正确。对于，st[0].num强制转换赋值给p，但是，p的值依旧是num，也就是说，p指向了地址为110的内存。而110是一个无效的地址，不能使用*p取它的内容。但是，printf中的%d只关心变量的值，不关心它的内容，因此，使用%d就会将p指向的地址打出来，就是110。看上去也是对的。

user: user-3
content: 关键不在于是不是数组或者值，而是因为强制转换了，所以可以直接复赋值，*p是指向结构体的指针，因此以%d打印*p是没有内容的，肯定是打印p的

user: user-4
content: 头一次见指针指向结构体的成员，而不是结构体的，长知识了。 同时这个问题我看了评论还没想明白

user: user-0
content: 引用 1 楼 kuangbao9 的回复:关键不在于是不是数组或者值，而是因为强制转换了，所以可以直接复赋值，*p是指向结构体的指针，因此以%d打印*p是没有内容的，肯定是打印p的 也就是说这里的p就是直接被赋予了强转后的变量值，而不是指向某个地址吗
user-0 提问: 求助，c语言的指针是不是可以这样理解，求助啊啊啊

回复:
user: user-1
content: 完全正确，+10分

user: user-2
content: 恩，理解是没问题的。*p = 3就是对p指向的内存单元做引用，又由于p指向i，所以*p = 3;等同于i = 3;

user: user-3
content: 理解得没错哈

user: user-4
content: 可以这么说。但是需要注意用字符指针初始化一个字符串常量的时候，不可以改变其中元素。

user: user-5
content: 来啦来啦，我觉得行

user: user-0
content: 来人啊！！！！
user-0 提问: 这是啥意思？为啥我gcc编译不出来，还有这是握在网上弄得win系统一键装，可是我感觉这win10系统怪怪的，请各位大神帮我鉴定一下

回复:
user: user-0
content: 引用 1 楼 durant 的回复：先去安装gcc啊为啥我这win10没有1920*1080的分辨率，难道这个是盗版吗？

user: user-1
content: 先去安装gcc啊

user: user-0
content: 引用 3 楼 赵4老师 的回复：Visual C++ 2010 Express简体中文版http://pan.baidu.com/s/1bnwRVLt请问您有win7或win10系统的网盘吗？我这在第三方软件里面下载了个盗版的，分辨率之类的各项功能都不好用后悔死了，以前的win7没有备份直接就被删除了

user: user-2
content: Visual C++ 2010 Express简体中文版http://pan.baidu.com/s/1bnwRVLt
user-0 提问: C语音

回复:
user: user-1
content: 自己不熟悉的、感兴趣的用法都写一写，可以边写边参考书里或者函数手册。

user: user-2
content: 从刷题开始。@*/@

user: user-0
content: 引用 1 楼 轻箬笠的回复:1.每天都要写代码。 2.每天来论坛回答问题，不会的可以百度，加深记忆 嗯嗯  谢谢指点  我现在每天都在写

user: user-3
content: 1.每天都要写代码。 2.每天来论坛回答问题，不会的可以百度，加深记忆
user-0 提问: 二维数组与双重指针的关系、区别

回复:
user: user-0
content: 引用 1 楼 user-3的回复:有很多地方存在认识偏差 还是不要到处贴比较好 本人小白一个，正在学习中  偏差请指正一下，谢谢

user: user-0
content: 你好，我不太懂这方面知识  在博客看到了这个，觉得好像又解释的通，就想找个地方标记一下 能说说这个博客哪些方面有偏差吗？  https://blog.csdn.net/u013684730/article/details/46565577?utm_source=app

user: user-1
content: http://edu.csdn.net/course/detail/2516 C语言指针与汇编内存地址-三.数组和二维数组

user: user-2
content: 你的问题是什么？

user: user-3
content: 有很多地方存在认识偏差 还是不要到处贴比较好
user-0 提问: C语言  C控制语句:循环

回复:
user: user-1
content: 你想说啥？

user: user-2
content: 如果要做笔记，建议用印象笔记或有道笔记～

user: user-0
content: 引用 1 楼 英雄@末路的回复:你想说啥？ 这仅仅是笔记而已😊😊

user: user-3
content: “多一少一”问题占程序员常犯错误的10%以上！ 避免“多一少一”问题的方法之一是将比如<10甚至<5的数代入程序片断，掰手指头心算验证一下程序到底应该写为 x、x-1、x+1中的哪个？ <、<=、==、>、>=中的哪个？  for (A;B;C) D; //等价于 {  A;  while (1) {   if (!(B)) break;   D;   C;  } }
user-0 提问: 为什么我写的两个源文件，调试出来的却是一个源文件

回复:
user: user-0
content: 引用 2 楼 user-3 的回复：程序只能有main一个入口，如果需要调用其他源文件，则需调用其中的函数，但是此时需要增加函数声明和相应头文件怎么弄呢？

user: user-1
content: 文件是文件，函数是函数 你的目的是啥啊，写两个，你可以只编译一个文件啊

user: user-0
content: 引用 6 楼 轻箬笠 的回复：引用 5 楼 weixin_45584476 的回复:[quote=引用 1 楼 轻箬笠 的回复：]程序入库是main，没有main01。一般程序的入库名称是固定的可是如果都用main的话另一个就会调试失败，我该怎么处理啊 创建两个控制台项目。[/quote]是重新创建吗？可是为啥我在网上看视频的时候看见别人直接就在源文件上面就直接创建了，我一直不明白

user: user-2
content: 引用 5 楼 weixin_45584476 的回复:引用 1 楼 轻箬笠 的回复：程序入库是main，没有main01。一般程序的入库名称是固定的可是如果都用main的话另一个就会调试失败，我该怎么处理啊 创建两个控制台项目。

user: user-0
content: 引用 1 楼 轻箬笠 的回复：程序入库是main，没有main01。一般程序的入库名称是固定的可是如果都用main的话另一个就会调试失败，我该怎么处理啊

user: user-0
content: 引用 3 楼 weixin_45584476 的回复：引用 1 楼 轻箬笠 的回复：程序入库是main，没有main01。一般程序的入库名称是固定的如果两个源文件都是main的话调试会失败啊请问我应该怎么处理啊

user: user-0
content: 引用 1 楼 轻箬笠 的回复：程序入库是main，没有main01。一般程序的入库名称是固定的如果两个源文件都是main的话调试会失败啊

user: user-3
content: 程序只能有main一个入口，如果需要调用其他源文件，则需调用其中的函数，但是此时需要增加函数声明和相应头文件

user: user-2
content: 程序入库是main，没有main01。一般程序的入库名称是固定的
user-0 提问: 我是国科大本科材料专业 如果想从事半导体、电子方面的材料研究是否有必要去学习C语言 是否有用

回复:
user: user-1
content: 有用 写个算法啥的 仿真里面写个测试程序啥的，都可以用C来实现。

user: user-2
content: 曾经的研究生院，现在也有本科了，好像退步了哟~~~
user-0 提问: 程序小白关于Visual studio2019中c语言++和--运算符的疑问

回复:
user: user-1
content: 对头，我编译器运算结果为  1  1   1 ，并且可以理解为啥是这个结果

user: user-2
content: 传参顺序跟编译器有关系，因此这样的代码不建议写，能避免就尽可能的避免写这样的代码

user: user-3
content: 引用 5 楼 liups的回复:[quote=引用 1 楼 Italink 的回复:] 因为函数传参的顺序是从右往左的 标准中没有规定求值的顺序，只能说楼主这里是这样的顺序。所以，楼主应该避免这样的写法[/quote] 好的ヾ ^_^♪。。

user: user-3
content: 引用 3 楼 user-6的回复:引用 1 楼 Italink 的回复:因为函数传参的顺序是从右往左的错 记住了。。。。。。

user: user-4
content: 还有如下程序，其运行结果可能更让初学者不得要领。个人非常认同裘教授观点，C/C++教学者、从业者不要去钻这种牛角尖，没有意义。除非有某种非常非常特殊的目的，否则类似这种代码在实际开发中绝对应该禁止。 #include <stdio.h>  void Fun(int i, int j, int k) {     printf("%d %d %d\n", i, j, k); }  int main() {     int a = 1;     Fun(a += 1, a += 1, a += 1);      return 0; }

user: user-0
content: 谢谢大佬指点，以后应该避免这样写程序

user: user-5
content: 引用 1 楼 Italink 的回复:因为函数传参的顺序是从右往左的 标准中没有规定求值的顺序，只能说楼主这里是这样的顺序。所以，楼主应该避免这样的写法

user: user-6
content: 代码错 结果没意义 这是未定义行为

user: user-6
content: 引用 1 楼 Italink 的回复:因为函数传参的顺序是从右往左的错

user: user-4
content: printf后面的逗号不是逗号运算符。类似这种问题的研究没有多少意义，最好不要这么写程序。 建议看看这个https://bbs.csdn.net/topics/370153775。

user: user-3
content: 因为函数传参的顺序是从右往左的
user-0 提问: C语言

回复:
user: user-1
content: 精度问题，你可以继续往后面看

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

user: user-3
content: printf %f 本身自带舍入  你想看不准确值 %.40f 就看到了

user: user-4
content: IEEE 754浮点数标准详解
user-0 提问: 求助，急！！！

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

user: user-2
content: 路径不要有中文名  把那个永恒名字改了先
user-0 提问: 关于c中eof用法，多组输入输出的     程序运行顺序问题  求大佬解答

回复:
user: user-1
content: 好吧，我来接分，可以结帖了，哈哈哈

user: user-0
content: 好吧其实我看错了  acm题目不分样例一样例二  我才以为是先输完全部数据再输出全部答案
user-0 提问: 怎么判断窗口是不是最底层窗口，最顶端窗口可以用GetTopWindow实现，那最底端呢

回复:
user: user-1
content: GetNextWindow The GetNextWindow function retrieves a handle to the next or previous window in the Z order. The next window is below the specified window; the previous window is above. If the specified window is a topmost window, the function retrieves a handle to the next (or previous) topmost window. If the specified window is a top-level window, the function retrieves a handle to the next (or previous) top-level window. If the specified window is a child window, the function searches for a handle to the next (or previous) child window.   HWND GetNextWindow(   HWND hWnd,  // handle to current window   UINT wCmd   // direction flag );   Parameters hWnd  Handle to a window. The window handle retrieved is relative to this window, based on the value of the wCmd parameter.  wCmd  Specifies whether the function returns a handle to the next window or of the previous window. This parameter can be either of the following values: Value Meaning  GW_HWNDNEXT Returns a handle to the window below the given window.  GW_HWNDPREV Returns a handle to the window above the given window.    Return Values If the function succeeds, the return value is a handle to the next (or previous) window. If there is no next (or previous) window, the return value is NULL. To get extended error information, callGetLastError.   Remarks Using this function is the same as calling the GetWindow function with the GW_HWNDNEXT or GW_HWNDPREV flag set.   QuickInfo   Windows NT: Requires version 3.1 or later.   Windows: Requires Windows 95 or later.   Windows CE: Unsupported.   Header: Declared in winuser.h.   Import Library: Use user32.lib.  See Also Windows Overview, Window Functions, GetTopWindow     Window Functions The following functions are used to create and manage windows.        AdjustWindowRect   AdjustWindowRectEx   AnimateWindow   ArrangeIconicWindows   BeginDeferWindowPos   BringWindowToTop   CascadeWindows   ChildWindowFromPoint   ChildWindowFromPointEx   CloseWindow   CreateWindow   CreateWindowEx   DeferWindowPos   DestroyWindow   EnableWindow   EndDeferWindowPos   EnumChildProc   EnumChildWindows   EnumThreadWindows   EnumThreadWndProc   EnumWindows   EnumWindowsProc   FindWindow   FindWindowEx   GetClientRect   GetDesktopWindow   GetForegroundWindow   GetLastActivePopup   GetNextWindow   GetParent   GetTopWindow   GetWindow   GetWindowPlacement   GetWindowRect   GetWindowText   GetWindowTextLength   GetWindowThreadProcessId   IsChild   IsIconic   IsWindow   IsWindowUnicode   IsWindowVisible   IsZoomed   MoveWindow   OpenIcon   SetForegroundWindow   SetParent   SetWindowLong   SetWindowPlacement   SetWindowPos   SetWindowText   ShowOwnedPopups   ShowWindow   ShowWindowAsync   TileWindows   WindowFromPoint   WinMain
user-0 提问: 在c语言中，怎么在数组的特定位置插入字符

回复:
user: user-1
content: 贴出你的代码吧，看看逻辑有什么麻烦的。

user: user-2
content: 引用 2 楼 weixin_43925997 的回复:如果做循环的话，给一个\n后，会覆盖掉下一个字符，做自增的话，要是这么简单我就不来发帖了 怕覆盖，得从后面开始处理，你得先计算好。大致是：最后一个应该是\n吧，它的位置是多少，然后是原最后一个字符的新位置，把它复制过去，接下来是倒数第二个或者\n

user: user-3
content: 最简单的是再分配个数组，长度是原来数组长多的 6/5取对其，然后循环拷贝，每拷5个赋值一个\n ，当然空间，时间都没啥效率可言。  或者realloc原来的缓冲区，算好长度，从后往前拷，算长度的时候记得最后几个不是5的倍数的处理，空间省点，时间没啥差别。

user: user-0
content: 如果做循环的话，给一个\n后，会覆盖掉下一个字符，做自增的话，要是这么简单我就不来发帖了

user: user-4
content: 麻烦在哪里？创建个临时数组呗，每拷贝5个字符加个\n，最后再把临时数组拷贝回去
user-0 提问: 求大佬

回复:
user: user-1
content: Visual C++ 2010 Express简体中文版http://pan.baidu.com/s/1bnwRVLt

user: user-2
content: 如果对嵌入式感兴趣，建议了解一下Linux系统和该系统下的编辑和编译系统。

user: user-3
content: 你指的是IDE工具吗？VS呗~

user: user-4
content: Code::Blocks  比vs要小，但是用来学习还是够的

user: user-5
content: notepad++  sublime  编译器用 mingw(windows)
user-0 提问: 求大佬帮看一下我写的代码，怎么把一个函数传到另一个函数里啊？

回复:
user: user-1
content: typedef double (* _f1)(int n,double a[],double x); void F(void *函数指针,int n double a[],double x) {  (_f1*)函数指针(n,a,x);  } 把函数做为指针传入另一个函数,在内部再用(f1*)转换为f1类型的指针。这个你看怎么定义，void * 是为了适应不同的函数做为参数，你如果只传一种函数可以直接定义为f1* 函数指针。

user: user-0
content: 引用 1 楼 user-1 的回复:void f(void * f,int n,double a[],double x) {   (f1*)f(n,a,x);  }能不能详细说一下呀，看不太懂QAQ

user: user-1
content: void f(void * f,int n,double a[],double x) {   (f1*)f(n,a,x);  }
user-0 提问: 请教如何使用c语言实现图形化界面输出

回复:
user: user-1
content: 个人觉得SDK纯API方式编写Windows程序已经不推荐了，效率太低，了解一下原理就可以了，主要是消息机制。  图形用户界面（GUI）编程可以学习C++ Builder，架构先进（和C#一样拖控件），入门比较容易。  　　C++ Builder是真正的可视化的开发工具。C++ Builder可以用鼠标拖拉控件加上设置属性轻松的“设计”出一个程序的图形用户界面，利用可视的组件/控件像“搭积木”一样，以“所见即所得”的方式搭建应用程序的界面，这也是C++ Builder这个名字中Builder的概念。这样，只需要用C++语言编写业务逻辑代码，类似于DOS下文本界面编程，只要专注于实现业务逻辑功能就可以了，代码非常简洁。数据的输入和表现，都在图形用户界面，非常直观、易用。这就是RAD开发（Rapid Application Development，快速应用程序开发）。  书籍推荐： 《C++Builder 6程序设计教程（第二版）》 （陆卫忠，刘文亮　等编著 /2011-04-01 /科学出版社）（当当网） 《C++Builder 6编程实例精解》（赵明现），PDF，是数字版的，非扫描版的，里面还有一个俄罗斯方块游戏的完整实现。 《精彩C++Builder 6程序设计》（台湾 吴逸贤），里面有10几个简单小游戏的实现，可以自己看懂以后再重写，才是自己掌握的。 《C++ Builder 5高级编程实例精解》（刘滨 编著）都是较大的实用的程序。  C++ Builder书籍下载： https://pan.baidu.com/s/13n9hxwVj9ai1p5L2rQC83Q

user: user-1
content: 个人觉得SDK纯API方式编写Windows程序已经不推荐了，效率太低，了解一下原理就可以了，主要是消息机制。  图形用户界面（GUI）编程可以学习C++ Builder，架构先进（和C#一样拖控件），入门比较容易。  　　C++ Builder是真正的可视化的开发工具。C++ Builder可以用鼠标拖拉控件加上设置属性轻松的“设计”出一个程序的图形用户界面，利用可视的组件/控件像“搭积木”一样，以“所见即所得”的方式搭建应用程序的界面，这也是C++ Builder这个名字中Builder的概念。这样，只需要用C++语言编写业务逻辑代码，类似于DOS下文本界面编程，只要专注于实现业务逻辑功能就可以了，代码非常简洁。数据的输入和表现，都在图形用户界面，非常直观、易用。这就是RAD开发（Rapid Application Development，快速应用程序开发）。  书籍推荐： 《C++Builder 6程序设计教程（第二版）》 （陆卫忠，刘文亮　等编著 /2011-04-01 /科学出版社）（当当网） 《C++Builder 6编程实例精解》（赵明现），PDF，是数字版的，非扫描版的，里面还有一个俄罗斯方块游戏的完整实现。 《精彩C++Builder 6程序设计》（台湾 吴逸贤），里面有10几个简单小游戏的实现，可以自己看懂以后再重写，才是自己掌握的。 《C++ Builder 5高级编程实例精解》（刘滨 编著）都是较大的实用的程序。  C++ Builder书籍下载： https://pan.baidu.com/s/13n9hxwVj9ai1p5L2rQC83Q

user: user-2
content: c语言的话，查一下win32的api，或者学一下GTK+？ 会C++的话也可以用QT或者MFC

user: user-3
content: qt   mfc
user-0 提问: 求大佬

回复:
user: user-1
content: Visual C++ 2010 Express简体中文版http://pan.baidu.com/s/1bnwRVLt

user: user-2
content: 用VSCode 吧 codeblock也可以 但是可能有些老了

user: user-3
content: 貌似用VC6.0就可以了
user-0 提问: 求助

回复:
user: user-1
content: #include<stdio.h> #include<stdlib.h> extern int action1(char *s); extern int action2(char *s); /* 	输入字符串对比 输出相同字符的个数  	程序有很多问题 	1、字符数组作为函数的参数问题 	2、return关键字的使用问题 	3、函数的返回值类型问题 	4、粗心问题switch 2 函数不存在 */ int main() { 	char a1[6] = { "hello" }; 	char a2[6] = { "world" }; 	int number; 	int samecount; 	printf("请输入1或2\n"); 	scanf("%d", &number); 	switch (number) 	{ 		case 1: 			samecount = action1(a1); 			break; 		case 2: 			samecount = action2(a2); 			break; 	} 	printf("%d\n",samecount); 	system("pause"); 	return 0; } int action1(char *s) { 	char b1[6]; 	int samecount = 0; 	printf("%s\n", s); 	scanf("%s", b1); 	for (int i = 0; i < 6; i++) 	{ 		if (b1[i] == s[i]) 		{ 			samecount++; 		} 	} 	return samecount; } int action2(char *s) { 	char b2[6]; 	int samecount = 0; 	printf("%s\n", s); 	scanf("%s", b2); 	for (int i = 0; i < 6; i++) 	{ 		if (b2[i] == s[i]) 		{ 			samecount++; 		} 	} 	return samecount; }

user: user-0
content: 太感谢了 ，我一定会改正

user: user-0
content: 太感谢了 ，我一定会改正

user: user-2
content: 报错啥，发出来看看
user-0 提问: libwebsocket单进程创建多客户端怎么实现

回复:
user: user-0
content: 查找资料发现https://github.com/cocos2d/cocos2d-x.git中的websocket模块使用了libwebsocket，需要借鉴其源码修改

user: user-1
content: 没用过。不过感觉libcurl会不会更好用点。

user: user-0
content: 目前的问题是，lws_protocol_vh_priv_zalloc是给per_vhost_data__minimal分配内存的，per_vhost_data__minimal中存放的读写需要的锁和ring，但是看api文档需要在INIT回调中调用的，这个执行一次， 那如果想创建多个client，per_vhost_data__minimal该放在哪里初始化呢？
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-0
content: 引用 1 楼 轻箬笠的回复:直接发众包平台吧。 具体怎么操作，可以帮我介绍一下吗？

user: user-2
content: 提供个思路：  1、如果数据要持久化的可以采用mysql数据库（你要用文件存也可以） 2、设计数据结构（都是对数据的操作）商家，买家，管理员 ，订单等 考虑好需要哪些字段 如：订单肯定有订单编号吧。 3、数据访问层（这部分功能主要是对数据的基本访问，如增 删 改 查） 4、业务层 （如注册 登录 下单等） 5、表现层 （数据的展示）

user: user-3
content: 直接发众包平台吧。
user-0 提问: 在做电影院选座系统时，怎么实现选择的座位与已被选则

回复:
user: user-1
content: 可以考虑做标记～已经选择的做上标记，已经做上标记的就不能选择了～

user: user-2
content: 用正则表达式匹配

user: user-3
content: 这个标题加后面的主题才看明白问题。。。。 同一行的话，最土的方法就是轮询呗，座位序号+2，-2（不考虑列）范围内有被选中的就放弃，下一个点继续（可以优化下找下个点的方法）。  再加上边界和列的处理，有点繁琐但不困难。

user: user-1
content: 定义一个位图，加标记，0/1,0表示未选择，1表示选择。内存好像就是这样判断使用和未使用的。

user: user-4
content: 申请个二维数组，每个元素和座位一一对应，对于不存在的座位，标记负数，对于没选的座位，标记0，对于选择的座位，标记1，显示座位的选择情况的时候，就遍历这个数组，根据数组元素的情况，将相应的图标显示在对应的座位上
user-0 提问: 初学DirectX12，怎么能够使用颜色的Alpha通道呢

回复:
user: user-0
content: 求解~~~~~~~~

user: user-0
content: 这边我看了书上后面的，说是要启用混合技术什么的，然后这是我改了的代码，也不知道对不对，反正还是没用   void BoxApp::BuildPSO() {     D3D12_GRAPHICS_PIPELINE_STATE_DESC psoDesc;     ZeroMemory(&psoDesc, sizeof(D3D12_GRAPHICS_PIPELINE_STATE_DESC));     psoDesc.InputLayout = { mInputLayout.data(), (UINT)mInputLayout.size() };     psoDesc.pRootSignature = mRootSignature.Get();     psoDesc.VS =  	{  		reinterpret_cast<BYTE*>(mvsByteCode->GetBufferPointer()),  		mvsByteCode->GetBufferSize()  	};     psoDesc.PS =  	{  		reinterpret_cast<BYTE*>(mpsByteCode->GetBufferPointer()),  		mpsByteCode->GetBufferSize()  	};     psoDesc.RasterizerState = CD3DX12_RASTERIZER_DESC(D3D12_DEFAULT);     psoDesc.BlendState = CD3DX12_BLEND_DESC(D3D12_DEFAULT);     psoDesc.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC(D3D12_DEFAULT);     psoDesc.SampleMask = UINT_MAX;     psoDesc.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE;     psoDesc.NumRenderTargets = 1;     psoDesc.RTVFormats[0] = mBackBufferFormat;     psoDesc.SampleDesc.Count = m4xMsaaState ? 4 : 1;     psoDesc.SampleDesc.Quality = m4xMsaaState ? (m4xMsaaQuality - 1) : 0;     psoDesc.DSVFormat = mDepthStencilFormat; //这后面这一段是跟着书后面看到的加的，也不知道对不对 	D3D12_RENDER_TARGET_BLEND_DESC transparentcyBlendDesc; 	transparentcyBlendDesc.BlendEnable = true; 	transparentcyBlendDesc.LogicOpEnable = false; 	transparentcyBlendDesc.SrcBlend = D3D12_BLEND_SRC_ALPHA; 	transparentcyBlendDesc.DestBlend = D3D12_BLEND_INV_SRC_ALPHA; 	transparentcyBlendDesc.BlendOp = D3D12_BLEND_OP_ADD; 	transparentcyBlendDesc.SrcBlendAlpha = D3D12_BLEND_ONE; 	transparentcyBlendDesc.DestBlendAlpha = D3D12_BLEND_ZERO; 	transparentcyBlendDesc.BlendOpAlpha = D3D12_BLEND_OP_ADD; 	transparentcyBlendDesc.LogicOp = D3D12_LOGIC_OP_NOOP; 	transparentcyBlendDesc.RenderTargetWriteMask = D3D12_COLOR_WRITE_ENABLE_ALL;  	psoDesc.BlendState.RenderTarget[0] = transparentcyBlendDesc; //      ThrowIfFailed(md3dDevice->CreateGraphicsPipelineState(&psoDesc, IID_PPV_ARGS(&mPSO)));   还是说，也不是用这个开启混合的，那应该怎么做呢
user-0 提问: 求大佬帮帮我

回复:
user: user-0
content: 引用 2 楼 Michael_Hzs的回复:我更好奇 你这手机版的编译器哪里来的  可以分享一下吗 大佬 网上搜x语言编译器就有了

user: user-1
content: 我更好奇 你这手机版的编译器哪里来的  可以分享一下吗 大佬

user: user-2
content: 我很好奇，你这个hello world是怎么运行出下面这个结果的？
user-0 提问: 大神们帮帮小白吧！

回复:
user: user-0
content: 引用 6 楼 自信男孩的回复:[quote=引用 5 楼 Michael_Hzs 的回复:] 可是我用一个for循环的话他会连续打印验证分数啊，怎么样才能让一个循环的输出和三个循环的输出一样呢？求解。刚想了半天了也没相处所以然来。 就不能用嵌套循环，楼上已经给出了代码，可以试一下。[/quote] 懂了，谢谢。感谢你的回答

user: user-1
content: 引用 5 楼 Michael_Hzs 的回复:可是我用一个for循环的话他会连续打印验证分数啊，怎么样才能让一个循环的输出和三个循环的输出一样呢？求解。刚想了半天了也没相处所以然来。 就不能用嵌套循环，楼上已经给出了代码，可以试一下。

user: user-0
content: 可是我用一个for循环的话他会连续打印验证分数啊，怎么样才能让一个循环的输出和三个循环的输出一样呢？求解。刚想了半天了也没相处所以然来。

user: user-1
content: 引用 3 楼 Michael_Hzs 的回复:您的意思就是这个不用三层循环，而只用一个循环就可以了是吗？一个循环或者三个循环都可以实现，没有差别的是吧？三个单独的循环是没问题的，但是你要是用嵌套循环那就是有问题了

user: user-0
content: 您的意思就是这个不用三层循环，而只用一个循环就可以了是吗？一个循环或者三个循环都可以实现，没有差别的是吧？

user: user-1
content: #include <stdio.h>  #define SIZE 10 #define PAR 72  int main(void) {     int index, scores[SIZE];     int sum = 0;     float vaerage;      printf("输入%d个分数：\n ",SIZE); #if 0     for ( index = 0; index < SIZE; index++)     {         scanf_s("%d", &scores[index]);//获取分数         for ( index = 0; index < SIZE; index++)         {             printf("%5d", scores[index]);//验证分数             printf("\n");             for ( index = 0; index < SIZE; index++)             {                 sum += scores[index];//求总分             }         }      } #else     for (index = 0; index < SIZE; index++) {         scanf_s("%d", &scores[index]);//获取分数         printf("%5d", scores[index]);//验证分数         sum += scores[index];//求总分     } #endif     vaerage = (float) sum / SIZE;//平均分     printf("总分是：%d，平均分是：%.2f.", sum, vaerage);     printf("与平均分相差：%.0f", (double)vaerage - PAR);      return 0; }  供参考～  用一层循环就可以了，若用三层循环，注意这是三层循环，不是三个循环（独立的）。 第一层循环会执行SIZE次，第二个循环输出会执行SIZE * SIZE次，  第三个循环sum会计算SIZE *SIZE * SIZE次，并且会有很多随机值。

user: user-2
content: 上面的代码for循环语句缩进不是很清楚吗？  。。。。。。。。。。。。 for ( index = 0; index < SIZE; index++) { scanf_s("%d", &scores[index]);//获取分数  }  for ( index = 0; index < SIZE; index++) { printf("%5d", scores[index]);//验证分数  }  printf("\n"); for ( index = 0; index < SIZE; index++) { sum += scores[index];//求总分 } 。。。。。。。。。。。。
user-0 提问: c语言疑惑

回复:
user: user-1
content: 就是统计所输入的数据中0——9的个数，下标和输入的数据对应，然后对应的元素自增1.就统计出来 了。

user: user-2
content: 用数组实现的，数组长度为10 (0-9),数组的下标表示你输入的数字，数组的值表示这个数字输入的次数。 比如你输入的是3，那么arr[3]++ 就表示3这个数字输入的次数加1.
user-0 提问: both pointer to int *

回复:
user: user-1
content: 指针没有隐氏类型转换之说，一个double类型的指针接收int类型的指针，类型不匹配。 注意一个double类型的指针变量，*pd引用的内存是8字节的，*pl引用的内存是4字节的。

user: user-2
content: 二维数组和int **p, 其直接指向的数据不是int，而是指向int的指针。 举个例子，不管初始化啥的啦 int **p; // 二维指针  *p // 指针，对应的是指向整形的指针  **p // 整数  赋值可以是 **p = 1,   如果是 *p = 1, 至少会有个warning,而且结果应该不是你想要的，可以是   int a;  *p = &a;    查不到这个意思吧

user: user-3
content: int* 指向int类型的指针~

user: user-0
content: 引用 6 楼 user-4 的回复：[quote=引用 5 楼 马振宇 的回复:] [quote=引用 4 楼 user-4 的回复：]int *pt; //一个指向int型变量的指针（内存里面放的是指向某个整型变量的地址）。 int **p2; //一个指向指针的指针，所以p2的值是个地址，该地址存放一个指向int型变量的指针。 *p2 = &pt;// 这里对pt使用取地址符，实际上就是取得pt这个指针所存放的内存的地址，即一个指向指针的指针。所以说两者“ 都是指向int* ”也就是说对指针取址得到的是一个指针？[/quote]  是的[/quote]谢谢

user: user-4
content: 引用 5 楼 马振宇 的回复:[quote=引用 4 楼 user-4 的回复：]int *pt; //一个指向int型变量的指针（内存里面放的是指向某个整型变量的地址）。 int **p2; //一个指向指针的指针，所以p2的值是个地址，该地址存放一个指向int型变量的指针。 *p2 = &pt;// 这里对pt使用取地址符，实际上就是取得pt这个指针所存放的内存的地址，即一个指向指针的指针。所以说两者“ 都是指向int* ”也就是说对指针取址得到的是一个指针？[/quote]  是的

user: user-0
content: 引用 4 楼 user-4 的回复：int *pt; //一个指向int型变量的指针（内存里面放的是指向某个整型变量的地址）。 int **p2; //一个指向指针的指针，所以p2的值是个地址，该地址存放一个指向int型变量的指针。 *p2 = &pt;// 这里对pt使用取地址符，实际上就是取得pt这个指针所存放的内存的地址，即一个指向指针的指针。所以说两者“ 都是指向int* ”也就是说对指针取址得到的是一个指针？

user: user-4
content: int *pt; //一个指向int型变量的指针（内存里面放的是指向某个整型变量的地址）。 int **p2; //一个指向指针的指针，所以p2的值是个地址，该地址存放一个指向int型变量的指针。 *p2 = &pt;// 这里对pt使用取地址符，实际上就是取得pt这个指针所存放的内存的地址，即一个指向指针的指针。所以说两者“ 都是指向int* ”
user-0 提问: C语言数据抽取

回复:
user: user-1
content: 如果用C语言，就是要字符串解析了，比如strlen, strcmp, strtok/strtok_r等等

user: user-2
content: fgets 函数读取行 字符串查找X-From，X-To（strstr），  找到的就提取后面的字符串  找不到读下一行

user: user-3
content: 可以学一下正则表达式
user-0 提问: 结构体错误，求大佬解答

回复:
user: user-1
content: 不会有中文的分号吧，哈哈

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

user: user-3
content: 引用 4 楼 lwc1205 的回复:懂了感谢，我已经知道错在哪了 错在哪里了?

user: user-0
content: 懂了感谢，我已经知道错在哪了

user: user-4
content: 注释掉那个出错的代码，直到不出错为止，然后一步步解除注释，直到出错为止。看看具体哪个代码出错。

user: user-0
content: 引用 1 楼 自信男孩的回复:只有这三个成员有问题吗？ 是的，后面引用这三个的地方就都有问题

user: user-3
content: 只有这三个成员有问题吗？
user-0 提问: vs的scanf_s函数的用法问题求助

回复:
user: user-1
content: 引用 5 楼 爱吃鱼的橙子 的回复:scanf_s()参数与scanf()不同； 例如scanf(“%s”,&name,n)，整形n为name类型的大小，如果name是数组，那n就是该数组的大小。 不好意思，这里写错了， scanf_s(“%s”,&name,n)，整型n为name类型的大小，如果name是数组，那n就是该数组的大小。 scanf(“%s”,&name)。

user: user-0
content: 可以的，爱你们。 知道scanf_s需要第三个参数但以前不加也没出现问题.....

user: user-1
content: scanf_s()参数与scanf()不同； 例如scanf(“%s”,&name,n)，整形n为name类型的大小，如果name是数组，那n就是该数组的大小。

user: user-2
content: 引用 2 楼 老犯錯誤 的回复:大哥，图上的写法有错误吗？用的是vs呀 是我scanf函数的打开方式不对吗？  scanf_s("%s", name, 40);  试试这样～scanf_s缺少一个参数，即字符串的长度

user: user-3
content: scanf_s输入字符串需要设置字符串的长度，如果不太会的话，还是用scanf，提示不安全需要关闭SDL检查（百度）

user: user-0
content: 大哥，图上的写法有错误吗？用的是vs呀 是我scanf函数的打开方式不对吗？

user: user-4
content: #include <stdio.h> int main(void) {     int a,b,c;     printf("Give me the value of a,b,c seperated with whitespaces:\n");     scanf("%d%d%d",&a,&b,&c);     printf("a=%d,b=%d,c=%d\n",a,b,c);     return 0; }
user-0 提问: 一个简单c语言指针的传值问题

回复:
user: user-1
content: 我也明白了一点

user: user-1
content: 引用 1 楼 六道佩恩 的回复：f里的变量i是局部变量，f函数结束后即释放，建议加static再测试正确

user: user-2
content: 引用 4 楼 flamesP 的回复:感谢老铁的解答，确实是这个原因。 另外还有个问题 我想请教下，就是要想知道像你说的栈地址以及printf函数压栈这些是不是得在数据结构中学习。  堆栈相关的操作和系统有关，不是数据结构里面学的。

user: user-3
content: 引用 4 楼 flamesP 的回复:感谢老铁的解答，确实是这个原因。 另外还有个问题 我想请教下，就是要想知道像你说的栈地址以及printf函数压栈这些是不是得在数据结构中学习。 恩，会学到，栈/堆是都是内存，只是运用的不一样

user: user-0
content: 感谢老铁的解答，确实是这个原因。 另外还有个问题 我想请教下，就是要想知道像你说的栈地址以及printf函数压栈这些是不是得在数据结构中学习。

user: user-2
content: 在这句： *i=*p; printf("%d\n",*i); 之后，你再打印下*p，看是不是变了 *p 再你的f()里面返回的是个栈地址，里面的数据是随时可能被覆盖的，出现什么结果都有可能。 printf函数的压栈动作很大机会把原来的内容覆盖掉，你第一次打印前赋值，看两个地址的打印是不是就一样了。

user: user-0
content: 但是这不影响主函数中的指针i

user: user-4
content: f里的变量i是局部变量，f函数结束后即释放，建议加static再测试
user-0 提问: C语言字符串数组长度统计的问题

回复:
user: user-0
content: 引用 9 楼 爱吃鱼的橙子 的回复:可以规定输入的char[]不能连续两个为0，否则认为后续全为0，然后添加判断条件，非0和0的下一个非0，统计+1，这样的。 感觉何必这么为难自己，哈哈我也不想难为自己。。。但是对称加密里面，前置IV是可以设置为 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x02, 0x30, 0x40, 0x50, 0x00, 0x00 }的。。。

user: user-0
content: 引用 10 楼 自信男孩 的回复:[quote=引用 2 楼 rk4k94 的回复:] [quote=引用 1 楼 自信男孩 的回复:] 这个可以自己试一下，如果按照字符串的接口strlen，那么这个长度应该是2。0x00就是0，'\0'就是0。 如果用sizeof，那么长度应该是10.是的，我之前都试了，但是我想打印出来的是5，所以咋整。。。求教了。。。。[/quote] 把你的代码贴出来吧，不知道你怎么实现的输出是5[/quote]我是想让他输出5，但实际上确实是strlen是2，sizeof是10。。所以才想求教有没有好方法。。问题背景是我要做一个C/C++的对称加密程序，由于可以让用户自行设置前置IV和秘钥引起的，比如我的一个前置IV就可以设置为 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x66, 0x67, 0x68, 0x00, 0x00 }，长度虽然是固定16，但需要监测里面是否真的存放了16个字节。。。

user: user-1
content: 没有现成的方法，只能自己按某种规律遍历计算或者统计

user: user-2
content: 表示看不懂！看回复学习学习

user: user-3
content: 引用 2 楼 rk4k94 的回复:[quote=引用 1 楼 自信男孩 的回复:] 这个可以自己试一下，如果按照字符串的接口strlen，那么这个长度应该是2。0x00就是0，'\0'就是0。 如果用sizeof，那么长度应该是10.是的，我之前都试了，但是我想打印出来的是5，所以咋整。。。求教了。。。。[/quote] 把你的代码贴出来吧，不知道你怎么实现的输出是5

user: user-4
content: 可以规定输入的char[]不能连续两个为0，否则认为后续全为0，然后添加判断条件，非0和0的下一个非0，统计+1，这样的。 感觉何必这么为难自己，哈哈

user: user-5
content: 引用 2 楼 rk4k94 的回复:[quote=引用 1 楼 自信男孩 的回复:] 这个可以自己试一下，如果按照字符串的接口strlen，那么这个长度应该是2。0x00就是0，'\0'就是0。 如果用sizeof，那么长度应该是10.是的，我之前都试了，但是我想打印出来的是5，所以咋整。。。求教了。。。。[/quote] 5的标准是什么？这个非常重要！ 你可能想的是我保存了5个进去，所以是5。但是电脑不会知道这个。所以就是两个方法： 1、自己做下计数；2、用特殊字符标记结束

user: user-3
content: 引用 5 楼 英雄@末路 的回复:后面没有附初值的元素可不一定是0哦，所以还是仔细想想吧 可以测试一下，一定是0。 所以这样赋值，就是把所有的数组元素都赋值为0.  int array[10] = {0};

user: user-6
content: 引用 5 楼 英雄@末路 的回复:后面没有附初值的元素可不一定是0哦，所以还是仔细想想吧一定是0 还是仔细想想吧

user: user-7
content: 后面没有附初值的元素可不一定是0哦，所以还是仔细想想吧

user: user-8
content: 说白了，你就是想忽略掉末尾全部的0，从有数据开始到最前面都算数是吧？这好办，你写个相关函数，从末尾遍历到头，遇到非0就跳出，返回遇到的下标+1，比如你发是这个例子，会在下标4跳出，那么返回4+1，就是它的长度

user: user-6
content: 引用 2 楼 rk4k94 的回复:[quote=引用 1 楼 自信男孩 的回复:] 这个可以自己试一下，如果按照字符串的接口strlen，那么这个长度应该是2。0x00就是0，'\0'就是0。 如果用sizeof，那么长度应该是10.是的，我之前都试了，但是我想打印出来的是5，所以咋整。。。求教了。。。。[/quote]自己定义一个变量记录你使用了数组多少个元素 没有现成的做法

user: user-0
content: 引用 1 楼 自信男孩 的回复:这个可以自己试一下，如果按照字符串的接口strlen，那么这个长度应该是2。0x00就是0，'\0'就是0。 如果用sizeof，那么长度应该是10.是的，我之前都试了，但是我想打印出来的是5，所以咋整。。。求教了。。。。

user: user-3
content: 这个可以自己试一下，如果按照字符串的接口strlen，那么这个长度应该是2。0x00就是0，'\0'就是0。 如果用sizeof，那么长度应该是10.
user-0 提问: 为什么理论值是64没有懂？？

回复:
user: user-1
content: 内存对齐。地址从0开始 num 占 4个字节  地址扩充到4 name[20]占20个字节，地址扩充到24 sex占1个字节地址扩充到25 age占4个字节，25不是4的倍数，先扩充到28再加4个字节扩充到32 float占4个字节，地址扩充到36 addr[30] 占30个字节 扩充到66 整个结构对齐到4的整数倍 扩充到68。 结果应该是68； 我写程序验证了一下，确实是68.

user: user-2
content: 为什么我觉得理论上是68呢？自动优化了？ 把sex和 addr放一起才是64把？

user: user-3
content: 看着费劲，没仔细看
user-0 提问: 怎么制作五颜六色闪烁的文字？

回复:
user: user-1
content: #include <windows.h> #include <stdio.h>  int Color[] = { FOREGROUND_GREEN, FOREGROUND_BLUE, FOREGROUND_RED, FOREGROUND_RED | FOREGROUND_BLUE, FOREGROUND_RED | FOREGROUND_GREEN, FOREGROUND_BLUE | FOREGROUND_GREEN, FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN };  int main(void) {    CONSOLE_SCREEN_BUFFER_INFO csbiInfo;    char str[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";    size_t i, len = sizeof(str) / sizeof(str[0]);     HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);     srand(time(NULL));    GetConsoleScreenBufferInfo(hConsole, &csbiInfo);    for (i = 0; i < len; ++i)    {       SetConsoleTextAttribute(hConsole, Color[i % 7] | FOREGROUND_INTENSITY);       printf("%c", str[i]);       Sleep(300);    }    SetConsoleTextAttribute(hConsole, csbiInfo.wAttributes);    printf("\n");    return 0; }

user: user-2
content: 用循环加上Sleep。如果是Windows程序可以用定时器。

user: user-3
content: 引用 4 楼 狂风乱吼 的回复:[quote=引用 3 楼 六道佩恩 的回复:]  #include "stdio.h" #include "windows.h" int main( void ) { 	HANDLE out= GetStdHandle(STD_OUTPUT_HANDLE);    	DWORD num= 0; 	WORD  attr= 0xf0, x=0; 	int  i= 0,  len= printf("ABCDEFGHIJKLMNOPQRSTUVWXYZ\n"); 	while(1) 	{	 		for( i=0 ; i<len ; i++ )				 		{ 			attr = 0xf0 + (x++ & 0xf);		 			FillConsoleOutputAttribute (out , attr , 1 , (COORD){i,0} , &num); 		} 		Sleep(100);						 	} 	return 0; }  大神的代码看不懂呀[/quote] 你先运行看看是不是你要的效果，是的话就逐个查阅其中的函数

user: user-0
content: 引用 3 楼 六道佩恩 的回复: #include "stdio.h" #include "windows.h" int main( void ) { 	HANDLE out= GetStdHandle(STD_OUTPUT_HANDLE);    	DWORD num= 0; 	WORD  attr= 0xf0, x=0; 	int  i= 0,  len= printf("ABCDEFGHIJKLMNOPQRSTUVWXYZ\n"); 	while(1) 	{	 		for( i=0 ; i<len ; i++ )				 		{ 			attr = 0xf0 + (x++ & 0xf);		 			FillConsoleOutputAttribute (out , attr , 1 , (COORD){i,0} , &num); 		} 		Sleep(100);						 	} 	return 0; }  大神的代码看不懂呀

user: user-3
content: #include "stdio.h" #include "windows.h" int main( void ) { 	HANDLE out= GetStdHandle(STD_OUTPUT_HANDLE);    	DWORD num= 0; 	WORD  attr= 0xf0, x=0; 	int  i= 0,  len= printf("ABCDEFGHIJKLMNOPQRSTUVWXYZ\n"); 	while(1) 	{	 		for( i=0 ; i<len ; i++ )				 		{ 			attr = 0xf0 + (x++ & 0xf);		 			FillConsoleOutputAttribute (out , attr , 1 , (COORD){i,0} , &num); 		} 		Sleep(100);						 	} 	return 0; }

user: user-0
content: 引用 1 楼 ooolinux 的回复:不断用不同颜色重画上去。

user: user-2
content: 不断用不同颜色重画上去。
user-0 提问: 窗口最小化后复原却无法响应是怎么回事？

回复:
user: user-1
content: MSDN98_1.ISO http://pan.baidu.com/s/1dDF41ix,  MSDN98_2.ISO http://pan.baidu.com/s/1bnGo0Vl

user: user-1
content: https://bbs.csdn.net/topics/390374955

user: user-1
content: 引用 3 楼 六道佩恩 的回复:[quote=引用 1 楼 赵4老师 的回复:] https://bbs.csdn.net/topics/390374955  您这个帖子我以前看过，如果您知道原因的话，还请透露一点，这么大范围你只让我读官方例子，无异于大海捞针[/quote] 请使用 grep https://download.csdn.net/download/zhao4zhong1/4381913 或 findstr 命令大海捞针。

user: user-0
content: 引用 1 楼 赵4老师 的回复:https://bbs.csdn.net/topics/390374955  您这个帖子我以前看过，如果您知道原因的话，还请透露一点，这么大范围你只让我读官方例子，无异于大海捞针
user-0 提问: bit操作求助

回复:
user: user-1
content: 看错了，bit的话麻烦一点，不过还是有规律可循的 int main() {     short src[] = {0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF};     short dest[10]; 	short src_bit[] = {0x3FFF, 0x3FFC, 0x3FF0, 0x3FC0, 0x3F00, 0x3C00, 0x3000}; 	short dest_bit[] = {0x3, 0xF, 0x3F, 0xFF, 0x3FF, 0xFFF, 0x3FFF}; 	int len = sizeof(src) / sizeof(short); 	int index = 0; 	int i = 0; 	int temp; 	while(i < len) 	{ 		temp = i % 7; 		dest[index++] = ((src[i] & src_bit[temp]) >> (temp * 2))  + ((src[i + 1] & dest_bit[temp]) << (14 - temp * 2)); 	    i++; 	} 	 	for (i = 0; i < index; i++) 	{ 	    printf("0x%X\n", dest[i]); 	} }

user: user-2
content: 引用 9 楼 636f6c696e 的回复:memcpy(dest, src, 14)； dest+=14; src+=16;是bit为单位 不是字节

user: user-1
content: memcpy(dest, src, 14)； dest+=14; src+=16;

user: user-3
content: 你写两个函数，一个函数遍历原数组，每次返回一个位上的1或0，用static变量记录输出的比特位的位置。 然后不断循环调用这个函数，将获得的0或1每8个排满一个字节（新数组）。

user: user-0
content: 不是为了节约时间，目前问题是带宽受限，处理能力足够

user: user-4
content: 如果不是奇缺这点传输性能和带宽，真不建议这么做。 因为想要实现你的方案，必然要实现一个bitstream，这个对象最起码要封装实现读写操作，并且还需要做不少的异常处理，你在传输中节约的时间，会在这里消耗掉。 一定要实现的话可以这样: short数组中每连续的7个元素读取完毕后，将获取的7个元素通过移位操作再合成第八个

user: user-0
content: 数据是传输用的，节约八分之一带宽是什么概念懂吗

user: user-2
content: 引用 3 楼 Oberon_H 的回复:我的数据是用于传输的，目的是节约传输的字节数放弃这种毫无价值的想法

user: user-0
content: 我的数据是用于传输的，目的是节约传输的字节数

user: user-2
content: 性价比太低

user: user-2
content: 没有  并且这个思路极其低效
user-0 提问: c语言题 求助

回复:
user: user-1
content: 我是一名蒟蒻 我什么都不知道  自认为一套玄学解法 把两个字符串在最后复制一份，构成一个环 然后就是 动态规划 求最长连续字串的题目  #include <cstdio> #include <iostream> #include  <string> #include <algorithm> #define maxn 100000 using namespace std;  string str1, str2; int dp[1000][1000]; int length; int res; char ch;  int main() { 	scanf("%d", &length); 	cin >> str1; 	cin >> str2;          //关键     str1 += str1;     str2 += str2;     length = length * 2 - 1;     //动态规划 	for (int i = 0; i < length; ++i) 	{ 		for (int k = 0; k < length; ++k) 		{ 			if (str1[i] == str2[k]) 			{ 				if (i > 0  && k > 0) 					dp[i][k] = dp[i - 1][k - 1] + 1; 				else 					dp[i][k] = 1; 				 				res = max(dp[i][k], res); 			} 		} 	}  	printf("%d\n", res);  	return 0; }

user: user-0
content: 引用 4 楼 Lighthouses的回复:[quote=引用 3 楼 Lighthouses的回复:][quote=引用 2 楼 Lighthouses的回复:]读两个字符串，用char类型数组，用两个伪在两个指针数组上进行有顺序的遍历查找，统计出结果 打漏了，是  伪指针[/quote] 貌似是  动态规划的题目[/quote] 可以写出代码 看看吗 拜托大佬

user: user-0
content: 引用 10 楼 早打大打打核战争 的回复:x当前一轮扫描中两个字符串的匹配数量 y历史最大匹配数量 因为字符串长度为n，如果y已经达到n，就没必要继续扫描了好的谢谢

user: user-2
content: x当前一轮扫描中两个字符串的匹配数量 y历史最大匹配数量 因为字符串长度为n，如果y已经达到n，就没必要继续扫描了

user: user-0
content: 引用 7 楼 早打大打打核战争 的回复:简单一点：  #include <stdio.h> #include <string.h>  int main() {   int n, i, j, x, y = 0;   char a[4096], b[2048];    scanf("%d\n", &n);   gets_s(a, 2048);   gets_s(b, 2048);   memcpy(&a[strlen(a)], a, n);   for (i = 0; x = 0, i < n; i++, x > y ? y = x : 0, y == n ? i = n : 0)     for (j = 0; j < n; j++) if (a[i + j] == b[j]) x++;   printf("%d\n", y);    return 0; }  x > y ? y = x : 0, y == n ? i = n : 0) 求解答主 带问号这段是什么意思 谢谢

user: user-0
content: 引用 6 楼 Lighthouses 的回复:我是一名蒟蒻 我什么都不知道  自认为一套玄学解法 把两个字符串在最后复制一份，构成一个环 然后就是 动态规划 求最长连续字串的题目  #include <cstdio> #include <iostream> #include  <string> #include <algorithm> #define maxn 100000 using namespace std;  string str1, str2; int dp[1000][1000]; int length; int res; char ch;  int main() { 	scanf("%d", &length); 	cin >> str1; 	cin >> str2;          //关键     str1 += str1;     str2 += str2;     length = length * 2 - 1;     //动态规划 	for (int i = 0; i < length; ++i) 	{ 		for (int k = 0; k < length; ++k) 		{ 			if (str1[i] == str2[k]) 			{ 				if (i > 0  && k > 0) 					dp[i][k] = dp[i - 1][k - 1] + 1; 				else 					dp[i][k] = 1; 				 				res = max(dp[i][k], res); 			} 		} 	}  	printf("%d\n", res);  	return 0; }  谢谢答主 不过我试了一下 比如abeak 3次变eakab        bkace  1次变ebkac 应该有三个对应相同的 1.3.4位 可是代码运行显示为2 能不能帮着看看 万分感谢

user: user-2
content: 简单一点：  #include <stdio.h> #include <string.h>  int main() {   int n, i, j, x, y = 0;   char a[4096], b[2048];    scanf("%d\n", &n);   gets_s(a, 2048);   gets_s(b, 2048);   memcpy(&a[strlen(a)], a, n);   for (i = 0; x = 0, i < n; i++, x > y ? y = x : 0, y == n ? i = n : 0)     for (j = 0; j < n; j++) if (a[i + j] == b[j]) x++;   printf("%d\n", y);    return 0; }

user: user-1
content: 引用 3 楼 Lighthouses的回复:[quote=引用 2 楼 Lighthouses的回复:]读两个字符串，用char类型数组，用两个伪在两个指针数组上进行有顺序的遍历查找，统计出结果 打漏了，是  伪指针[/quote] 貌似是  动态规划的题目

user: user-1
content: 引用 2 楼 Lighthouses的回复:读两个字符串，用char类型数组，用两个伪在两个指针数组上进行有顺序的遍历查找，统计出结果 打漏了，是  伪指针

user: user-1
content: 读两个字符串，用char类型数组，用两个伪在两个指针数组上进行有顺序的遍历查找，统计出结果

user: user-0
content: 跪求 谢谢！！
user-0 提问: c程序设计（第五版）谭浩强例题7.12

回复:
user: user-0
content: 上面那位老师的方法试了，程序执行完成后没有进行排序，还是按照输入数字的顺序输出的结果。现在这个图是我一步一步调试的，还是不明白：当判断条件为假时不是应该不走if中的语句吗，虽说并没有被赋于新值，但总与自己学过的知识对不上。还请各位老师看在通宵到现在的份上，发下慈悲，给解解惑

user: user-1
content: t = array[k]和后面的两句放到这个判断语句里：  if (k != i) {     t = array[k];     array[k] = array[i];     array[i] = t; }

user: user-2
content: 没有仔细看。给个建议：循环体、if语句的子句，语法上都是一条语句，如果不是，则应用{}进行组合。
user-0 提问: 求助

回复:
user: user-0
content: 引用 1 楼 自信男孩的回复:楼主是什么意思？是修改程序实现输入是负值是不执行换行符？ 应该是你说的意思，但还是不懂怎么弄

user: user-0
content: 引用 1 楼 自信男孩的回复:楼主是什么意思？是修改程序实现输入是负值是不执行换行符？ 上面那个程序就是4-5，我截图不到

user: user-0
content: 我就是不懂，它叫我把上面的程序改为输入负数后不执行换行操作，应该是你说的意思。

user: user-1
content: 楼主是什么意思？是修改程序实现输入是负值是不执行换行符？
user-0 提问: C语言

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

user: user-2
content: 举一个你计算的例子，并把你的代码贴一下。

user: user-3
content: 帖下你的数据和输出内容

user: user-2
content: 引用 4 楼 qq_45541848 的回复:float num_a=198903.19f 2进制无法精确表示这个十进制，在内存中其实是保存为了010001111100001000111101110001100 转换为十进制是198903.1875 但是在输出时变为了198903.2 这是精度问题

user: user-0
content: 那串二进制数输错了，不好意思

user: user-0
content: float num_a=198903.19f 2进制无法精确表示这个十进制，在内存中其实是保存为了010001111100001000111101110001100 转换为十进制是198903.1875 但是在输出时变为了198903.2
user-0 提问: 书上的知识在实践中遇到了问题。exe不是可执行程序吗？

回复:
user: user-1
content: 你是win系统小白哦。你控制台里的路径是c:\windows\system32 下面当然没有你这个程序echo_eof.exe  学会cd d:\

user: user-2
content: D: cd "visual studio\程序设计\echo_eof\x64\Release"

user: user-2
content: D: cd "visual studio\程序设计\echo_eof\x64"

user: user-0
content: 系统是win10
user-0 提问: Error in cor(data) : 'x'必需为数值

回复:
user: user-1
content: 因为某个列的值不是numeric，因此需要把所有数值变成numeric才行，可以重新构建data.frame

user: user-2
content: data <- read.csv("mtcars.csv",header = TRUE,row.names = 1)就可以了

user: user-3
content: 找了两个多小时，终于找到可以解决的办法了 感谢~

user: user-4
content: 可能是数据的原因

user: user-5
content: 引用 4 楼 user-6 的回复:这是erlang？ 没接触过erlang，这里是c/c++，似乎楼主应该移步。 推测一下 data 可能是字符串变量， cor_matr = cor(data)//这里可能要求是数值，请把data转为数值。 不同erlang,瞎说莫怪。

user: user-6
content: 这是erlang？

user: user-5
content: 你的代码不是c/c++吧？

user: user-0
content: 引用 1 楼 user-6 的回复:不明所以，你这个有完整代码吗？ data = read.csv("mtcars.csv",header = TRUE) head(mtcars) matcar.cor <- cor(mtcars) matcar.cor 用这个代码就不会提示那个错误； data = read.csv("mtcars.csv",header = TRUE) head(mtcars) cor_matr = cor(data) cor_matr 用这个代码就会提示错误

user: user-6
content: 不明所以，你这个有完整代码吗？
user-0 提问: C语言求解

回复:
user: user-1
content: 如果实在visual 6.0的环境下， scanf的作用是通过键盘，向内存中输入一些内容，用法如下  scanf("%d",&number)  //输入一个整数 scanf("%c",&character)  //输入一个整数 //特别注意要加&，这是个取地址符，就好比你要给一个房间放一本书，必须先打开门，而&就是一把钥匙 char                            //这是一个关键字，用来定义字符型变量，比如上面的character就可以用这个定义 char character            //而这也是char的四个字母的来源 puts("%s",str)            //输出某个字符串  修德兼修身，万物与我共存，天地与我为一
user-0 提问: 纯c语言 MessageBoxTimeout 问题？？

回复:
user: user-0
content: 加上#pragma也是不行的，gcc不认啊！

user: user-1
content: 3楼正解，MessageBoxTimeoutA和MessageBoxTimeoutW是在user32中导出的  #include <windows.h>  int WINAPI MessageBoxTimeoutA(IN HWND hWnd, IN LPCSTR lpText, IN LPCSTR lpCaption, IN UINT uType, IN WORD wLanguageId, IN DWORD dwMilliseconds); int WINAPI MessageBoxTimeoutW(IN HWND hWnd, IN LPCWSTR lpText, IN LPCWSTR lpCaption, IN UINT uType, IN WORD wLanguageId, IN DWORD dwMilliseconds);  #ifdef UNICODE #define MessageBoxTimeout MessageBoxTimeoutW #else #define MessageBoxTimeout MessageBoxTimeoutA #endif    #pragma comment(lib, "user32")  int main(void) {    MessageBoxTimeout(0,"ttttt","111111",0,0,2000);    return 0; }

user: user-2
content: #include <windows.h>  #pragma comment(lib, "user32.lib")

user: user-0
content: VB6 里   Private Declare Function MessageBoxTimeout Lib "user32" Alias "MessageBoxTimeoutA" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long, ByVal wlange As Long, ByVal dwTimeout As Long) As Long  这个没问题！！！！！

user: user-0
content: 是缺什么连接库吗？ 我用下面编译也是这种错误？？  gcc 1111.c -luser32 -o 1111.exe
user-0 提问: 刚学习C语言，请教一个嵌套语句出现的问题

回复:
user: user-1
content: 你可以使用一些更加集成化的开发工具，比如说，visual stdio 2017，可以在网上找到下载

user: user-2
content: 编译器的问题

user: user-3
content: 不同的编译器对缩进的处理不同

user: user-4
content: C语言是不管缩进的，缩进只是人看着比较舒服，编译器自己有语法分析，不管缩进 你自己可以手动缩进或使用编辑器提供的格式化功能自动缩进美化一下

user: user-5
content: 这和语言有啥关系，这是编译器，IDE的事
user-0 提问: switch不知道可不可以这样用，一个人搞不定了。格式什么的实在搞不定了,TAB键粘到这里来，没效果

回复:
user: user-1
content: 很简单的计算被你写成那样 :)  #include<stdio.h>  //typedef enum {SINGLE, HOUSE, M_S, M_D} tax_bracket; float tax_brackets[] = {17850, 23900, 29750, 14875}; float tax_rate[] = {0.15, 0.28};  int main() {   char c;   float n;    while (1)   {     for (; printf("how much you earned?(q to quit)\n"), scanf_s("%f", &n, 13) != 1;)       while ((c = getchar()) != 10) if (c == 'q' || c == 'Q') return 0;     for (; printf("Enter a character:((A)for single person (B)for house owner. (C)for married. (D)for divorce.)\n"),            scanf_s("\n%c", &(c = 0), 13), !((c >= 'A' && c <= 'D') || (c >= 'a' && c <= 'd')););     c < 'E' ? c -= 65 : c -= 97;     printf("the tax is %f\n",        n > tax_brackets[c] ? tax_brackets[c] * tax_rate[0] + (n - tax_brackets[c]) * tax_rate[1] :       n * tax_rate[0]);   }    return 0; }

user: user-2
content: 1 scanf_s("%c", &en, 5);用scanf_s输入字符的时候，后面加个数字，大小看心情，随意； 2 如果你搞不定的其中一个原因是老是输出how much you earned?(q to quit)这句话，那就看看你的while（1），删了吧，凡在这含义是什么，没看懂； 3 scanf_s用来直接输入数据，你把他用在赋值上，通过输入n，赋值给了k，我没跑通，把k=删了，可以跑；

user: user-0
content: 题目： 1988年的美国联邦税收计划是近代最简单的税收方案 以下：  类别                                           |    税金 单身                                                 17850美元按%15计，超出部分按%28计算 户主                                                 23900美元按%15计，超出部分按%28计算 已婚，共有                                       29750美元按%15计，超出部分按%28计算 已婚，离异                                       14875美元按%15计，超出部分按%28计算
user-0 提问: 萌新求助

回复:
user: user-0
content: 引用 1 楼 SuperDay的回复:double应该是8字节的，float是4字节，执行scanf之后，double只被填充了4个字节，剩余4个字节是不确定的 哦哦，该用lf是吧，谢谢大哥

user: user-1
content: double应该是8字节的，float是4字节，执行scanf之后，double只被填充了4个字节，剩余4个字节是不确定的

user: user-0
content: 引用 3 楼 自信男孩的回复:用%lf格式输入。如果用%f输入，那么是按照float的格式输入的。 大哥，我还有一个其他的问题

user: user-0
content: 引用 3 楼 自信男孩的回复:用%lf格式输入。如果用%f输入，那么是按照float的格式输入的。 大哥，我还有一个其他的问题

user: user-2
content: 用%lf格式输入。如果用%f输入，那么是按照float的格式输入的。
user-0 提问: c语言编译错误

回复:
user: user-1
content: 看下change定义那里第二个参数n，没指明类型。

user: user-2
content: 子函数中引入 n 时没写int

user: user-3
content: 引用 1 楼 轻箬笠 的回复:把函数声明放到最前面看看。c语言的声明需要放在最前面，不像C++一样，只要用到之前声明下就可以了+1

user: user-4
content: 把函数声明放到最前面看看。c语言的声明需要放在最前面，不像C++一样，只要用到之前声明下就可以了

user: user-5
content: 1楼正解  int main(void) {    void change(int x[], int n); //放在最前面    .... }
user-0 提问: C

回复:
user: user-1
content: 大端序小端序问题，内存的基本单位是字节（8个bit），一个字节最多能表示2^8个数（0-255）；32位系统c语言中int类型占4个字节，每个字节内存单元都有自己的地址编号，比如这个4个字节的地址编号是 0x56,0x57,0x58,0x59。现在有一个数是1023（二进制：11111111 11，十六进制：0x00 00 03 ff），大端序： 0x56,0x57存00，03存到0x58中，ff存到0x59中 （高字节存于内存低地址）。小端序就反过来。

user: user-2
content: 低位高字节，这是对大小端系统来讲的吧。 比如unsigned int x = 0x12345678;在内存中存放，0x12是高字节，0x78是低字节，低位（位是指位置）是指内存的低地址，内存有 高地址和地地址之分，比如0x7ffd491d1270 , 0x7ffd491d1264。地址值大的就是高地址。 低位高字节，就是低地址存放0x12，在高地址存放0x78；
user-0 提问: PAT1088 三人行测试点3不通过，跪求大佬指点！SOS

回复:
user: user-0
content: //p1个位可以为0，p2可以是一位数，即j == 0; p1确定是两位数，即i >= 1; for (j = 1; j <= 9; j++)改为j = 0，通过了，审题太重要了。
user-0 提问: linux下使用read读取socket数据时间较长

回复:
user: user-1
content: 用fputs和fgets

user: user-0
content: 问题解决了，read方法不能放在while循环中，设备有请求时会及时响应，并且每隔40秒定期发送数据，read放在while时，在一直等待网络数据，那么while就死循环了，write就只执行了一次。

user: user-2
content: 说一个啊，你的时间计算有问题，1 秒(sec) = 1000毫秒(ms,millisecond) = 1000000微秒(usec, microsecond)
user-0 提问: 指针问题

回复:
user: user-1
content: 没有，while判断真假，NULL/0为假，其他为真。 NULL是(void *)0

user: user-2
content: 引用 2 楼 user-3 的回复:没有 因为大多数平台 NULL 被定义为 0 但是不排除某些子系统中的 NULL 不为 0 的情况，但是这种情况极少出现NULL是不是0 都一样

user: user-3
content: 没有 因为大多数平台 NULL 被定义为 0 但是不排除某些子系统中的 NULL 不为 0 的情况，但是这种情况极少出现

user: user-2
content: 没有
user-0 提问: 关于数据结构链表的原理，初学，请各位大佬请教！！！

回复:
user: user-0
content: 引用 1 楼 user-1 的回复：Node* currentnode = linkList->next;这一句是指针赋值语句，*currentnode和*（linkList->list）指的是同一个地址的值，而不是指向两个不同地址的相同值（即不是将值复制一份给currentnode）。这里是指针的概念，建议复习一下指针好的，我懂了，谢谢！

user: user-1
content: Node* currentnode = linkList->next;这一句是指针赋值语句，*currentnode和*（linkList->list）指的是同一个地址的值，而不是指向两个不同地址的相同值（即不是将值复制一份给currentnode）。这里是指针的概念，建议复习一下指针
user-0 提问: c语言程序题

回复:
user: user-1
content: 把第三个for语句后面的分号去了

user: user-2
content: 请注意编码格式和规范，这样写虽然可以但是自己查bug都费脑子， for()后的语句用大括号圈起来，别管几行。 缩进格式也得注意

user: user-3
content: 注意一下，第三for后面多了一个;。然后x向y赋值的循环就没有执行， 因为第三for之后j = 4;此时k = j; k < 4;所以第四个for一次也不执行。
user-0 提问: 布尔变量有大小吗？c99对布尔变量的定义

回复:
user: user-1
content: 引用 6 楼 luckyboy1024 的回复:为什么是int，因为发生了整型提升，不能说布尔类型是int吧类型提示说的是操作数a本身的变化 和表达式 !a的类型 没关系 !a 是一个int类型 不管操作数怎么做妖  你也提到最新规范了 最新规范是C11  你自己看一看就行了  顺便 vs主要是C++ 对C语言标准的支持很弱 别用vs验证 vs直到2015都不支持C99的一些新特性呢 比如VLA 别指望vs

user: user-0
content: 为什么是int，因为发生了整型提升，不能说布尔类型是int吧

user: user-1
content: 引用 4 楼 luckyboy1024 的回复:前面忘提了，a定义时定义为char和a的类型没关系 不管什么类型 !运算符结果就是int a定义成指针 !a是int a定义成浮点数 !a是int  顺便强调一下 C和C++ 在这里是有区别的

user: user-1
content: 这段代码和C99布尔类型没什么关系 说出来你可能不信 ! 运算符求值结果是 int类型 所以这段代码输出结果 和 输出sizeof(int)的结果一样 GG

user: user-2
content: <windef.h>typedef int BOOL;

user: user-0
content: 前面忘提了，a定义时定义为char

user: user-0
content: 在最新的规范中，它并没有定义布尔类型为int，！运算符按理会使a发生整形提升，但这两行代码在VS2013及之后的版本中编辑输出结果是1，换用老一点的编译器VC或者gcc结果都是4
user-0 提问: RGB三色数据生成CImage

回复:
user: user-0
content: 可能RGB数据别人也是使用OpenCV写入文件中的

user: user-0
content: 三个readSubImage是取RGB数据的，上面函数是生成MAT的，但最终图要放到CList里，要转成CBitmap才能放入CImageList，我就想直接把这函数里用取出的三个RGB数据生成CBitmap(不使用OpenCV)

user: user-1
content: cv::Mat &errImgMat是返回的结果，你不修改调用者的代码，你怎么能改成CImage呢？！

user: user-1
content: 参考CImage的构造函数或成员函数。

user: user-0
content: 上面是使用Opencv的，想直接使用CImage

user: user-0
content: //根据CErrImgDExplorerDlg结构填充图像 bool CErrImgDExplorerDlg::readImage(stSubErrInfo& sub, cv::Mat &errImgMat, int& nError) { 	const int m_channelSize = 25000;  	char* m_pbufferR = new char[m_channelSize]; 	char* m_pbufferG = new char[m_channelSize]; 	char* m_pbufferB = new char[m_channelSize];  	memset(m_pbufferR, 0, m_channelSize); 	memset(m_pbufferG, 0, m_channelSize); 	memset(m_pbufferB, 0, m_channelSize); 	bool bRead = true;  //读取数据成功标识 	bool bret = true; 	std::ifstream file; 	file.open(CStringA(sub.path), std::ios_base::_Nocreate | std::ios_base::binary);   	if (file) 	{ 		int len = 0; 		file.seekg(sub.r_offset); 		bRead = readSubImage(file, &m_pbufferR, len);  		if (sub.channel == 1) 		{ 			//pPixmap->loadFromData((uchar*)m_pbufferR, len); 		} 		else if (sub.channel == 3) 		{ 			std::vector<cv::Mat> vec;  			// R 			std::vector<uchar> data_r(m_pbufferR, m_pbufferR + len);  			cv::Mat dr = cv::imdecode(data_r, cv::IMREAD_UNCHANGED); 			data_r.clear();  			vec.push_back(dr);     			// G 			file.seekg(sub.g_offset); 			bRead = readSubImage(file, &m_pbufferG, len);  			std::vector<uchar> data_g(m_pbufferG, m_pbufferG + len); 			cv::Mat dg = cv::imdecode(data_g, cv::IMREAD_UNCHANGED); 			data_g.clear(); 			vec.push_back(dg);  			// B 			file.seekg(sub.b_offset); 			bRead = readSubImage(file, &m_pbufferB, len);  			std::vector<uchar> data_b(m_pbufferB, m_pbufferB + len); 			cv::Mat db = cv::imdecode(data_b, cv::IMREAD_UNCHANGED); 			data_b.clear(); 			vec.push_back(db);  			cv::merge(vec, errImgMat);   			vec.clear(); 		} 		file.close(); 	} 	return true; }

user: user-2
content: 三通道数据长度不一样？那可能是用的YUV/YCbCr彩色空间，而不是RGB

user: user-0
content: 能给个例子吗？取数据时发现，三通道（m_pbufferR、m_pbufferG、m_pbufferB）的数据长度是不一样的，这样也行？

user: user-2
content: 你自己调整一下就行了 RRR...RRR GGG...GGG BBB...BBB 调整成 RGBRGB...RGB

user: user-0
content: 我就是不会合，三通道数据是别人写在本地的文件，我只是读进来但不会用，单个通道的数据（m_pbufferR、m_pbufferG、m_pbufferB三个中的任一个）使用CImage.Load能生成CImage,三通道数据不会合

user: user-1
content: 引用 2 楼 djmjxm 的回复:没找到相关的函数，三通道的数据是分开的 分开的你自己写段代码给它合并到一个缓冲区里不就结了。

user: user-0
content: 没找到相关的函数，三通道的数据是分开的
user-0 提问: 关于结构体数组的问题

回复:
user: user-1
content: 你改正后的for循环还是有;

user: user-0
content: 文件里面已经有了一个学号是05A18330的内容，但是后面比较输入05A18330怎么都是该学号不存在

user: user-0
content: 这个问题刚刚自己排出来了。现在这一段是这个。 void SEARCH() { 	PRINT(); 	int t; 	int flag=0; 	char s[30]; 	printf("\n  ==================\n"); 	printf("     1.按学号查询     \n"); 	printf("     2.按姓名查询     \n"); 	printf("    ==================\n"); 	printf("请选择查询方式（输入序号）\n"); 	scanf("%d",&t); 	switch(t) 	{ 	case 1: 		printf("请输入想要查询的学号："); 		scanf("%s",s); 		for(i=0;i<33;i++);       			if(strcmp(stu[i].code,s)==0) 		{ 				flag=1; 			printf("姓名    学号   性别   出生日期\n"); 			printf("%s %s %s %s\n",stu[i].name,stu[i].code,stu[i].sex,stu[i].birth); 		} 		if(flag==0) 			printf("该学号不存在\n");break; 	case 2:printf("请输入想要查询的姓名："); 		scanf("%s",s); 		for(i=0;i<33;i++); 		if(strcmp(stu[i].name,s)==0) 		{ 			flag=1; 			printf("姓名    学号   性别   出生日期\n"); 			printf("%s %s %s %s\n",stu[i].name,stu[i].code,stu[i].sex,stu[i].birth); 		} 		if(flag==0) 			printf("该姓名不存在\n");break; 	case 3:default: 		WRONG();break; 	} }   后面怎么都检测不出来相同的= =

user: user-2
content: 你的 for 循环后边多写了一个 分号  void SEARCH() { READ(); for(i=0;i<33;i++); { printf("%s",stu[i].code); }  改成  for(i=0;i<33;i++) { printf("%s",stu[i].code); }

user: user-0
content: 自顶，顶，顶