第二周

基础作业
请在第一周作业的基础上,继续完成:找出给定的文件中数组的最大值及其对应的最小下标(下标从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 ");
exit(0);
}

     while(	fscanf(fp, "%d%c",&num [i] ,&op) != EOF){
	        printf("%d%c",num [i] ,op);
            i++;
    } 

	printf("
");

	 int index =0;
	 for(j=0;j<i;j++){
	 	      if(num [j]>num [index])
              index =j;
	 }
	 printf("%d %d",num [index],index); 
	   
	   fprintf(fp,"
");   
       fprintf(fp,"最大值:%d 下标:%d",num [index],index);

if(fclose(fp)){
printf("Can not close the file ");
exit(0);
}
return 0;
}

一、运行结果图

二、思路
1.使用“r+”的形式打开文本文件进行读/写

2.把文本文档里的数值赋给数组

3.进行比较,输出最大值及下标

4.写入文本文档

三、遇到的问题
1.书上的例子使用for语句进行输出,但是当你并不知道文档里有多少数值时,无法写出条件表达式。所以第一想法是使用while语句,问题又来了,我并不知道while语句中的表达式应该怎么写。
解决过程:看到打开文件进行的读写操作的 if 语句,便想写条差不多的,只不过其中的fopen()变成了fscanf(),却不知道怎么写后面==后的东西,

                    看到书上311页有一段话(文件中设置了文件结束符EOF.......读文件时通过判断从文件中读入的字符是否为EOF来决定循环是否继续),便也觉得和NULL差不多,也在网上查了查,稀里糊涂也对了。

这是使用for语句,文档数值和for语句条件表达式不一样时运行的结果

四、评价
1.耗时长(不知道用了多久)
2.不是很明白文件

原文地址:https://www.cnblogs.com/xu23/p/10499404.html