如何从文件中读取文本并将其输入到变量
how to read text from a file and input it to a variable
我是土木工程专业的学生,是的,当然不是编程相关的专业。我正在制作一个用于计算 "soil strength" 的应用程序,但无法使用 excel.
进行计算
所以我已经为我的应用制定了算法,我想尝试通过读取 .txt 文件将浮点值放入浮点数组中。
例如,这是我的 .txt 文件的内容:
12
12.5
16.3
13.4
17.4
14.3
25.6
25.2
12.5
63.5
只是一个简单的 .txt 文件,我想将每个数字分配到一个数组中。但是,我不知道如何。该 .txt 文件中的数字数量不确定,它可能包含 20 个数字、36 个数字等。我已经阅读了如何从一本书中读取文件,但它无法读取数字数量不确定的整个文件
请帮我解决这个问题,让我所有的朋友都能轻松完成任务。谢谢!
希望对您有所帮助。
#include <stdio.h>
#define MAX_LEN 10000
#define FILE_NAME "your-file-path"
int main()
{
double array[MAX_LEN];
FILE *fp= fopen(FILE_NAME, "r");
if(!fp)
{
perror("Can Not Open The File");
return 1;
}
int i = 0;
while (fscanf(fp, "%lf", &array[i++]) != EOF)
{
if(i == MAX_LEN)
{
printf("The file is huge, you should define larger array");
break;
}
}
int j = 0;
while(j < i)
printf("%d: %lf\n", j, array[j++]);
}
您可以使用 scanf 读取每个数字(直到到达文件末尾)。您需要动态内存分配,因为您事先不知道文件中的浮点数。下面的示例打开一个名为 "filename" 的文件并完全按照您的要求执行操作。
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE *in;
size_t count = 0;
size_t array_size = 16;
double *array;
in = fopen("filename", "r");
if (!in)
return -1;
array = malloc(array_size * sizeof(*array));
if (!array)
{
fclose(in);
return -1;
}
while (fscanf(in, "%lf", array + count) == 1)
{
count += 1;
if (count == array_size)
{
double *temp;
array_size *= 2;
temp = realloc(array, array_size);
if (!temp)
{
free(array);
fclose(in);
return -1;
}
array = temp;
}
}
free(array);
fclose(in);
return 0;
}
问题很简单。由于您正在阅读一些未知数量的 float
,因此请为合理预期的数量分配内存。将文件中的浮点数读入数组,直到达到该限制,然后根据需要重新分配额外的 space。
#include <stdio.h>
#include <stdlib.h>
#define NFLTS 64
int main (int argc, char **argv) {
float *fltarr = NULL;
size_t i = 0, nflts = NFLTS;
FILE *fp = argc > 1 ? fopen (argv[1], "r") : stdin;
if (!fp) { /* validate file open for reading */
fprintf (stderr, "error: file open failed '%s'.\n", argv[1]);
return 1;
}
/* allocate NFLTS floats initially */
if (!(fltarr = malloc (NFLTS * sizeof *fltarr))) {
fprintf (stderr, "error: virtual memory exhausted.\n");
return 1;
}
/* for each float in file */
while (fscanf (fp, "%f", &fltarr[i]) == 1) {
if (i + 1 == nflts) { /* check if limit reached - realloc */
void *tmp = realloc (fltarr, sizeof *fltarr * nflts * 2);
if (!tmp) { /* if realloc fails, use existing data */
fprintf (stderr, "error: realloc memory exhausted.\n");
break;
}
fltarr = tmp; /* assign realloced block to fltarr */
nflts *= 2; /* update nflts */
}
i++;
}
if (fp != stdin) fclose (fp); /* close input if not stdin */
nflts = i; /* save number of floats in array as nflts */
for (i = 0; i < nflts; i++) /* output floats in fltarr */
printf (" fltarr[%2zu] : %.2f\n", i, fltarr[i]);
free (fltarr); /* free allocated memory */
return 0;
}
例子Use/Output
$ ./bin/array_fltdyn dat/fltarr.txt
fltarr[ 0] : 12.00
fltarr[ 1] : 12.50
fltarr[ 2] : 16.30
fltarr[ 3] : 13.40
fltarr[ 4] : 17.40
fltarr[ 5] : 14.30
fltarr[ 6] : 25.60
fltarr[ 7] : 25.20
fltarr[ 8] : 12.50
fltarr[ 9] : 63.50
(注意:scanf
系列函数很少被推荐用于读取数据行。这是一个例外,您可以保证在使用它们的每一行上使用固定格式。)
仔细阅读,如果您还有其他问题,请告诉我。 (B.S.Aero `89 TAMU)
我是土木工程专业的学生,是的,当然不是编程相关的专业。我正在制作一个用于计算 "soil strength" 的应用程序,但无法使用 excel.
进行计算所以我已经为我的应用制定了算法,我想尝试通过读取 .txt 文件将浮点值放入浮点数组中。
例如,这是我的 .txt 文件的内容:
12
12.5
16.3
13.4
17.4
14.3
25.6
25.2
12.5
63.5
只是一个简单的 .txt 文件,我想将每个数字分配到一个数组中。但是,我不知道如何。该 .txt 文件中的数字数量不确定,它可能包含 20 个数字、36 个数字等。我已经阅读了如何从一本书中读取文件,但它无法读取数字数量不确定的整个文件
请帮我解决这个问题,让我所有的朋友都能轻松完成任务。谢谢!
希望对您有所帮助。
#include <stdio.h>
#define MAX_LEN 10000
#define FILE_NAME "your-file-path"
int main()
{
double array[MAX_LEN];
FILE *fp= fopen(FILE_NAME, "r");
if(!fp)
{
perror("Can Not Open The File");
return 1;
}
int i = 0;
while (fscanf(fp, "%lf", &array[i++]) != EOF)
{
if(i == MAX_LEN)
{
printf("The file is huge, you should define larger array");
break;
}
}
int j = 0;
while(j < i)
printf("%d: %lf\n", j, array[j++]);
}
您可以使用 scanf 读取每个数字(直到到达文件末尾)。您需要动态内存分配,因为您事先不知道文件中的浮点数。下面的示例打开一个名为 "filename" 的文件并完全按照您的要求执行操作。
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE *in;
size_t count = 0;
size_t array_size = 16;
double *array;
in = fopen("filename", "r");
if (!in)
return -1;
array = malloc(array_size * sizeof(*array));
if (!array)
{
fclose(in);
return -1;
}
while (fscanf(in, "%lf", array + count) == 1)
{
count += 1;
if (count == array_size)
{
double *temp;
array_size *= 2;
temp = realloc(array, array_size);
if (!temp)
{
free(array);
fclose(in);
return -1;
}
array = temp;
}
}
free(array);
fclose(in);
return 0;
}
问题很简单。由于您正在阅读一些未知数量的 float
,因此请为合理预期的数量分配内存。将文件中的浮点数读入数组,直到达到该限制,然后根据需要重新分配额外的 space。
#include <stdio.h>
#include <stdlib.h>
#define NFLTS 64
int main (int argc, char **argv) {
float *fltarr = NULL;
size_t i = 0, nflts = NFLTS;
FILE *fp = argc > 1 ? fopen (argv[1], "r") : stdin;
if (!fp) { /* validate file open for reading */
fprintf (stderr, "error: file open failed '%s'.\n", argv[1]);
return 1;
}
/* allocate NFLTS floats initially */
if (!(fltarr = malloc (NFLTS * sizeof *fltarr))) {
fprintf (stderr, "error: virtual memory exhausted.\n");
return 1;
}
/* for each float in file */
while (fscanf (fp, "%f", &fltarr[i]) == 1) {
if (i + 1 == nflts) { /* check if limit reached - realloc */
void *tmp = realloc (fltarr, sizeof *fltarr * nflts * 2);
if (!tmp) { /* if realloc fails, use existing data */
fprintf (stderr, "error: realloc memory exhausted.\n");
break;
}
fltarr = tmp; /* assign realloced block to fltarr */
nflts *= 2; /* update nflts */
}
i++;
}
if (fp != stdin) fclose (fp); /* close input if not stdin */
nflts = i; /* save number of floats in array as nflts */
for (i = 0; i < nflts; i++) /* output floats in fltarr */
printf (" fltarr[%2zu] : %.2f\n", i, fltarr[i]);
free (fltarr); /* free allocated memory */
return 0;
}
例子Use/Output
$ ./bin/array_fltdyn dat/fltarr.txt
fltarr[ 0] : 12.00
fltarr[ 1] : 12.50
fltarr[ 2] : 16.30
fltarr[ 3] : 13.40
fltarr[ 4] : 17.40
fltarr[ 5] : 14.30
fltarr[ 6] : 25.60
fltarr[ 7] : 25.20
fltarr[ 8] : 12.50
fltarr[ 9] : 63.50
(注意:scanf
系列函数很少被推荐用于读取数据行。这是一个例外,您可以保证在使用它们的每一行上使用固定格式。)
仔细阅读,如果您还有其他问题,请告诉我。 (B.S.Aero `89 TAMU)