Continuando, o programa já mostra a leitura de um arquivo que foi criado com a cópia dos nomes contidos na matriz de string char linha [ ] [ ];
pressionando qualquer tecla, vem a próxima tela do programa pedindo para que se escolha o número de uma linha contido no arquivo, sendo números entre 1 e 9, ou escolhendo -1 para encerramento da execução.
Tá claro que o programa não aceitará números inferior ou maior que os parâmetros estabelecidos, caracteres também não são aceitos.
Escolhendo uma linha válida o programa mostra o conteúdo da linha e o total de posições do nome contido.
Após pressionar enter, o programa já pede de onde, isto é de qual posição pretende se fazer a leitura, também à restrições aqui, o programa é inteligente, sabe calcular o tamanho da string da linha, e não aceita posições acima do seu tamanho e nem menor que "0".
Feito tudo corretamente, o programa mostra a leitura da linha conforme foi solicitado nas aplicações dos parâmetros escolhidos e se encerra agradecendo a utilização.
Veja algumas imagens do programa em execução:
#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <conio.h>
void Janela5(){
int lin, col;
for ( lin = 0; lin <= 36; lin++ ){
for ( col = 0; col <= 80; col++ ){
gotoxy( col, lin );
if ( lin == 2 ){textbackground(LIGHTRED);printf( " ");}
if ( col == 1 ){textbackground(LIGHTRED);printf(" ");}
if ( lin == 36 ){textbackground(LIGHTRED);}
if ( col == 80 ){textbackground(LIGHTRED);printf(" ");}
}
}textbackground(BLACK);
}
void inicio( ){ system ("title FSEEK - POSICIONANDO UM PONTEIRO PARA ARQUIVO II");
int i;do{Janela5();
textcolor(LIGHTRED);gotoxy(20,7);printf("FSEEK - POSICIONANDO UM PONTEIRO PARA ARQUIVO II");
textcolor(YELLOW);gotoxy(25,10);printf("Programa desenvolvido por:");
textcolor(LIGHTCYAN);gotoxy(52,10);printf("Samuel Lima");
textcolor(LIGHTGREEN);gotoxy(34,12);printf("sa_sp10@hotmail.com");
textcolor(LIGHTBLUE);gotoxy(24,14);printf("DIGITE PARA SAIR OU PARA CONTINUAR ");
textcolor(LIGHTRED);gotoxy(32,14);printf("1");textcolor(LIGHTRED);gotoxy(47,14);printf("2");
gotoxy(41,16);
scanf("%d",&i);fflush(stdin);
if( i == 1 ){textcolor(LIGHTRED);gotoxy(35,20);printf ("MUITO OBRIGADO");Sleep(1800);exit(0);}
if( i == 2 ){system("cls"); return;}
else {textcolor(LIGHTRED);gotoxy(37,20);printf ("\aOPÇÃO ERRADA");Sleep(1800);system("cls");}
}
while(i);
}
int Imp_Matr ( char *num ){
unsigned int i;
for( i = 0; i < strlen ( num ); i++ ){
if ( num [ i ] < '0' || num [ i ] > '9' )
return 0;
}
return 1;
}
int main(){
inicio( );int ini, fim, i = 0, n; int result;
FILE *arq, *f;char num [ 3 ];
char linha [ 11 ] [ 17 ] = { {"João Henrique"},
{"Amanda Santos"},
{"Patrícia Gomes"},
{"Ricardo Souza"},
{"Cláudia Ferraz"},
{"Rafaela Pimentel"},
{"Samuel Júnior"},
{"Sandro Rúbens"},
{"Lúcia Paola"},
{"Luíz Manolo"},
{"Estér Guimarães"}};
char lin_ha [ 20 ];char li_n_ha [ 20 ];
if ( ( arq = fopen ("Arquivo.bin", "w+b" ) ) == NULL ){
printf("Houve um erro na criação do arquivo");
getche();exit(1);
}
if ( fwrite ( &linha, sizeof ( linha ), 1, arq ) != 1 ){
printf("Houve um erro na gravação do arquivo");
getche();exit(1);
}
fclose(arq);
if ( ( arq = fopen("Arquivo.bin", "r+b" ) ) == NULL ){
printf("Houve um erro na abertura do arquivo");
getche();exit(1);
}
if ( fread ( &linha , sizeof ( linha ), 1, arq ) != 1 ){
printf("Houve um erro na leitura do arquivo");
getche();exit(1);
}
system("cls");Janela5();
textcolor(LIGHTRED);gotoxy(19,3);printf("FSEEK - POSICIONANDO UM PONTEIRO PARA ARQUIVO II");
textcolor(LIGHTBLUE);gotoxy(26,5);printf( "Abaixo a leitura do arquivo aberto" );
textcolor(YELLOW);
for( i = 0; i <= 10; i++ ){
gotoxy(35,i + 7);
printf("%s", linha [ i ] );
}
Sleep(1000);textcolor(LIGHTGREEN);
gotoxy(32,22);printf("PRESSIONE QUALQUER TECLA");getche();
do{system("cls");Janela5();
textcolor(LIGHTRED);gotoxy(23,3);printf("POSICIONANDO UM PONTEIRO PARA ARQUIVO II");
textcolor(LIGHTBLUE);gotoxy(15,5);printf("Escolha um número entre [ 1 e 9 ] ou [ -1 Para Sair ] " );
textcolor(YELLOW);gets ( num );fflush(stdin);
n = atoi (num);
if ( n < -1 || n > 9 ){
textcolor(LIGHTRED);gotoxy(25,10);
printf("\aNúmero Acima de 0 e menor que 10" );
getche();continue;
}
if( n == -1 ){
textcolor(LIGHTRED);gotoxy(35,21);printf("MUITO OBRIGADO");
Sleep(1800);exit(0);
}
if ( Imp_Matr ( num ) == 0 || n == 0){
textcolor(LIGHTGREEN);gotoxy(25,7);printf("\aVoce digitou: %s", num );
Sleep(1800);textcolor(LIGHTGREEN);gotoxy(25,9); printf("\a%s Nao e Valido !", num );
Sleep(1800);continue;//system("cls");
}
while ( feof ( arq ) == 0 ){
fgets ( linha [ i ], 80, arq );
strcpy ( lin_ha, linha [ n ] );
++i;
}fclose(arq);
textcolor(LIGHTBLUE);gotoxy(15,7);printf("Veja abaixo o que tá escrito na linha %d do arquivo", n );
textcolor(YELLOW);gotoxy(20,9);
printf(" %s ", linha [ n ] );
textcolor(LIGHTBLUE);printf("Num total de : ");
textcolor(LIGHTRED);printf(" %d ", strlen ( linha [ n ] ) );
textcolor(LIGHTBLUE);printf("Posições ");
getche();
if ( ( f = fopen ("Arquivo.bin", "w+b" ) ) == NULL ){
printf("Houve um erro na criação do arquivo");
getche();exit(1);
}
if ( fwrite ( &lin_ha, sizeof ( lin_ha ), 1, f ) != 1 ){
printf("Houve um erro na gravação do arquivo");
getche();exit(1);
}
fclose(f);
if ( ( f = fopen("Arquivo.bin", "r+b" ) ) == NULL ){
printf("Houve um erro na abertura do arquivo");
getche();exit(1);
}printf("\n" );
if ( fread ( &li_n_ha , sizeof ( lin_ha ), 1, f ) != 1 ){
printf("Houve um erro na leitura do arquivo");
getche();exit(1);
}
do{gotoxy(37,13);printf(" ");
textcolor(LIGHTBLUE);gotoxy(15,11);printf("Digite abaixo de onde pretende visualizar :");
textcolor(LIGHTBLUE);gotoxy(15,13);printf( "Começando na posição : " );
textcolor(LIGHTRED);gotoxy(38,13);scanf("%d", &ini);fflush(stdin);
if ( ini < -1 || ini >= strlen ( linha [ n ] ) ){
textcolor(LIGHTRED);gotoxy(20,16);
printf("\aNúmero Acima da posição 0 e menor que %d ", strlen ( linha [ n ] ) );
getche();gotoxy(20,16);
printf(" ");
continue;
}
do{gotoxy(30,14);printf(" ");
textcolor(LIGHTBLUE);gotoxy(15,14);printf( "Até a posição : " );
gotoxy(31,14);textcolor(LIGHTRED);scanf("%d", &fim);fflush(stdin);
if ( fim < -1 || fim > strlen ( linha [ n ] ) ){
textcolor(LIGHTRED);gotoxy(20,16);
printf("\aNúmero Acima da posição 0 e menor que %d ", strlen ( linha [ n ] ) );
getche();gotoxy(20,16);
printf(" ");
continue;
}
result = fseek ( f, ini, SEEK_SET );
if( result )
perror( "\aArquivo.bin" );
else{
textcolor(LIGHTBLUE);gotoxy(15,16);printf( "O Ponteiro de arquivo foi movido com sucesso" );
textcolor(LIGHTBLUE);gotoxy(15,17);printf( "Para o início na posição ");
textcolor(LIGHTRED);printf( " %d", ini);
textcolor(LIGHTBLUE);printf( " num total de ");
textcolor(LIGHTBLUE);printf( " posições" );
textcolor(LIGHTGREEN);gotoxy(15,19);printf( "Veja o resultado ==> " );
fgets( li_n_ha, fim + 1, f );textcolor(YELLOW);gotoxy(40,19);
printf( " %s", li_n_ha );
textcolor(LIGHTRED);gotoxy(55,17);printf( " %d", strlen ( li_n_ha ) );
}
fclose( f );Sleep(1800);
textcolor(LIGHTRED);gotoxy(36,23);printf ("MUITO OBRIGADO");
getche();exit(0);
}while( 1 );
}while( 1 );
}while( 1 );
}