Below is the code for a function that checks if the line and column \'co-ordinates\' given to it are valid for a file whose pointer is passed to it.
12 hours of
The posted code has two problems.
if(f==0){ /* line was valid */ } does not reset i = 0 before the following while(i<line-1) loop. Because i == line-1 after the previous loop, the second while gets skipped altogether, and reading proceeds from the beginning of the file, instead of line line.
A line is not counted as complete until if(chk=='\n') evaluates to true. This skips over the last line in the file if it is not terminated with a \n newline. In the simplest case, a file with just one (non-empty) line but without a \n terminator will always fail the check_valid test.
While each of those can be easily fixed, a more direct way is to do the checks in a single pass.
while(i < line){
chk = fgetc(ffind);
if(chk == EOF){
printf("\nInvalid %s.\n", (i == line - 1) ? "Column" : "Line"); break;
}
else if(chk == '\n'){
if(i == line - 1){
printf("\nInvalid Column.\n"); break;
}
i++; q = 0;
}
else if(i == line - 1 && q == col - 1){
printf("\nValid Line/Column.\n"); break;
}
else
q++;
}