Recentemente comecei a estudar um pouco de C na minha faculdade, onde recebi o seguinte exercício:
Faça um programa, em linguagem C, que lê 5 frases, informadas pelo o usuário, de, no máximo, 50 caracteres cada uma e armazene-as em um arquivo. Mas, antes de gravar cada frase no arquivo, é necessário converter todas as suas letras para maiúsculas.-
-O nome do arquivo será fornecido, via teclado, pelo usuário.
-A seguir, feche o arquivo.
-Reabra o arquivo, para leitura, exibindo na tela todas as frases convertidas.
Dicas:
1.A função que converte minúscula para maiúscula é o toupper().
2.Como cada texto pode ter tamanho diferente, será necessário gravar antes de cada frase o tamanho do texto a ser lido. Logo serão necessários dois comandos de gravação e leitura (um para o número inteiro que indica a quantidade de caracteres da frase e outro para a frase com o tamanho lido).
O que eu fiz até agora:
#include <stdio.h>
#include<ctype.h>
#include <stdlib.h>
#include <string.h>
int main()
{
FILE *arquivo;
int i, j, num = 0;
char texto[50], maiuscula[50], nomeArquivo[20], c;
printf("Digite o nome do arquivo a ser criado: ");
scanf_s("%s", &nomeArquivo, 20);
scanf_s("%c", &c, 1);
fflush(stdin);
for (i = 1; i <= 5; i++) {
fopen_s(&arquivo, nomeArquivo, "a");
if (arquivo == NULL) {
fprintf(stderr, "Erro ao abrir o arquivo.\n");
exit(EXIT_FAILURE);
}
else {
printf("Digite a frase numero %i: ", i);
gets_s(texto, 50);
fflush(stdin);
j = 0;
while (texto[j] != '\0' && j < 49) {
maiuscula[j] = toupper(texto[j]);
j++;
}
maiuscula[j] = '\0';
fwrite(&num, sizeof(int), 1, arquivo);
fwrite(maiuscula, sizeof(char), num, arquivo);
fclose(arquivo);
}
}
fopen_s(&arquivo, nomeArquivo, "r");
if (arquivo == NULL) {
fprintf(stderr, "Erro ao abrir o arquivo.\n");
exit(EXIT_FAILURE);
}
fread(&num, sizeof(int), 1, arquivo);
fread(texto, sizeof(char), num, arquivo);
while (!feof(arquivo)) {
printf("\nTexto Lido: %s", texto);
memset(texto, '\0', 50);
fread(&num, sizeof(int), 1, arquivo);
fread(texto, sizeof(char), num, arquivo);
}
fclose(arquivo);
}
Porém o resultado é:
Alguém pode me ajudar e dizer onde estou errando?