Modifique o exemplo da Figura 8.14 para usar as funções fgetc e fputs no lugar de getchar e puts. O programa deve dar ao usuário a opção de ler da entrada-padrão e gravar na saída-padrão ou ler de um arquivo especificado e gravar em um arquivo especificado. Se o usuário escolher a segunda opção, peça a ele que digite os nomes do arquivo para os arquivos de entrada e saída.

Passo 1

Vamos adicionar a opção de entrada/saída de arquivo à fig. 8.14.

Usaremos as seguintes funções:

fputs() - escreve uma matriz de caracteres contendo uma string terminada em nulo no fluxo especificado

fgetc() - extrai o próximo caractere do fluxo especificado, retorna o caractere convertido para um inteiro ou EOF caso o ponteiro do arquivo tenha atingido o final do arquivo

Passo 2

Primeiro, faça a escolha do usuário sobre se programamos deve fazer entrada/saída padrão ou de arquivo.

Certifique-se de ler o caractere de nova linha após a entrada do caractere.

int main()

{

char c;

char sentence[80];

int i = 0;

do

{

puts("0 Standard input/output"

"\n1 File input/output"

"\nChoose:");

c = getchar();

getchar();

} while (c != '0' && c != '1');

...

}

A entrada padrão:

int main()

{

...

if (c == '0')

{

puts("Enter a line of text: ");

while ((c = getchar()) != '\n')

{

sentence[i++] = c;

}

sentence[i] = '\0';

puts("\nThe line entered was:");

puts(sentence);

}

else

{

...

}

...

}

Agora, para abrir arquivos e validá-los, criaremos uma função separada para tornar a função principal mais amigável.

A função levará a mensagem de prompt e o modo de acesso

FILE* openFile(char* message, char* mode)

{

...

}

Passo 3

Solicite a mensagem e leia a string:

FILE* openFile(char* message, char* mode)

{

char c;

int i = 0;

char fileName[20];

puts(message);

while ((c = getchar()) != '\n')

{

fileName[i++] = c;

}

fileName[i] = '\0';

...

}

Por fim, abra o arquivo e valide-o:

FILE* openFile(char* message, char* mode)

{

...

FILE* file = fopen(fileName, mode);

if (file == NULL)

{

puts("File could not be opened.\n");

exit(1);

}

return file;

}

Implemente a função na função main():

int main()

{

...

if (c == '0')

{

...

}

else

{

FILE* inFile = openFile("Enter input file name:",

"r");

FILE* outFile = openFile("Enter output file name:",

"w");

...

}

...

}

Leia os caracteres até que a função fgetc() retorne um EOF:

int main()

{

...

if (c == '0')

{

...

}

else

{

...

while ((c = fgetc(inFile)) != EOF)

{

sentence[i++] = c;

}

sentence[i] = '\0';

...

}

...

}

Escreva as strings no arquivo de saída usando fputs() da seguinte forma:

int main()

{

...

if (c == '0')

{

...

}

else

{

...

fputs("The line entered was:", outFile);

fputs(sentence, outFile);

...

}

...

}

Certifique-se de fechar os arquivos:

int main()

{

...

if (c == '0')

{

...

}

else

{

...

puts("\nFile input/output successful!");

fclose(inFile);

fclose(outFile);

}

return 0;

}

Resposta

Ver o desenvolvimento.