所以我计算了从文件中读取的双精度值的平均值和标准差。
我的文件数据每行有1个数字:文件中的数据如下
1
2
3
4
5
6
7
8
9
10
我的代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(){
FILE *inputfile= fopen("file.dat.txt", "r");
if (inputfile == NULL)
{
printf("Failed to open text file.\n");
exit(1);
}
double i;
double j=1;
double average;
double stdish=0;
double stdreal=0;
double x=0;
double sum=0;
double stdfinal;
while(fscanf(inputfile, "%lf", &i) != EOF){
x=x+1;
sum = sum + i;
j = i*i;
stdreal +=j;
}
average = sum/x;
stdish = (stdreal/x)-(average*average);
stdfinal = sqrt(stdish);
printf("The average is %.4lf\n", average);
printf("The standard deviation is %.4lf\n", stdfinal);
fclose(inputfile);
return 0;
}
我正在通过终端运行这个程序,我的数据文件是file.dat.txt,我试图让用户通过终端输入文本文件,而不是在程序中输入。
像这样:./sdev < file.dat
我不太清楚如何在我的程序中实现这个...
谢谢!
3条答案
按热度按时间txu3uszq1#
写一个带参数的主函数。2这样你就可以在调用可执行文件时从终端传递文件名。
请参见以下路径中的示例程序:http://www.astro.umd.edu/~dcr/Courses/ASTR615/intro_C/node11.html
svujldwt2#
基本上有两种方法,第一种方法是通过
stdin
文件重定向接受输入,这是您提出的方法:然后你的程序应该从
stdin
而不是inputfile
读取。你可以改变所有出现的'inputfileto
stdin, but you could also make
inputfilea shallow copy to the file handle
stdin':请注意,不要关闭
stdin
,它是由操作系统管理的系统文件句柄,而不是NULL
。第二种方法是将文件指定为命令行参数:
然后你的程序必须使用
main
的格式来接受命令行参数,注意程序名本身是作为第一个参数传递的,所以你的文件名应该在'argv[1]'中:这里,您必须在程序中显式地打开和关闭
inputfile
。zpf6vheq3#
你可以用
./sdev file.dat
把参数传递给程序或者如果你想用
echo "file.dat" | ./sdev
读取它,你已经用stdin读取了它,然后你可以扩展到读入多个文件。