在C

时间:2019-05-28 14:21:32

标签: c

我正在制作一个函数,该函数将从两个样本的t检验中计算出检验统计量并返回其值。但是,我得到的结果不正确。我以前使用scanf并获得了很好的答案,但是它随机停止了工作。因此,我决定切换到fgets,它应该更可靠,但是返回的值不正确。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define VAL 10

double tstat(int x1,int x2,int s1,int s2,int n1,int n2);

int main()
{
    char mean1[VAL] = {0};
    char sd1[VAL] = {0};
    char n1[VAL] = {0};

    char mean2[VAL] = {0};
    char sd2[VAL] = {0};
    char n2[VAL] = {0};

    printf("Enter mean 1: \n");
    fgets(mean1, 10, stdin);
    printf("Enter sd 1: \n");
    fgets(sd1, 10, stdin);
    printf("Enter sample size 1: \n");
    fgets(n1, 10, stdin);

    printf("Enter mean 2: \n");
    fgets(mean2, 10, stdin);
    printf("Enter sd 2: \n");
    fgets(sd2, 10, stdin);
    printf("Enter n2: \n");
    fgets(n2, 10, stdin);

    printf("t value is: %lf", tstat(atoi(mean1),atoi(mean2),atoi(sd1),atoi(sd2),atoi(n1),atoi(n2)));
}

double tstat(int x1,int x2,int s1,int s2,int n1,int n2)
{
    double t = 0;

    t = (x1 - x2)/(sqrt(pow(s1,2)/n1+pow(s2,2)/n2));

    return t;
}

例如,设置mean1 = 1.3sd1 = 0.5n1 = 22mean2 = 1.6sd2 = 0.3n2 = 24的值应为-2.44,但是,将其插入返回-1后跟#IND00。我想我的问题是,尽管我是C语言的初学者,但我还是在误解了如何正确使用fgets或数据类型有些奇怪,因此我无法发现任何明显的错误。 / p>

1 个答案:

答案 0 :(得分:3)

您的变量都是int类型,并且您正在使用atoi将字符串转换为int。但是,您输入的值不是整数,而是浮点值,因此仅会解释每个数字的整数部分。例如,atoi("1.3")的结果为1。

您需要将数据类型更改为double,而使用atof

double tstat(double x1, double x2, double s1, double s2, double n1, double n2)
{
    double t = 0;

    t = (x1 - x2)/(sqrt(pow(s1,2)/n1+pow(s2,2)/n2));

    return t;
}

...

printf("t value is: %lf", tstat(atof(mean1),atof(mean2),atof(sd1),atof(sd2),atof(n1),atof(n2)));