第二周
基础作业
请在第一周作业的基础上,继续完成:找出给定的文件中数组的最大值及其对应的最小下标(下标从0开始)。并将最大值和对应的最小下标数值写入文件。
输入:
请建立以自己英文名字命名的txt文件,并输入数组元素数值,元素值之间用逗号分隔。
输出
在不删除原有文件内容的情况下,将最大值和对应的最小下标数值写入文件。
include<stdio.h>
include<stdlib.h>
int main(void)
{
FILE *fp;
int num [100];
int i,j;
char op;
if((fp=fopen("c:\新建文件夹\howie.txt","r+"))==NULL)
{
printf("File open error\n");
exit(0);
}
while( fscanf(fp, "%d%c",&num [i] ,&op) != EOF){
printf("%d%c",num [i] ,op);
i++;
}
printf("\n");
int index =0;
for(j=0;j<i;j++){
if(num [j]>num [index])
index =j;
}
printf("%d %d",num [index],index);
fprintf(fp,"\n");
fprintf(fp,"最大值:%d 下标:%d",num [index],index);
if(fclose(fp)){
printf("Can not close the file\n");
exit(0);
}
return 0;
}
一、运行结果图
二、思路
1.使用“r+”的形式打开文本文件进行读/写
2.把文本文档里的数值赋给数组
3.进行比较,输出最大值及下标
4.写入文本文档
三、遇到的问题
1.书上的例子使用for语句进行输出,但是当你并不知道文档里有多少数值时,无法写出条件表达式。所以第一想法是使用while语句,问题又来了,我并不知道while语句中的表达式应该怎么写。
解决过程:看到打开文件进行的读写操作的 if 语句,便想写条差不多的,只不过其中的fopen()变成了fscanf(),却不知道怎么写后面==后的东西,
看到书上311页有一段话(文件中设置了文件结束符EOF.......读文件时通过判断从文件中读入的字符是否为EOF来决定循环是否继续),便也觉得和NULL差不多,也在网上查了查,稀里糊涂也对了。
这是使用for语句,文档数值和for语句条件表达式不一样时运行的结果
四、评价
1.耗时长(不知道用了多久)
2.不是很明白文件