1
resposta

[Dúvida] Sofrendo pra rodar bem um código

Boa noite, pessoal. Fui fazendo alguns testes aqui e e até tentei escrever um código que funcione, mas por fim não estou conseguindo. Após dar uma olhada no fórum aqui, fiz algo parecido com esse, mas ficou meio bugado no final.

Se alguém puder explicar o por que do "erro" no compilar, agradeço.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

char coisas[20];

void leitura(){
    FILE *f;
    f = fopen("teste.txt", "r");
    
    if(f == 0){
        printf("O arquivo não está na pasta.\n\n");
        exit(1);
    }
    int qtdcoisas;
    fscanf(f, "%d", &qtdcoisas);
    
    srand(time(0));
    int randomico = rand() % qtdcoisas;
    
    for(int i = 0; i <= randomico; i++){
        fscanf(f, "%s", coisas);
    }
    
    fclose(f);
}

int main(){
    leitura();
    for (int i = 0; i <= 100; i++){
        printf("%c", coisas[i]);
    }
}

Dentro do arquivo teste.txt:

3
BANANA
MACACO
CAIXA

Bug no compilador: Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora
1 resposta

Oi, Patrick

"coisas" foi definido com o tamanho de 20

Então no "for" dentro do "main":

  • defina o tamanho até 20
int main(){
    leitura();
    for (int i = 0; i < 20; i++){
        printf("%c", coisas[i]);
    }
    return 0;
}
  • ou, use o tamanho "sizeof()"
int main(){
    leitura();
    for (int i = 0; i < sizeof(coisas); i++){
        printf("%c", coisas[i]);
    }
    return 0;
}
  • ou, imprima direto com "%s"
int main(){
    leitura();
    printf("%s", coisas);
    return 0;
}

Ps.: return 0, informa ao sistema operacional que o programa executou a tarefa com sucesso