在我的C编程类中,我们应该编写一个能够执行单元转换的程序。这是通过从用户获取文件名和所需的转换,打开文件,识别文件中的转换因子,关闭文件以及显示最终转换来完成的。
以下是教师提供的示例文件长度:
INCH 0.0254
FOOT 0.3048
YARD 0.9144
MILE 1609.344
MM 1e-3
CM 1e-2
METER 1
KM 1e3
AU 149597870700.0
以下是我们需要完全复制的示例输出:
% c11 -Wall units.c -o u
% ./u lengths 12 inch foot
12.00 inch is 1.00 foot.
% ./u lengths 30 inch foot
30.00 inch is 2.50 foot.
% ./u lengths 1 foot inch
1.00 foot is 12.00 inch.
% ./u lengths 1 inch foot
1.00 inch is 0.08 foot.
% ./u lengths 1 au mile
1.00 au is 92955807.27 mile.
% ./u lengths 1000 meter km
1000.00 meter is 1.00 km.
% ./u lengths 1 inch mile
1.00 inch is 0.00 mile.
% ./u
usage: ./u <unitfile> <amount> <from> <to>
% ./u lengthz 1 inch foot
./u: can’t open file lengthz
% ./u lengths 1 inch feet
./u: no such unit "feet"
为了使这个程序有效,我必须包含哪些库?在这种情况下,从用户那里获取输入的最佳方法是什么?
更新 经过一些试验和错误,我能够让我的程序获取命令行参数。以下是我到目前为止的情况:
#include <stdio.h>
#include <stdlib.h>
// Function to take file name from the user input
int main(int argc, char* argv[])
{
if (argc != 5)
{
printf("usage: %s filename\n", argv[0]);
}
else
{
FILE *file = fopen(argv[1], "r");
if (file == 0)
{
printf("can't open file %s\n", argv[1]);
}
else
{
int x;
while ((x = fgetc(file)) != EOF)
{
printf("%c", x);
}
fclose(file);
}
}
}
不幸的是,这只会打印文件的内容,假设程序获得5个命令行参数。