我正在制作一个函数,该函数将从两个样本的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.3
,sd1 = 0.5
,n1 = 22
; mean2 = 1.6
,sd2 = 0.3
,n2 = 24
的值应为-2.44,但是,将其插入返回-1后跟#IND00
。我想我的问题是,尽管我是C语言的初学者,但我还是在误解了如何正确使用fgets
或数据类型有些奇怪,因此我无法发现任何明显的错误。 / p>
答案 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)));