标准格式化文本读写 fscanf()
纯文本 ANSI 编码格式的文本内容如下:
#include<stdio.h>
int main(){
int ID;
char Name[32]={0};
char College[128]={0};
float Score = 0.0;
FILE *file = fopen("123_ANSI.txt","r");
if(!file){
printf("Fail to open file....\n");
return;
}
printf("学生名单为\n");
while(1){
if(EOF == fscanf(file,"%d %s %s %f",&ID,Name,College,&Score))
break;
printf("学号:%d 姓名:%s 学院:%s 分数%.2f\n",ID,Name,College,Score);
}
fclose(file);
return 0;
}
如果 123.txt
文件编码格式为 unicode utf-8
,需要自己编写编码转换,否则输出易出现乱码错误,因 fopen()
支持两种方式读写文件,一种是 二进制
、另一种是 纯文本(ANSI)
fgets()
按行读文本
2_1_input_data.txt
ANSI编码,内容如下
3,4,5
S,.,.,.
.,X,.,X
.,.,.,D
#include<stdio.h>
#include<stdbool.h>
#include<string.h>
#include<math.h>
#define N 9
int main(){
char map[N][N];
char str[1000];
int i=0,j; // 循环变量
memset(map,0,sizeof(map));
FILE *file = fopen("2_1_input_data.txt","r");
if(!file){
printf("Fail to open file....\n");
return;
}
int array[10];
int count = 0;
char *p;
while(fgets(str, sizeof(str),file) != NULL){
count=count+1;
//str[strlen(str)-1]='\0'; //将换行符\n 换成字符串结束符 \0
if(count==1){
printf("%s",str);
p=strtok(str,",");
j=0;
while(p){
printf("%s\n",p);
array[j]=atoi(p);
p = strtok(NULL, ",");
j=j+1;
}
n=array[0];
m=array[1];
t=array[2];
}
if(count!=1){
printf("%s",str);
p=strtok(str,",");
j=0;
while(p){
printf("%s\n",p);
map[i][j]= *p;
j=j+1;
p = strtok(NULL, ",");
}
i=i+1;
}
}
fclose(file);
printf("...............\n");
printf("n=%d\n",n);
printf("m=%d\n",m);
printf("t=%d\n",t);
for(i=0;i<n;i++){
for(j=0;j<m;j++){
printf("%c ",map[i][j]);
}
printf("\n");
}
return 0;
}