Dicas ACH2023


Se você está usando um compilador diferente do utilizado pelo DEV-C++, talvez você encontre o seguinte problema ao compilar arquivos que utilizam .c ou .h: cabeçalhos repetidos ... para todas as funções do arquivo .h . Para corrigir esse erro, substitua no .c principal (por exemplo, testaesparsas.c) a linha #include "esparsas.c" por #include "esparsas.h" .
Dúvidas sobre o uso do scanf:
Para usar o scanf não insira espaços ou "\n" no primeiro parâmetro do comando (exceto se esses espaços forem esperados na entrada).
  int x;
  scanf("%d", &x);  // Maneira correta
Além disso, ao ler caracteres (char) pode ser necessária uma leitura adicional para capturar um "resíduo" do "ENTER" (o "ENTER" é composto por dois caracteres ASCII, dependendo do sistema operacional, um dos caracteres pode ficar como um ruído):
  char caracter, residuo;
  scanf("%c", &caracter);
  scanf("%c", &residuo);  // usado para capturar o resíduo do <ENTER>

Arquivos .c sem função main sempre apresentam dois "erros" na compilação (usando-se Dev-C++):
  [Linker error] undefined reference to `WinMain@16' 
  ld returned 1 exit status 
Estes erros são normais e significam que o arquivo não possui a função main. Não significam um erro no código. O que fazer: compilar o .c que possui função main (que possua um include do arquvio .c que você está desenvolvendo), ou criar uma função main no arquivo que você está tentando compilar (note que alguns programas que faremos em C não devem possuir um main, quando só houver os dois erros de compilação citados acima, isso significa que "não há erros de compilação" além dos "esperados". Então você estará apto para fazer um programa .c com a função main que irá testar esse programa.
Problemas no Dev-C++: se nenhum programa estiver compilando no Dev-C++ (incluindo os do site da disciplina), vá para o menu Tools, na opção Libraries e remova a linha com o caminho (path) das bibliotecas.
Testando seus programas: ao executar um programa dentro do Dev-C++ é possível que o programa execute tão rápido que você não consiga visualizar o que foi impresso na tela. Para conseguir visualizar essas informações você pode inserir o comando system("pause") (mas ele não funciona em todos os sistemas) antes do return 0; como no exemplo a seguir:
#include <stdio.h>

int main(){
    printf("Ola Mundo!\n");
    system("pause");
    return 0;
}
Observação: não submeta EPs com o comando system("pause"). Este comando deve ser usado apenas em seus testes.

Para testar programas que possuem entradas e para se armazenar as saídas abra um prompt do MSDOS (ou console do Linux) e vá ao diretório onde estão todos os arquivos desse programa (incluindo o .exe e o arquivo de entrada), por exemplo "C:\EP1". Lá digite "nomeDoPrograma.exe < entrada1.txt" para testar o programa usando a entrada presente no arquivo entrada1.txt. Para salvar a saída num arquivo saida.txt use o seguinte comando: "nomeDoPrograma.exe < entrada1.txt > saida.txt". Se estiver utilizando um computador na EACH (no qual você não tenha acesso ao prompt), edite o seguinte arquivo.bat para que ele execute o teste desejado: teste.bat.