为什么以下c代码产生的实数仅在0到1之间(例如:0.840188,0.394383 ...等),double a,b当RAND_MAX的值出现时0.000000.不应该RAND_MAX设置rand()函数生成的数字的最大值?
#include <stdio.h>
#include <stdlib.h>
int main()
{
double a,b,c;
for (int i=0;i<100;i++){
a=(double)rand()/(double)RAND_MAX;
b=(double)rand()/(double)RAND_MAX;
c=a-b;
printf("itteration : %d values a=%f,b=%f,c=%f, RAND_MAX=%f \n",i,a,b,c,RAND_MAX);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我希望你做得好.当我遇到示例程序中实现的这些头文件时,我正在浏览Allen I. Holub的书"Compiler Design In C":
#include <tools/debug.h>
#include <tools.h> /* Needed only for prototype
Run Code Online (Sandbox Code Playgroud)
我的编译器说没有这样的文件或目录(Dev-C++).我已将编译器设置设置为ANSI-C,了解作者如何使用ANSI-C编写代码,但无济于事.
该程序还包括一个PRIVATE关键字,在从C99更改为ANSI-C之后,编译器仍然将其报告为未知关键字.
任何人都可以帮我解决这个问题吗?如果之前有人问过这个问题,我会道歉,但我无法在任何地方找到这方面的参考.我还在这里列出了代码的图片.
如果我应该弃权,或者我无法访问这些文件,我还有其他选择吗?我真的想完成这个项目.
提前感谢您花时间和耐心阅读所有这些内容.
我写了一个简单的C程序来测试_Generic关键字的可用性.
int main() {
int _Generic;
}
Run Code Online (Sandbox Code Playgroud)
我在Ubuntu上用gcc-5.3.1和clang-3.8.0编译器运行程序.
显然,当使用最新的c11标准编译时,该程序会产生错误.
但是,当使用-std = c90和-std = c99标志进行编译时,它也会生成错误.然而,_Generic关键字仅在c11标准中引入.
这是-std = flags的行为不同吗?有没有办法测试纯c90和c99标准?
编辑:
我确实使用其他标识符运行相同的程序,这些标识符不是c11标准的关键字.喜欢:
int _Hello;
int _Gener;
Run Code Online (Sandbox Code Playgroud)
他们成功编译没有任何错误或警告.这可能是因为7.1.3,它说
如果程序在保留它的上下文中声明或定义标识符(除了7.1.4允许的标识符),或者将保留标识符定义为宏名称,则行为未定义
正如@Art和@Lundin所说.
假设我有以下代码:
int i = 0;
func(i++, i++);
Run Code Online (Sandbox Code Playgroud)
在返回值后立即发生增量?是否保证第一个参数为0,第二个参数为1?
我的代码如下:
#include <stdio.h>
int main(int argc, char *argv[]) {
printf("hello");
while(1){
// whatever here
}
}
Run Code Online (Sandbox Code Playgroud)
问题是:为什么跳过第一条指令?它只运行循环,你永远不会打印.我使用gcc和g ++编译它,结果相同.
我想使用abc1,abc2,abc3,abc4,.. abc100作为结构变量名.但我不知道如何设置这个?不知道.
有人可以帮帮我吗?非常感谢.
如何将自己的编程函数包含到标准 C (ANSI C) 库中?任何正在学习或从事 C 语言工作的人都可以随时随地使用这些功能,一般不需要开发。
示例:有人开发了名为“FunFun()”的函数,并假设它对大多数程序员来说都非常有用。那么,如何在不开发且仅包含标准库的情况下访问这个“FunFun”功能呢?