scanf和double的问题

我无法理解为什么会发生这种情况:使用以下代码; #include int main() { double x=123; printf(“x is %f. Enter a new value for x.\n”, x); scanf(“%f”, &x); printf(“x is %f\n”, x); return 0; } 当您输入45678作为x的新值时,将打印“x为123.000017”。 我知道在扫描时使用%lf时这是固定的,但为什么在使用%f时会发生这种情况?

从两个相交的链表中查找相交节点

假设有两个单链表,它们在某个点相交并成为单个链表。 两个列表的头部或起始指针都是已知的,但交叉节点是未知的。 此外,列表中每个列表中的节点数量在它们相交之前是未知的,并且两个列表可能具有不同,即List1在到达交叉点之前可能有n个节点,而List2可能在到达交点之前有m个节点,其中m和n可能是 m = n, m <n或 m> n 一种已知或简单的解决方案是将第一列表中的每个节点指针与第二列表中的每个其他节点指针进行比较,匹配节点指针将通过该指针引导我们到交叉节点。 但是,在这种情况下,时间复杂度将是O(n 2 ),这将是很高的。 找到交叉节点的最有效方法是什么?

跨平台的一致的伪随机数

我正在寻找一种方法来生成伪随机数序列,这将为任何平台上的给定种子产生相同的序列结果。 我假设rand() / srand()不一致(我可能很容易对这个假设错误)。

是否有GNU getline接口的替代实现?

我目前正在进行的实验使用的软件库具有复杂的源历史记录,并且没有明确定义的许可证。 合理化事物并在固定许可下发布将是一项相当大的工作。 它也打算运行一个随机的unixish平台,只有我们支持的一些libc有GNU getline,但现在代码期望它。 有没有人知道在限制较少的许可下可以重新实现GNU getline语义? 编辑::我问,因为谷歌没有帮助,我想尽可能避免写一个(这可能是一个有趣的练习,但它不能最好地利用我的时间。) 更具体地说,有问题的界面是: ssize_t getline (char **lineptr, size_t *n, FILE *stream);

如何解决“BUG:调度primefaces:swapper / 0x00000103 / 0,CPU#0”? 在TSC2007驱动程序?

我找到了tsc2007驱动程序并根据我们的需要进行了修改。 我们公司正在生产自己的TI DM365板。 在该电路板中,我们使用TSC2007并将PENIRQ引脚连接到DM365的GPIO0。 它在驾驶员身上看得很清楚。 当我触摸触摸屏光标正在移动但同时我得到 BUG: scheduling while atomic: swapper /0x00000103/0, CPU#0 警告和嵌入式Linux正在崩溃。 有两个文件,我修改并上传到http://www.muhendislikhizmeti.com/touchscreen.zip一个是与计时器,另一个不是。 它无论如何都会给出这个错误。 我在网上找到了一个解决方案,我需要使用工作队列并使用schedule_work()API调用。 但他们现在对我来说很模糊。 有没有人知道如何解决这个问题,并可以给我一些建议,从哪里开始使用工作队列。

将ASM转换为C(不是逆向工程)

我用谷歌搜索,我看到一个惊人的轻浮反应基本上嘲笑提问者问这样一个问题。 Microchip免费提供一些源代码(我不想在这里发布,以防万一。基本上,谷歌AN937,点击第一个链接,有一个链接“源代码”及其压缩文件)。 它在ASM中,当我看到它时,我开始睁大眼睛。 我想把它转换成类似ac类型语言的东西,这样我就可以跟随它。 因为行如: GLOBAL _24_bit_sub movf BARGB2,w subwf AARGB2,f 可能很简单,但它们对我毫无意义。 必须有一些自动ASM到C的翻译器,但我能找到的只是人们说它不可能。 坦率地说,它不可能是不可能的。 两种语言都有结构,这种结构肯定可以翻译。 谢谢。

close()没有正确关闭套接字

我有一个multithreading服务器(线程池),使用20个线程处理大量请求(一个节点最多500 /秒)。 有一个侦听器线程接受传入连接并将它们排队以供处理程序线程处理。 一旦响应准备就绪,线程就会写出到客户端并关闭套接字。 直到最近,一切似乎都很好,一个测试客户端程序在阅读响应后开始随机挂起。 经过大量挖掘后,似乎服务器的close()实际上并没有断开套接字。 我已经使用文件描述符编号为代码添加了一些调试打印,我得到了这种类型的输出。 Processing request for 21 Writing to 21 Closing 21 close()的返回值为0,否则将打印另一个调试语句。 使用挂起的客户端输出此输出后,lsof将显示已建立的连接。 SERVER 8160 root 21u IPv4 32754237 TCP localhost:9980-> localhost:47530(ESTABLISHED) 客户端17747 root 12u IPv4 32754228 TCP localhost:47530-> localhost:9980(ESTABLISHED) 就像服务器永远不会将关闭序列发送到客户端一样,这种状态会一直挂起,直到客户端被终止,让服务器端处于关闭等待状态 SERVER 8160 root 21u IPv4 32754237 TCP localhost:9980-> localhost:47530(CLOSE_WAIT) 此外,如果客户端指定了超时,它将超时而不是挂起。 我也可以手动运行 call close(21) 在gdb的服务器中,客户端将断开连接。 这可能在50,000个请求中发生一次,但可能不会在较长时间内发生。 Linux版本:2.6.21.7-2.fc8xen Centos版本:5.4(最终版) 套接字动作如下 服务器: […]

浮动到int意外行为

你能解释一下这个程序的o / p行为吗? int main() { float a = 12.5; printf(“%d\n”, a); printf(“%d\n”, *(int *)&a); return 0; } 可以请访问http://codepad.org/AQRlAzkC查看代码 为什么这个输出会来……

一种可能的算法,用于确定两个字符串是否是彼此的字谜?

我有这个想法(使用C语言)来检查由ASCII字母组成的两个字符串是否是彼此的字谜: 检查字符串是否长度相同。 检查两个字符串的所有字符的ASCII值之和是否相同。 检查两个字符串的所有字符的ASCII值的乘积是否相同。 我相信如果所有三个都是正确的,那么字符串必须是彼此的字谜。 但是,我无法certificate这一点。 有人可以帮我certificate或反驳这会起作用吗? 谢谢!

Matlab可执行文件太慢了

我使用Matlab中的deploytool将我的Matlab程序转换为基于控制台的应用程序。 Matlab .m文件需要大约2秒才能执行,但在我将其转换为可执行文件并调用.exe ,执行时间过长需要45秒。 我想将Matlab程序与PHP集成。 有没有其他有效和快速的方法来做到这一点? 在我的项目中,时间确实是一个重要因素(不是开发时间,而是应用程序的执行时间)。 那么有什么方法花费更少的时间吗? 我在互联网上看到,我们可以编写PHP扩展来调用Matlab。 此方法是快速还是与调用.exe文件相同? Matlab编码器是否对此过程有任何帮助? 如果有其他选择,请提及。