[quote=ViniGodoy]Ok. Aqui vai a lista dos problemas do seu código:
-
#include <conio.h>
Esse não é um cabeçalho do C++ padrão. O que significa que alguns compiladores podem implementa-lo, outros não. Na verdade, o conio.h foi criado pela Borland e sequer usava C++ padrão em sua estrutura. Dentro dele havia instruções específicas do compilador Borland.
-
cin.ignore(1, EOF);
EOF não é um caractere dentro de um arquivo. EOF é o valor de retorno de uma função. Não faz sentido chamar ignore nesse cara. No caso, você estaria pedindo para ignorar o caractere -1, que convertido para binário e sem sinal seria o caractere de código 255.
Simplesmente apague essa linha.
- strcopy_s
Essa função é exclusiva do Visual. Se você quiser compilar em outros compiladores, deve usar a strcpy padrão. É possível desativar o warning da MS, como explica esse artigo.
Removendo esses erro o seu código já compila no Code::Blocks e no Visual. Ele ainda não está correto, mas já estará funcional.
Um outro problema do seu código é que você mistura as APIs do C com as do C++. Existem funções e classes melhores e mais fáceis que as que você usou na Standard Library. Por exemplo, ao invés da string.h, você poderia fazer um #include <string> E usar a classe std::string.
O código também tem algumas más práticas, herdadas do C, como:
- Declarar todas as variáveis no início do método: Isso aumenta o escopo das variáveis desnecessariamente. O ideal é declarar as variáveis no momento que for utiliza-las;
- Retornar 0 e 1 ao invés de true e false: No C++, você não deve utilizar booleanos de maneira implícita (com int no lugar do tipo boolean);
- Usar #define para declarar constantes: No lugar, declare constantes com const;
Lembre-se que o C é uma linguagem extremamente madura. O compilador C++ deve ser mais antigo que eu e você. Então, é muito difícil que um erro seja do compilador, ou mesmo da IDE. Se está ocorrendo erro, as razões possíveis são:
a) Usar funções específicas de um compilador;
b) Erro no seu código.
Um parêntese no item b: Alguns tipos de erro geram comportamento undefined (indefinido). Um exemplo é o de usar uma variável não inicializada, ou de usar parâmetros incorretos em certas funções. Isso significa que pode ser que num compilador um código funcione perfeitamente com o erro, pois lá, “calha” da variável não inicializada cair numa região válida de memória, mas o problema se manifestará quando você trocar de compilador, ou de máquina. Portanto, caso você esteja rodando perfeitamente numa IDE, mas esteja tendo erros de ponteiro em outra, tenha certeza que isso ocorre por um erro no seu código.
Leia atentamente a documentação, para saber que situações geram o undefined behavior, e evite-as ao máximo possível, pois elas são erros de programação.[/quote]
Obrigado pela dica VinyGodoy. só para constar.
1° Na faculdade uso visual studio então o uso do cin.ingnore(1, EOF) eu ja havia percebido que nã funcionava no C::B
2° o strcpy_s funciona no C::B quando tiro o underline ‘s’ da frente, só coloquei para o MVS para de disparar warnings.
3° se meu professor ver um const ao invés de define ele vai ter um ataque na sala, ele ja é um sr. que viveu tudo (segundo ele) do que ocorreu na informática no Brasil.
4° usei a conio.h porque estava usando o getch para receber o caracter no final do programa quando pergunto se o usuário quer sair ou não, pergunto: Existe alguma função similar que não use a conio.h que poderia substituir no meu código???
Novamente agradeço a ajuda.