作者markoo (上行下笑阿..)
看板NCTU-STAT98G
标题0730 程式 从命令提示字元外部输入参数
时间Sat Aug 1 23:16:49 2009
同学, 这程式几个重点 可以细细品味
1. 读文字档用fscanf
(可以一次读一个, 也可以一次读一排 当然也可以一次读完 只是要写很长)
2. 由命令提示字元外部输入参数
3. atoi 与 strcpy 两个函式的用法
4. 结构的指标变数宣告方式
5. 由命令提示字元执行.exe时 记得要把.txt档案放在对应的资料夹下
或者直接"C:\Documents and Settings\Joanne\桌面\0730\Debug\mydata.txt"
给路径指到指定的.txt档
程式如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
FILE *in;
struct data {
int X;
float Y;
double Z;
} *mydata;
/*根据资料型态决定结构内该有的分量
ex:mydata.txt的资料型态为 int, float, double.*/
int main(int argc, char **argv)
{
if (argc!=3)
{
printf("Input error. Try: class12.exe mydata.txt 10\n");
exit(0);
}
/* 这边只是设定希望输入者输入正确的参数,输入错误则结束程式: exit(0);
其实从命令提示字元输入"过多参数" 对程式并无影响 (why?)
只是要求输入格式可以减少输入者犯的错误 */
printf("argv[0] = %s\n",argv[0]);
printf("argv[1] = %s\n",argv[1]);
printf("argv[2] = %s\n",argv[2]);
/* 这边把外部输入的参数一一列出,
此时输入的参数都设定为char, 所以要用%s才能印出 */
int i;
int n;//sample size
char name[250];//file name of .txt
n = atoi(argv[2]);//把数字字串转换成整数型态appoint to integer
mydata = (struct data *) malloc (n*sizeof(struct data));
strcpy(name,argv[1]);
/*根据不同的程式与不同的需求决定自己的程式哪些参数可以由外部输入
这边我们设定把两个参数由 "命令提示字元"做外部输入
这两个参数分别为:n (sample size)和 name (读入档案名称)*/
in = fopen(name,"rt");
i=0;
while (!feof(in))
/* while(!feof(in))的意思是,直到读到(in开启的)档案结尾(end of file)前,
执行下面步骤*/
{
fscanf(in,"%d%f%lf\n",&mydata[i].X,&mydata[i].Y,&mydata[i].Z);
/*这边注意fscanf不读断行空白还有Tab
所以这边要读档案内的数字 只需要把该读近的数字类型依次宣告为
%d(int)%f(float)%lf(double)即可*/
printf("%d\t%f\t%lf\n",mydata[i].X,mydata[i].Y,mydata[i].Z);
i++;
}
fclose(in);
return 0;
}
mydata.txt内容如下:
12 15.6 0.76543
100 25.9 0.89702
50 17.9 0.12540
33 10.7 0.256
34 9.8 0.099
89 15.8 0.568
156 45.5 0.78954
33 12.5 0.1247
24 10.5 0.0998
58 23.2 0.78902
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.166.48.157