2017-10-20 10 views
0

J'écris un programme C pour obtenir le numéro de Fibonacci, l'utilisateur doit mettre les 2 premiers nombres et la séquence commence à partir de là. Voici mon code:Fibonacci Séquence avec l'utilisateur entrant les 2 premiers numéros

#include <stdio.h> 
#define MAX_SIZE 100 

int main() 
{ 
    int i, input[MAX_SIZE]; 

    printf("please Enter first 2 digit of the Sequence\n"); 

    scanf("%d, %d" , &input[0], &input[1]); 

    for (i = 2; i < MAX_SIZE; i++) 
    { 
     input[i] = input[i-2] + input[i-1]; 

    printf("%d\n", input[i]); 
    } 

    return 0;  
} 

Mais quand je lance le code avec une entrée 2 et 3, je reçois une sortie comme ça 1499141456, ce qui est évidemment pas la séquence. aidez s'il vous plaît.

+0

est-il mieux maintenant? Je ne comprends pas ce que vous faites en supprimant la virgule, je reçois 2 entrées de l'utilisateur. – user2962635

+0

Vérifiez la valeur renvoyée par 'scanf'. Si ce n'est pas 2, alors il n'a pas lu deux nombres, et ceux qu'il n'a pas lus sont indéfinis (et pourraient être n'importe quoi). Votre format 'scanf' est'% d,% d', ce qui signifie qu'il faut une virgule entre les deux nombres. Si vous n'indiquez pas de virgule lorsque vous y êtes invité, le second numéro ne sera pas analysé. –

Répondre

0

C'est parce que le résultat dans votre code est plus grand que la valeur maximale d'un int peut gérer

Live example here!

De Wikipedia

Le nombre 2147483647 (ou hexadécimal 7FFF, FFFF) est le maximum valeur positive pour un Entier binaire signé 32 bits en informatique. Il est donc la valeur maximale pour les variables déclarées comme entiers (par exemple, comme int) dans de nombreux langages de programmation, et le score maximum possible, argent, etc. pour de nombreux jeux vidéo.

est ici où il va mal

[...] 
433494437 + 701408733 = 1134903170 
701408733 + 1134903170 = 1836311903 
1134903170 + 1836311903 = -1323752223 
1

Lorsque vous sortie de la boucle est égale à iMAX_SIZE

printf("%d\n", input[i]); 

pour imprimer une valeur en dehors des limites du tableau (input[MAX_SIZE]).

+1

'input [size]' n'est pas seulement non initialisé, c'est non alloué -'input' va de '0' à' size-1' – Steve

+0

@Steve, oups, la question a été éditée après cette réponse, mais vous avez raison –

0

mettre une instruction d'impression à l'intérieur pour les croisillons.

or (i = 2; i < MAX_SIZE; i++) 
    { 
    input[i] = input[i-2] + input[i-1]; 
    printf("%d\n", input[i]); 
    } 
+0

okay donc j'ai ajouté la déclaration d'impression à l'intérieur de la boucle je reçois quelque chose comme ceci: 1280719746 -1597741950 -181236350 – user2962635

+0

et supprimer la virgule entre% d,% d dans scanf et le faire comme scanf ("% d% d" , & entrée [0], & entrée [1]); – NeerajMalhotra