# include <stdio.h>
main()
{
FILE *fp;
int a[10], n, i;
char file_name[20];
printf("enter the file name \n");
scanf("%s", file_name);
printf("enter number of integers \n");
scanf("%d", &n);
fp = fopen(file_name, "rb");
if (fp == NULL) {
printf("Error in opening file \n");
return;
}
fread(a, 1, n, fp);
for (i = 0; i < n; i++) {
printf("%d \n", a[i]);
}
}
输出:
输入文件名/home/n/t1.txt输入整数 3 1540736144 1540736144 1540736144 ..
在文件t1.txt中,我输入了整数{10,20,30,40.50} 并存储在路径/home/n/t1.txt ..
中但是在输出中它显示了一些垃圾地址.. 请指导我如何显示存储在文件中的整数..
答案 0 :(得分:1)
您的文件是文本文件,是人类可读的,可以在文本编辑器中进行编辑。您将其视为二进制文件,它以与存储在内存中相同的方式存储数据。这些文件结构紧凑,阅读速度快,但人类不易编辑或阅读。
C标准提供了处理这些文件类型的不同功能。 fwrite
和fread
用于二进制文件。 fprintf
,fscanf
,fgets
等用于文本文件。
有几种方法可以解析您的输入,而SO则充满了示例。一种廉价的数据读取方式是fscanf
。它忽略了新线条,只是将它们视为空白区域。如果您有更复杂的数据或需要良好的错误处理,这不是读取输入的好方法,但对于您的小例子,它会这样做。您的输入似乎没有按行组织。
下面的代码定义了函数scan_int
,它从文件中读取多个整数。 main
函数显示了如何使用此函数。
#include <stdlib.h>
#include <stdio.h>
/*
* Read at most max integers from a file and store them in arr.
* Return the number of integers read or -1 on file access error.
* Numbers may or may not be separated with commas.
*/
int scan_int(const char *fn, int arr[], int max)
{
FILE *f = fopen(fn, "r");
int n = 0;
if (f == NULL) return -1;
while (n < max && fscanf(f, "%d,", &arr[n]) == 1) n++;
fclose(f);
return n;
}
int main(void)
{
int a[10];
int i, n;
n = scan_int("data.txt", a, 10);
for (i = 0; i < n; i++) {
if (i) printf(", ");
printf("%d", a[i]);
}
printf("\n");
return 0;
}