C 采用意外高值的浮点数

C 采用意外高值的浮点数,c,for-loop,floating-point,C,For Loop,Floating Point,我编写了一个c脚本,为另一个应用程序生成一个文本文件。浮点数“b”的值很高,我不知道为什么。我有一个几乎相同的文件,其中没有发生这种情况。我是C语言的新手,所以任何帮助都将不胜感激——我明白这可能是一个非常简单的错误。代码如下 #包括 #包括 #包括 #包括 #定义最大1000 #定义初始时间40 无效清除字符串(字符*s,整数l) { int i; 对于(i=0;i而言,b在其声明中没有初始值: float outflow_count, percentout = 0.7, b; 因此,在第一

我编写了一个c脚本,为另一个应用程序生成一个文本文件。浮点数“b”的值很高,我不知道为什么。我有一个几乎相同的文件,其中没有发生这种情况。我是C语言的新手,所以任何帮助都将不胜感激——我明白这可能是一个非常简单的错误。代码如下

#包括
#包括
#包括
#包括
#定义最大1000
#定义初始时间40
无效清除字符串(字符*s,整数l)
{
int i;

对于(i=0;i而言,
b
在其声明中没有初始值:

float outflow_count, percentout = 0.7, b;
因此,在第一次使用之前,它的值就是之前使用过的单词在堆栈中留下的值。每个后续值都取决于它的初始值,因此没有理由期望有任何特定的值

我建议初始化它

其余部分是关于如何提问的提示。您应该做的第一件事是去掉程序中不需要复制错误的所有内容。由于问题是在第一次循环后打印
b
时出现的,因此我删除了之后的所有内容,然后删除了作为结果而未被引用的声明:

#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>

#define LARGESTR 1000
#define INITIALTIME 40

int main(void)
{
    int a;
    float b;

    //Total Input to system
    for(a=(INITIALTIME + 10); a<(INITIALTIME + 250); a+=10) {
        if((a>=10) && (a<600)) {
            b=b+1.39+0.556;
        }
        if((a>=600) && (a<1200)) {
            b=b+(((a*9.167)-5000)/360)+(((a*1.67)-800)/360);
        }
        if((a>=1200) && (a<2700)) {
            b=b+16.67+3.33;
        }
        if((a>=2700) && (a<3300)) {
            b=b+(((a*(-10))+33000)/360)+(((a*(-2))+6600)/360);
        }
        if((a>=3300) && (a<4800)) {
        }
    }
    printf("%f\n", b);
    return 0;
}
#包括
#包括
#包括
#包括
#定义最大1000
#定义初始时间40
内部主(空)
{
INTA;
浮球b;
//系统总投入

对于(a=(初始时间+10);a=10)和(a=600)和(a=1200)和(a=2700)和(a=3300)和(aI在第一个for循环后打印'b'的值,在这里它非常大。我指的是c程序。我也知道c是什么,我以前使用过它多次-我只是被困在这个问题上。不是每个人都是专家。你必须开始一些忽略编译语言和解释语言之间的差异需要你停止的工作编写程序并开始学习和理解这些概念。建议?如果值未初始化,程序将异常运行,因此访问未初始化的值是一个主要问题,建议非常弱,我想说
你必须初始化它
。但是回答一篇声称
c-script
如果不起作用,则此操作不应干扰像c这样的真正编程语言。此外,您可能建议使用编译器警告,因为这种问题可能会发生在任何人身上,除非他们使用编译器警告并在编译完成之前得到通知。@iharob还有其他选择,例如从右侧删除
b
每个赋值的一方,并确保每个路径中都有一个赋值。然而,在这种情况下,最简单和最安全的更改是初始化它,这就是我的建议。我不是说,我的意思是访问未初始化的值是一个问题,它如何初始化并不重要。