c语言读取文件然后保存到数组中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言读取文件然后保存到数组中相关的知识,希望对你有一定的参考价值。

问题如下:文件d:\\test.txt
里面的数据:
L 23 24 88 99 2
C 10 11 25 4
R 12 14 25 60 3
要求:用C语言编程逐个读取数据,每一行保存到一个数组中,比如第一行s1[0]=L,s1[1]=23,s1[2]=24....第二行s2[0]=C,s[1]=110......然后输出到屏幕,急切期待大家的帮忙,谢谢!
要求出了点问题,第二行s[1]=10 ,提问的时候输错了,意思你们明白的。。。

1,文件里的数据是不同类型的,既有字符类型的,也有整型的。
2,遇到这种情况,可以按照字符串类型定义数组。例如,char s[100][4];
3,编写程序时,一个一个字符读取,遇到空格就完成了一个数据读取。遇到换行,就换到下一行。
这道题目的关键是把数据类型当作字符串类型处理。
你看下面的程序中,把文本的内容都按照整型数来读取,那么当然有问题!数组s的声明是错误的!
参考技术A

c语言读取文件然后保存到数组中的流程是:

    打开文件

    根据文件格式循环读取数据

    将数据存入数据

    重复2-3,直到文件读取完毕

    关闭文件

下面是示例代码:

#include<stdio.h>
int main()

int s[5][8];
int num[]=0,6,5,6;
int i,j;
FILE *fp;
if((fp=fopen("D:\\\\test.txt","r"))==NULL)
puts("No test.txt");return 0;
for(i=1;i<=3;i++)

for(j=1;j<=num[i];j++)
fscanf(fp,"%d",&s[i][j]);

for(i=1;i<=3;i++)

for(j=1;j<=num[i];j++)

if(j==1)
printf("%c ",s[i][j]);
else
printf("%d ",s[i][j]);

puts("");

fclose(fp);
return 0;

参考技术B 1.用fgets函数可以读取文件中某行的数据,某列数据就必须一个一个读入每行的第几个字符,再存入到一个字符串当中。

2.例程:
#include<stdio.h>
#include<string.h>
void main()

char a[100],b[100],c[100];
int i=3,j=4,k=0; //第三行,第四列
FILE *fp = fopen("data.txt","r");
while(fgets(c,100,fp)) //读入每行数据
i--;
if(i==0) strcpy(a,c); //读到第三行数据
b[k++]=c[j-1]; //把每行的那列字符拷到b中

b[k]=0;
printf("第%d行数据:%s\n",i,a);
printf("第%d列数据:%s\n",j,b);
fclose(fp);
参考技术C #include<stdio.h>
int main()

int s[5][8];
int num[]=0,6,5,6;
int i,j;
FILE *fp;
if((fp=fopen("D:\\test.txt","r"))==NULL)
puts("No test.txt");return 0;
for(i=1;i<=3;i++)

for(j=1;j<=num[i];j++)
fscanf(fp,"%d",&s[i][j]);

for(i=1;i<=3;i++)

for(j=1;j<=num[i];j++)

if(j==1)
printf("%c ",s[i][j]);
else
printf("%d ",s[i][j]);

puts("");

fclose(fp);
return 0;
追问

输出的数据不是我文本里的数据啊

参考技术D #include<stdlib.h>

void main()

FILE *fin;
int x[10],t;
int i,j;

fin=fopen("test.dat","r");
for (i=0;i<10;i++) fscanf(fin,"%d",&x[i]);
fclose(fin);
for (i=0;i<9;i++)
for (j=i+1;j<10;j++)
if (x[i] > x[j]);
for (i=0;i<10;i++) printf("%d ",x[i]);


假定是整型数,用空白分隔,存在文件 test.dat中。
例如:
22 33 11 5 6 8 10 100
99 71
结果是:
5 6 8 10 11 22 33 71 99 100
另外,团IDC网上有许多产品团购,便宜有口碑

C语言读取1位的BMP图

C语言如何用数组保存1位BMP图的位图数据?8个元素由一个字节保存 不会读取- -
要不要用到BMP图的颜色表?
然后如何显示出来?打算用putpixel函数画点....不过总不成功
求解

位深为1的bmp图,一般是有要有颜色表的,没有时用黑白色代替。
数据保存是1位为一个像素点。
要使用左移位右移位运算。
比如读出一个字节
a
byte p = (a>>7);//就是第一个像素点的颜色索引。再颜色表中找出对应的颜色就行了。
p=((a<<1)>>6);//这就是第二个像素点了.
同理可以得到其他的像素点追问

不用颜色索引可以的吗?..反正就黑白两种色
如果用二维数组保存可以直接用fread保存到一个二维数组中吗?
数组的大小为 宽*高/64?..

追答

可以,但
位图是数据的宽跟像素的宽不一定相等的。
位图中定义了数据的宽必须是4个字节的倍数,一行的像素所用的字节数不是4的倍数时要在后面补齐为4的倍数
比如 ,你的1位深的图,假设像素为24*100。
那么数据是这样的 1位深是用位来表示一个像素的 ,一行是24个像素,那么就是用3个字节字节就可以表示了 ,但由于需要不齐,那么就是 4个字节,32位,
位图数据的大小为4*100个字节,而不是3*100个字节

参考技术A int x,y,color;
x=15;y=15;
color = random(getmaxcolor() + 1);  
putpixel(x, y, color);
注:这里color由系统定义,如果你想要自定义color,需要用到RGB函数时行分量转换。
例如:color=R+256G+256*256B
如果RGB=(1,2,3)
那么:color=1+256*2+256*256*3追问

