Erro -nan [RESOLVIDO]

1. Erro -nan [RESOLVIDO]

Patrick
Patrick03

(usa Ubuntu)

Enviado em 04/11/2016 - 18:06h

Por que o meu programa está retornando -nan?
#include <stdio.h>
#include <stdlib.h>
#define LIM 300
#include <strings.h>

void soma(float vet[]){
float soma=0;
for(int i=0;i<=300;i++){
soma+=vet[i];
}
printf("\nResultado da soma: %.0f",soma);
}


int main(){
float vet[LIM];
int op;
char parar;
printf("\n\n\tMenu de opções");
printf("\n\n(1)Soma");

printf("\n\nEscolha:");
scanf("%i",&op);
switch(op){
case 1:
printf("\nInforme os valores: ");
for(int i=0;i<=300;i++){
scanf("%f",&vet[i]);
if(strcmp("parar","=")==0){}
}
soma(vet);
break;
}
}



  


2. Re: Erro -nan [RESOLVIDO]

Uilian Ries
uilianries

(usa Linux Mint)

Enviado em 04/11/2016 - 18:42h

Você está acessando um índice inválido.

na iteração com laço for, note q você compara i <= 300, com isso acaba acessando vet[300], sendo q os índices vão de 0 a 299.
--
Uilian Ries
Linux Counter: 521986


3. Re: Erro -nan [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 04/11/2016 - 22:54h

Algumas coisas estranhas no seu código (fora o erro já apontado pelo UilianRies):

- Você define a macro LIM, mas a usa apenas em um lugar. Deveria ter usado em todos os lugares em que fez menção ao limite superior do vetor.

- A comparação strcmp("parar","=")==0 é sempre falsa, porque você compara a string constante "parar" com a string constante "=". Como eu não consegui entender o que você quis fazer com isso, não dá nem para sugerir algum meio de corrigir.


4. Re: Erro -nan

Patrick
Patrick03

(usa Ubuntu)

Enviado em 05/11/2016 - 09:36h

Troquei os valores limites pelo macro LIM:

#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
#define LIM 300

void soma(float vet[]){
float soma=0;
for(int i=0;i<=LIM;i++){
soma+=vet[i];
}
printf("\nResultado da soma: %.0f",soma);
}
int main(){
float vet[LIM];
int op;
char p;
printf("\n\n\tMenu de opções");
printf("\n\n(1)Soma");
printf("\n\n(2)Subtração");
printf("\n\n(3)Multiplicação");
printf("\n\nEscolha:");
scanf("%i",&op);
switch(op){
case 1:
printf("\nInforme os valores: ");
for(int i=0;i<=LIM;i++){
scanf("%c",&p);
scanf("%f",&vet[i]);
if(strcmp(p,'=')==0)
break;
soma(vet);
break;
}
}


Eu queria que o usuário digitasse valores e quando apertasse enter, o programa mostraria o resultado da soma dos mesmo.
if(strcmp(p,'=')==0)
break;

Aqui eu queria comparar um caractere com o "=".
---------------------------------------
Corrija-me quando necessário!

https://bartoi.blogspot.com.br/
---------------------------------------



5. Re: Erro -nan [RESOLVIDO]

Uilian Ries
uilianries

(usa Linux Mint)

Enviado em 06/11/2016 - 22:46h

Aqui eu queria comparar um caractere com o "=".


Você está comparando um caractere apenas, strcmp serve para comparar uma string (um conjunto de caracteres).

Você pode comparar diretamente, utilizando o operadores:

if (p == '=') {
// p é igual a '='
}

--
Uilian Ries
Linux Counter: 521986


6. Re: Erro -nan [RESOLVIDO]

Patrick
Patrick03

(usa Ubuntu)

Enviado em 07/11/2016 - 17:17h

Obrigado aos dois, já entendi e resolvi o problema!

---------------------------------------
Corrija-me quando necessário!

https://bartoi.blogspot.com.br/
---------------------------------------







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts