• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

ddxtreme

Qual o erro?

13 mensagens neste tópico

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;
            }
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

!! Não pode. O código não deve estar como é suposto. Mostra essa versão.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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;
            }
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não é  if ((c=="s")||(c=="S")) é if(c=='s' || c=='S');

"s" é uma char* e 's' é um char.

É diferente.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

: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:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

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