我有一个文本文件,其中包含如下排列的数字:
0.200 1.3300 1.2555
0.201 1.3300 1.2620
0.202 1.3300 1.2685
0.203 1.3300 1.2751
0.204 1.3248 1.2817
.
.
.
.
0.899 0.17380 5.7153
0.900 0.17435 5.7227
这个文本文件中有700行。我已经编写了一个C程序,它将从另一个名为"fc.txt"的文本文件中读取行号,然后将该特定行的三个不同编号保存到三个不同的文本文件。程序是:
#include<stdio.h>
int main()
{
int l, i = 0, j;
float a[100][100];
float *p;
FILE *fp;
fp = fopen("fc.txt", "r");
fscanf(fp, "%d", &l);
fclose(fp);
fp = fopen("Au.txt", "r");
for (i = 0; i <= l; i++)
{
for (j = 0; j <= 2; j++)
{
fscanf(fp, "%f", &a[i][j]);
if (i == l)
{
p = &a[i][j];
p++;
}
}
}
fclose(fp);
fp = fopen("i_ri.txt", "w");
fprintf(fp, "%f", *(p - 1));
fclose(fp);
fp = fopen("r_ri.txt", "w");
fprintf(fp, "%f", *(p - 2));
fclose(fp);
fp = fopen("w.txt", "w");
fprintf(fp, "%f", *(p - 3));
fclose(fp);
return 0;
}
当90程序中写入"fc.txt"的行号运行时没有问题。但当行号为100时,一条消息显示
****">*检测到堆栈粉碎*:**./ri终止中止(堆芯转储("******
第120行之后显示:
分段故障(核心转储(
但我需要运行这个程序700行。请提出一些解决这个问题的办法。
我不明白你的目的。我想你想读特定行的数据。
未经测试的演示:
#include<stdio.h>
int main(int argc, char *argv[])
{
char *src;
int nr;
int i;
float a[3];
FILE *fp;
if (argc != 3)
{
printf("Usage: %s <file> <line_number>n", argv[0]);
return -1;
}
src = argv[1];
nr = atoi(argv[2]);
if ((fp = fopen(src, "r")) == NULL)
{
printf("Fail to open file %sn", src);
return -1;
}
for (i = 0; i < nr; i++)
{
if (fscanf(fp, "%f %f %f", a, a + 1, a + 2) != 3)
{
printf("Unknown formatn");
return -1;
}
}
fclose(fp);
// Now float arrays at line nr is stored at a[]
printf("Your expected float array: n");
printf("[1] %fn[2] %fn[3] %fn", a[0], a[1], a[2]);
// Do your own job with a[]
return 0;
}