Project-Scylla/KNR C/ex1-16-2.c

83 lines
1.3 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
void store();
void enumerate();
void recall();
int longest = 0;
int posLongest = 0;
int main(){
if((access("storage.txt",F_OK)) == 0){
printf("Error: storage file already exists.");
return 1;
EXIT_FAILURE;
}
store();
enumerate();
recall();
return 0;
}
void store(){
FILE *fp;
fp = fopen("storage.txt", "w");
int i = 0;
for(int c = getchar(); c != EOF; c = getchar()){
fputc(c, fp);
}
fclose(fp);
}
//void enumerate() will step through the file and write the value of the
//longest line encountered to int longest and the position (in terms of line
//number) in the file.
void enumerate(){
int position = 1;
int length = 0;
FILE *fp;
fp = fopen ("storage.txt", "r");
for(int c = fgetc(fp); c != EOF; c = fgetc(fp))
if(c != '\n'){
++length;
continue;
} else if(c == '\n' && length > longest){
longest = length;
length = 0;
posLongest = position;
++position;
} else if (c == '\n' && length < longest){
++position;
length = 0;
}
fclose (fp);
}
void recall (){
FILE *fp;
fp = fopen("storage.txt", "r");
int position = 1;
for(int c = fgetc(fp);; c = fgetc(fp)){
if(position > posLongest)
break;
if(c == '\n'){
++position;
continue;
}
if(position == posLongest){
putchar(c);
}
}
fclose (fp);
remove("storage.txt");
}