Logo Hardware.com.br
LomaLomaHum
LomaLomaHum Novo Membro Registrado
5 Mensagens 0 Curtidas

Programa em linguagem C trava na hora da execução.

#1 Por LomaLomaHum 19/01/2022 - 23:36
Esse é um programa que eu estou desenvolvendo, ele não exibe nenhum problema e compila certinho, mas na hora de executar trava.
Alguém sabe o que há de errado com meu código?

[code=c]//2) Dado a sequência de Fibonacci, onde se inicia por 0 e 1 e o próximo valor sempre será a soma dos 2 valores
//anteriores (exemplo: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34...),
//escreva um programa na linguagem que desejar onde, informado um número, ele calcule a sequência de Fibonacci
//e retorne uma mensagem avisando se o número informado pertence ou não a sequência.
//IMPORTANTE:
//Esse número pode ser informado através de qualquer entrada de sua preferência ou pode ser previamente definido
//no código;


#include
#include

int main(void) {
int n1 = 0, n2 = 1, resultado = 0, valor;

for (int i = 0; i < 10; i++) {

n2 = n2 + n1;
resultado = n2;
valor = scanf("Digite um número da sequência Fibonacci: \n");

if (resultado == valor) {
printf("%i é o resultado certo! Parabéns! \n", valor);
}
else {
printf("Não é bem por ai, %i está errado \n", valor);
printf("%i é o correto \n", resultado);
}

}

}[/code]
esquiloesperto
esquiloesper... Cyber Highlander Moderador
7.1K Mensagens 2.2K Curtidas
#2 Por esquiloesper...
20/01/2022 - 01:44
Bom dia, LomaLomaHum
Seja bem-vinda à Comunidade Guia do Hardware boa.gif


O problema é que fez confusão ali entre "scanf" com o "printf":
[code=c]valor = scanf("Digite um número da sequência Fibonacci: \n");[/code]

Você quis imprimir uma frase usando a função scanf, acontece que em C isso não funciona assim.

Correto ficaria:
[code=c]printf("Digite um número da sequência Fibonacci: \n");
scanf("%i", &valor);[/code]


Porém, existe outro problema no seu algoritmo: como n1 permanece sempre em 0 (zero), n2 também não mudará fazendo resultado travar em "1";
Não entendi bem o que quis fazer dessa maneira, mas sugiro corrigir isto também. Afinal, não faz sentido repetir 10 vezes a entrada sendo que o programa já responde que valor seria "1".
LomaLomaHum
LomaLomaHum Novo Membro Registrado
5 Mensagens 0 Curtidas
#3 Por LomaLomaHum
20/01/2022 - 21:35
Obrigada pela ajuda! Fiz o que você disse e mais umas modificações. Porém, na hora de executar da o problema de "Segmentation fault" e ainda na execução aparece umas letras estranhas.
Meu objetivo nesse programa é perguntar para o usuário repetidamente um número na sequência de Fibonacci, (1, 1, 2, 3, 5, 8, 13...) e verificar se está certo.

Eu coloco o número 1 por exemplo:
$ ./"Fibonacci.exe"
Digite um número da sequência de Fibonacci:
1
Segmentation fault


[code=c]#include
#include

int main(void){

int n1 = 0, n2 = 1, resultado = 0, valor = 0;
for (int i = 0; i < 10; i++)
{

resultado = n1 + n2;
n1 = n2;
n2 = resultado;
valor = printf("Digite um número da sequência de Fibonacci: \n");
scanf("%i", valor);
if (valor == n1)
{
printf("Parabéns você acertou! \n");
}
else
{
printf("Ops! Você errou. \n");
}
}
}[/code]

Edit:
Eu acabei de mudar um negócinho aqui e deu certo, finalmente eu consegui!
Muito obrigada pela ajuda!!!! big_green.png
LomaLomaHum
LomaLomaHum Novo Membro Registrado
5 Mensagens 0 Curtidas
#5 Por LomaLomaHum
22/01/2022 - 11:56
Aqui está!

[code=c]#include
#include

int main(void){
int n1 = 0, n2 = 1, resultado = 0, valor = 0;
for (int i = 0; i < 10; i++)
{
valor = printf("\nDigite um numero da sequencia de Fibonacci: \n");
scanf("%i", &valor);
if (valor == n2)
{
printf("Parabens voce acertou! \n");
}
else
{
printf("Ops! voce errou, era %i o numero certo \n", n2);
}
resultado = n1 + n2;
n1 = n2;
n2 = resultado;
}
printf("Acabou!");
}[/code]
esquiloesperto
esquiloesper... Cyber Highlander Moderador
7.1K Mensagens 2.2K Curtidas
#6 Por esquiloesper...
24/01/2022 - 09:03
LomaLomaHum disse:
Aqui está!

isso_ai.png - Legal!

Apenas como sugestão poderia instanciar uma string "primeiro" e alterá-la para "próximo" imediatamente após entrar com o primeiro valor, em substituição a "um" na frase de instrução:
[code=c] char *sequencial = "primeiro";
...
valor = printf("\nDigite o %s numero da sequencia de Fibonacci: \n", sequencial);
sequencial = "proximo";
...[/code]


wink.png
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal