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.