练习:使用 Obj C 和 C,创建一个命令行应用程序,它将:• 获取包含以下格式的笛卡尔坐标的 txt 文件:
(2;9)
(5;6)
...
•(其他技术要求)
问题:处理输入数据的最佳方式是什么?C有fscanf
fgetc
和fgets
等函数。如果我理解正确——我们不能使用 fgets
——因为它是针对字符而不是整数/ float / double 。它会读取每个字符。我们不能使用 fgetc
- 因为它只返回转换为 int 的 1 个字符(流中的下一个字符)。
我有几种方法,但到目前为止没有一种有效。首先 - 使用 for
循环。我想先计算坐标对的数量,然后将 .txt 文件中的数据整理成 x 和 y 坐标的 2 个数组。:
float xCoordinate [MAXSIZE] = {0.0};
float yCoordinate [MAXSIZE] = {0.0};
float x;
float y;
FILE *handle;
handle = fopen ("points.txt", "r");
int ch;
int n;
ch=fgetc(handle)!=EOF; //error. This will read every character including ( ) and ; .
//Maybe I omit this loop condition?
for (n=0; n<=ch ; (fscanf(handle, "(%f;%f)", &x, &y) )
{
xCoordinate [n+1] = x;
yCoordinate [n+1] = y;
}
只要 fscanf 返回两个成功读取的项目并且 n 小于 MAXSIZE,就应该读取文件。
float xCoordinate [MAXSIZE] = {0.0};
float yCoordinate [MAXSIZE] = {0.0};
float x;
float y;
FILE *handle;
int n = 0;
if ( ( handle = fopen ("points.txt", "r")) == NULL)
{
printf ("could not open file\n");
return 1; // or exit(1);
}
while ( ( fscanf(handle, " (%f;%f)", &x, &y) ) == 2)
{
xCoordinate[n] = x;
yCoordinate[n] = y;
n++;
if ( n >= MAXSIZE)
{
break;
}
}
fclose ( handle);
我是一名优秀的程序员,十分优秀!