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

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