x y为什么是15?
还有....怎样画出一幅图?
这里只画了一个点

追答

(x,y)=(15,15)我只是举例随便画一个点告诉你color的用法。
如果你想画一张BMP图,在纯C语言中还真不是一件简单的任务:
1、学会BMP文件头部信息,从文件头部信息知道BMP图片内容信息,然后读入数组;
2、如果BMP是灰度图,那么一个字节表示一个像素;如果是真彩色,那么三个字节表示一个像素;
3、用一个循环将每个点putpixel。
下面给出一个范例,用putimage实现:
#include "stdio.h"
#include "dir.h"
#include "dos.h"
#include "graphics.h"
char *malloc();/*malloc转换*/
char bmp_to_dat(char *bmp,char *dat)
/*将16色BMP文件转换为可以用putimage输出的格式,bmp为原BMP文件,dat为转化文件*/
unsigned char c[8],scan_times,scan_pixs;
unsigned char workpos;int i,j,k,n,nowpos,iw,ih;
static int color[16]=0,4,2,6,1,5,3,7,8,12,10,14,9,13,11,15;
unsigned char workline[640],scanline[640];
FILE *fp,*targetfp;
union
unsigned char value;
struct

unsigned cl:4;
unsigned ch:4;
color;
mycolor;
if((fp=fopen(bmp,"rb"))==NULL)return(0);
targetfp=fopen(dat,"wb");
fseek(fp,18,SEEK_SET);
iw=0;ih=0;
fread(&iw,4,1,fp); /*读图像宽度*/
fread(&ih,4,1,fp); /*读图像高度*/
if(iw==0&&ih==0&&iw>640&&ih>480)
fclose(fp);fclose(targetfp);return(0);
iw--;ih--; /*∵putimage中的长宽比实际数值少1*/
scan_times=iw/8+1; /*行处理单位数*/
scan_pixs=scan_times*4; /*行像素字节数∵1单位=4字节*/
fputc(iw%256,targetfp); /*填充信息头:长、宽部分*/
fputc(iw/256,targetfp);
fputc(ih%256,targetfp);
fputc(ih/256,targetfp);
fseek(fp,-scan_pixs,SEEK_END);
for(j=0;j<=ih;j++)

参考技术B /* 单色BMP图形文件显示 */

#include "graphics.h"
#include<stdio.h>
#include<conio.h>
/* BMP 文件头部结构 */
struct header

unsigned int bfType;
long bfSize;
unsigned int bfReserved1;
unsigned int bfReserved2;
long bfoffBits;
;

struct tinfoheader

long biSize;
long biWidth;
long biHeight;
unsigned int biPlanes;
unsigned int biBitCount;
long biCompression;
long biSizeImage;
long biXPelsPerMeter;
long biYPelsPerMeter;
long biClrUsed;
long biClrImportant;
;
struct header HEADER;
struct tinfoheader INFO;

unsigned char dgbuff[10000];/* 黑白图形文件大小,不能超过 */

void LoadDZ()

int i,ld;
char filename[20]="1.bmp";/*假设在当前目录下1.bmp文件 */
FILE *fp;

fp=fopen(filename,"rb");
fseek(fp,0,SEEK_SET);
fseek(fp,0,SEEK_END);
ld=ftell(fp);
fclose(fp);
fp=fopen(filename,"rb");
if(fp!=NULL)

fread(&dgbuff,ld,1,fp);
fclose(fp);

fp=fopen(filename,"rt");
if(fp!=NULL)

fread(&HEADER, sizeof(struct header), 1, fp);
fread(&INFO, sizeof(struct tinfoheader), 1, fp);
fclose(fp);



void show(int x,int y,int giColor,int backColor)/* 显示位置、前景色、背景色 */

int i,j,k,l=0,num,m,x0,x1,x2;
unsigned char b,c,c1;

if(HEADER.bfType!=0x4d42 || HEADER.bfReserved1!=0 || INFO.biSizeImage==0
|| INFO.biPlanes!=1 || INFO.biBitCount!=1 || INFO.biCompression!=0)
return;

m=INFO.biWidth/32;
if((INFO.biWidth%32)!=0) m=m+1;
num=HEADER.bfoffBits;

for(l=INFO.biHeight-1; l>=0; l--)

for (i=0;i<m;i++)

x0=i<<5;
for (j=0;j<4;j++)

x1=j<<3;
c=dgbuff[num];
num++;
for (k=7;k>=0;k--)

x2=x0+x1+7-k;
if(x2>=INFO.biWidth) continue;
else

b=1<<k;
c1=c&b;
if(c1==0)

putpixel(x+x2,y+l,giColor);

else
putpixel(x+x2,y+l,backColor);







void main()

int driver,mode;

driver=VGA;mode=VGAHI;
initgraph(&driver,&mode,"");
setfillstyle(SOLID_FILL,WHITE);
bar(0,0,639,479);
LoadDZ();
show(200,200,RED,BLACK);
getch();
closegraph();
参考技术C 你是要一位一位读取BMP文件数据吧?
我的建议是
有数组A[W][L]
fp=fopen(……)
for(i=0;i<w;i++)
for(j=l-1;j>=0;j--)

a[i][j]=fgetc(fp)

看是否能解答

以上是关于c语言读取文件然后保存到数组中的主要内容,如果未能解决你的问题,请参考以下文章

C语言 读取文件到内存

C语言读取1位的BMP图

c语言中如何修改储存在文件的结构体内容中。小文件

C语言如何读取文件?

c语言怎么用文件保存和读取 结构体数组/

如何用C语言统计一个数据文件中的数据个数