Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #57 da revista programar. Faz já o download aqui!

ddxtreme

Qual o erro?

Mensagens Recomendadas

ddxtreme    0
ddxtreme

boas

tenho o seguinte codigo para uma calculadora de divisoes  :) mas quando xega a parte de perguntar se deseja gravar mesmo que eu meta "s" ele passa automaticamente para o final...

#include <iostream>
#include <fstream>
#include <iomanip.h>  
using namespace std;


int main()
{
    double a,b;   
    double resultado;
    char r[1];
    char caminho[100];
    
    cout<<"Introduza o divisivel:"<<endl;
    cin>>a;
    cout<<"Introduza o divisor:"<<endl;
    cin>>b;
    cout<<"Deseja gravar o resultado num ficheiro?"<<endl;
    scanf ("%d",r);
    ofstream ficheiro (caminho);
    resultado = (a/b);
    if ((r=="s")||(r=="S"))          {
                                     cout<<"Indique o caminho do ficheiro: "<<endl;
                                     cin>>caminho;
                                     if (!ficheiro) {
                                                    cout << "Erro ao abrir ou criar ficheiro!" << endl;
                                                    } else {
                                                           ficheiro <<"O resultado da divisao de "<<a<<" com "<<b<<" é "<<resultado<<setprecision(2);
                                                           cout << "O Ficheiro foi escrito com sucesso!" << endl;
                                                           }
                                     }
    else    {
            cout<<"O resultado e: "<< resultado <<setprecision(2)<<endl;
            system("Pause");
            return 0;
            }
}

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pcaldeira    0
pcaldeira

Boas,

este código não é C, é C++, apesar de conter algumas linhas em C... espera que algum moderador mova isto.

Quanto ao erro, eu não percebo muito de C nem C++, mas parece-me que está na leitura após a pergunta "Deseja gravar o resultado num ficheiro?". A linha seguinte scanf ("%d",r); lê input do tipo int, e o que tu pretendes é um char... Tenta mudar o formato para "%c", pões assim:

scanf ("%c",r);

Não tenho a certeza se isto resolve o problema, mas podes tentar e ver se dá.

Cumps

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
ddxtreme    0
ddxtreme

nao funciona na mesma...tipo eu meto o divisivel e o divisor e ele fax a pergunta se deseja guardar num documento e salta logo para o resultado nao dando hipotese de resposta

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
shumy    17
shumy

Tas a comparar ponteiro.

Ou usas strcmp, ou comparas só o caracter.

Tipo "char c;" em vez de "char r[1];". E depois pedes um caracter como input.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
ddxtreme    0
ddxtreme

Tas a comparar ponteiro.

Ou usas strcmp, ou comparas só o caracter.

Tipo "char c;" em vez de "char r[1];". E depois pedes um caracter como input.

Podes exemplificar?

e que eu inda nao estou bem familiarizado com os nomes...so comecei a ver c++ ontem :s

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
shumy    17
shumy

Tenta não misturar as coisas. Se estas a usar cin e cout esquece o scanf e o printf.

Em vez de "char r[1];" define a variavel "char c;"

depois:

cin>>c;

if(c=='s' || c=='S') //faz o resto.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
ddxtreme    0
ddxtreme

tou a usar o DEV-C++

#include <iostream>
#include <fstream>
#include <iomanip.h>  
using namespace std;


int main()
{
    double a,b;   
    double resultado;
    char c;
    char caminho[100];
    
    cout<<"Introduza o divisivel:"<<endl;
    cin>>a;
    cout<<"Introduza o divisor:"<<endl;
    cin>>b;
    cout<<"Deseja gravar o resultado num ficheiro?"<<endl;
    cin>>c;
    ofstream ficheiro (caminho);
    resultado = (a/b);
    if ((c=="s")||(c=="S"))          {
                                     cout<<"Indique o caminho do ficheiro: "<<endl;
                                     cin>>caminho;
                                     if (!ficheiro) {
                                                    cout << "Erro ao abrir ou criar ficheiro!" << endl;
                                                    } else {
                                                           ficheiro <<"O resultado da divisao de "<<a<<" com "<<b<<" é "<<resultado<<setprecision(2);
                                                           cout << "O Ficheiro foi escrito com sucesso!" << endl;
                                                           }
                                     }
    else    {
            cout<<"O resultado e: "<< resultado <<setprecision(2)<<endl;
            system("Pause");
            return 0;
            }
}

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
ddxtreme    0
ddxtreme

:P

Obrigado ja deu...ja agora podias esplicar o que disses-te em relaçao ao "s" ser uma char* e nao um char?

outra kestao se eu quiser fazer com que ao acabar a operaçao o programa volte ao inicio e nao sai...como faço? ja tentei por do, e while mas sem sucesso  :wallbash:

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
shumy    17
shumy

Depende, se for colocado correctamente o "do while" deveria funcionar.

"s" é considerando um array de caracteres, char[20] ou char*, que é praticamente o mesmo. Um array de caracteres ou um ponteiro de caracteres é praticamente o mesmo, só a inicialização é que muda.

's' é apenas um caracter, e como tal não pode ser usado tipo 'str'

um caracter é um char.

Mete lá o while a funcionar

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Saco    0
Saco

Tens que usar uma condição que seja sempre verdadeira no while (por exemplo 2>1) e depois podes definir um caracter qualquer que ao ser inserido faça a aplicação terminar.

Já agora não é divisível, é dividendo.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita a nossa Política de Privacidade