基础作业
请在第一周作业的基础上,继续完成:找出给定的文件中数组的最大值及其对应的最小下标(下标从0开始)。并将最大值和对应的最小下标数值写入文件。
输入:
请建立以自己英文名字命名的txt文件,并输入数组元素数值,元素值之间用逗号分隔。
输出
在不删除原有文件内容的情况下,将最大值和对应的最小下标数值写入文件。
实验代码:#include<stdio.h>
include<stdlib.h>
int main (void)
{
FILE * fp;
int i,inmax,n;
char temp;
int a[10];
if((fp=fopen("c:xiesiminxiesimin.txt","a+"))==NULL)
{
printf("File open error!
");
exit(0);
}
fscanf(fp,("%d%c"),&n,&temp);
for(i=0;i<n;i++){
fscanf(fp,("%d%c"),&a[i],&temp);
}
inmax=0;
for(i=1;i<n;i++){
if(a[i]>a[inmax])
inmax=i;
}
printf("%d %d",a[inmax],inmax);
fprintf(fp,"
%d %d
",a[inmax],inmax);
if(fclose(fp)){
printf("Can not close the file!
");
exit(0);
}
return 0;
}
实验思路:1.定义文件指针2.打开文件3.文件处理4.关闭文件(将上次代码与此次结合)
思维导图:
实验所遇问题:1.开始是使用w+进行文本文件的读写,但在网上看到这几种介绍后决定用a+;
2.先在网上查询了这两个的功能:
-
fprintf
功能:传送格式化输出到一个文件中
表头文件:#include<stdio.h>
函数原型:int fprintf(FILE stream, char format[, argument,...]);
FILE 一个FILE型的指针
char 格式化输入函数,和printf里的格式一样
返回值:成功时返回转换的字节数,失败时返回一个负数
fp = fopen("/local/test.c","a+");
fprintf(fp,"%s ",str); -
fscanf
功能:从一个流中执行格式化输入
表头文件:#include<stdio.h>
函数原型:int fscanf(FILE stream, char format[,argument...]);
FILE 一个FILE型的指针
char 格式化输出函数,和scanf里的格式一样
返回值:成功时返回转换的字节数,失败时返回一个负数
fp = fopen("/local/test.c","a+");
fscanf(fp,"%s",str);
但第一次写完可以运行的代码有个很大的问题就是其不是自动从文件读取数据而是变成了需要手动输入数据,才能写入在文本中。原因吗是因为自己将scanf与fprintf进行了连用
3.第二次修改运行代码虽是满足自动读取文本的要求;但缺少temp而无法按要求读取n和数字
4.第三次修改是在同学的提示下(告诉我需要使用temp这个临时文件充当个中间量才能正确读取)才得出正确代码。
5.还有就是输出最后结果没有注意格式(应在前后都加上 )不然输出结果为
说是只有三次修改那是可满足要求运行的修改,在写的过程中修改的就太多了。
实验结果截图: