einstein Posted April 4, 2012 at 10:14 PM Report #447628 Posted April 4, 2012 at 10:14 PM Estou a fazer um programa no qual pretendo calcular um numero levantado a outro numero. A base pode ser um numero real e o espoente tem que ser inteiro positivo. Para ler os numeros do teclado estou a fazer: fegts(buff,1024,stdin); n=sscanf(buff, "%f %d",base, expoente); para verificar se a base e mesmo um numero real basta verificar se n !=0 agora para verificar se o expoente e um inteiro positivo nao estou a conseguir fazer, pensei em utilzar tambem o n mas se colocar um float ele retorna 2 apesar de nao ser um inteiro.
pmg Posted April 4, 2012 at 10:30 PM Report #447636 Posted April 4, 2012 at 10:30 PM O valor da expressao sscanf(buff, "%f %d",base, expoente) pode ser um de quatro: a) 2 base tem um valor de virgula flutuante convertido para float e expoente tem um inteiro, eg com "3.14159 42" b) 1 base tem um valor de virgula flutuante convertido para float e expoente "nao tem valor", eg com "3.14159 einstein" c) 0 nem base nem expoente "tem valor", eg com "forty two" d) EOF nem base nem expoente "tem valor", eg com "" (a string vazia) Para uma melhor gestao de erros, em vez de sscanf(), experimenta strtol() e strtod(). What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
einstein Posted April 4, 2012 at 10:52 PM Author Report #447645 Posted April 4, 2012 at 10:52 PM O valor da expressao sscanf(buff, "%f %d",base, expoente) pode ser um de quatro: a) 2 base tem um valor de virgula flutuante convertido para float e expoente tem um inteiro, eg com "3.14159 42" b) 1 base tem um valor de virgula flutuante convertido para float e expoente "nao tem valor", eg com "3.14159 einstein" c) 0 nem base nem expoente "tem valor", eg com "forty two" d) EOF nem base nem expoente "tem valor", eg com "" (a string vazia) Para uma melhor gestao de erros, em vez de sscanf(), experimenta strtol() e strtod(). Com essas duas funções segundo o que li nao posso verificar apenas posso converter as strings. Eu nao quero converter as strings apenas quero verificar se esta correcto se nao estiver peço outro valor ao utilizador.
pmg Posted April 4, 2012 at 10:58 PM Report #447647 Posted April 4, 2012 at 10:58 PM Ao usar sscanf(buff, "%f %d", &base, &exponente) com o valor de "3.14159 2.71828" o que vai acontecer é que base passa a ter o valor 3.14159 e exponente o valor 2, ficando a string ".71828" por tratar e o valor da expressao é 2 (nota que fizeste a conversao, nao foi apenas teste). USando strtod() e strtol() podes averiguar, depois do strtol() executar, o que ficou no buffer (o ".71828") e tomar uma decisao com base nisso (com o scanf() nao consegues aceder ao resto do buffer). What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
einstein Posted April 5, 2012 at 10:19 AM Author Report #447688 Posted April 5, 2012 at 10:19 AM Ao usar sscanf(buff, "%f %d", &base, &exponente) com o valor de "3.14159 2.71828" o que vai acontecer é que base passa a ter o valor 3.14159 e exponente o valor 2, ficando a string ".71828" por tratar e o valor da expressao é 2 (nota que fizeste a conversao, nao foi apenas teste). USando strtod() e strtol() podes averiguar, depois do strtol() executar, o que ficou no buffer (o ".71828") e tomar uma decisao com base nisso (com o scanf() nao consegues aceder ao resto do buffer). Ah. Já percebi
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now