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

256mxr

Ler double da linha d comandos???

7 mensagens neste tópico

É assim tou a fazer um programa pa ler argumentos da linha de comando quando executo o programa

#include <iostream>
#include <string>
using namespace std;
       
int main(int argc, char *argv[])
{
if(argc!=3)
	cerr << "Falta argumentos!!!\n";


string hora = argv[2];


if(hora=="AM")
	cout << "O alarme esta memorizado para "<<argv[1] <<endl;
else
	cout << "O alarme esta memorizado para "<<argv[1]+12<< endl;
        
cout << "Introduza a estacao: ";
                     double est;
                     cin >> est;
                     
                     string est1 = "Mega Fm";
                     string est2 = "BestRock Fm";
                     string est3 = "Tsf";
                     
                     if(est==90.6)
                                    cout << est1 << endl;
                     else
		{
		if(est==105.8) cout << est2 << endl;
		else
		{
			if(est==105.3)
			        cout << est3 << endl;
                            	else
				cout <<"Estacao desconhecida!!!\n";
                     	}
    			}
}

O problema é k nao consigo transformar o argv[1] num double...

ponho isto na linha de comandos

"radio 10.30 PM"

para AM funciona mas PM n

Alguem sabe resolver isto??

para converter para inteiro usa-se atoi() e ja esta:...

mas para double n sei s tem alguma funçao parecida????

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

para double tens a função 'atof' (se bem que isso é uma função para C, em C++ deve ser possível de fazer com streams).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Funcionou com atof...Obigado

So mais uma coisa, como se s poe o doeble com 2 casas decimais??

Neste programa se for 10.30 ele imprime apenas 10.3....

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

com o printf acho que podes fazer "%2.2f" (ou alguma coisa parecida), usando o cout não sei.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Para obteres um double com duas casas decimais usas o método precision e o manipulador fixed, tal como no programa de teste que fiz:

#include <iostream>
using namespace std;

int main(int argc, char *argv[])
{
        double teste = 10.30;

        cout << fixed;
        cout.precision(2);
        cout<< teste << endl;

        return 0;
}

que escreve para o ecrã o 10.30 que pretendes. Espero que ajude  ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigadao

Mas é necessario o cout << fixed????

para que serve???

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigadao

Mas é necessario o cout << fixed????

para que serve???

Cada stream no C++ tem um conjunto de flags de formatação que controlam a forma como a informação é formatada. Ao se usar a flag fixed os valores em vírgula flutuante são mostrados usando a notação normal, que é diferente da notação científica (usando para isso a flag scientific) por exemplo. Podemos escolher ou inibir estas flags usando directamente as funções setf() ou unsetf(), ou usando funções especiais chamadas manipuladores que podem ser incluídos numa expressão, tal como em

cout << fixed;

Para se usarem manipuladores que recebem parâmetros, é no entanto obrigatório usar o

#include <iomanip>

Para além disto, por defeito são mostrados seis dígitos de precisão nos valores em vírgula flutuante, por isso usei a função precision() para forçar a ter apenas as duas casas decimais que eram necessárias  :thumbsup: Concluindo, foi necessário usar o manipulador fixed para termos a notação habitual que estamos habituados a usar (3.14159 ou 2.71828 por exemplo  ;)) e a função precision() para ter só duas casas decimais.

Experimenta usar outros manipuladores ou flags de formatação e vê o resultado que obténs (http://www.ccs.neu.edu/home/fell/COM1101/CPPManipulators.html).

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