2010-09-29 4 views
1

Je suis nouveau en programmation, nouveau sur ce site aussi, donc bonjour ... J'essaye d'obtenir un total cumulé pour les entiers de 1 à 10, mais je deviens charabia réponses et je ne peux tout simplement pas comprendre pourquoi. Pour tenter de savoir ce qui se passait mal, j'ai ajouté leProblème de total cumulé en C

printf(" running total is %d\n", sum); 

ligne à la boucle while, mais juste eu plus de la même non-sens ... s'il vous plaît voir http://codepad.org/UxEw6pFU les résultats ....

Je suis sûr que cela a une solution évidente à l'aveuglette ... Je suis juste trop bête pour le voir! quelqu'un sait ce que je fais mal?

#include <stdio.h> 


int main(void)  { 

    int count,sum,square;   
    int upto=10;     

    count = 0;     
    square = 0;     

    while (++count < upto) { 
     square = count * count; 
     printf("square of %d is %d",count,square);  
     sum =square + sum; 
     printf(" running total is %d\n", sum); 
    } 

    printf("overall total of squares of integers 1 thru 10 is %d\n", sum);   

    return 0; 
} 
+1

Bienvenue sur StackOverflow. À l'avenir, veuillez sélectionner votre code et cliquez sur le bouton '101010' pour le mettre en forme correctement. –

+0

s'il vous plaît choisir une réponse comme la «correcte» en cliquant sur la grosse coche sur la gauche de celui-ci.Il est considéré comme mauvaise étiquette de ne pas le faire – pm100

+0

non - je ne lui dis pas. Je lui disais quoi faire une fois qu'il était satisfait. Je ne connaissais pas le tout accepter quand j'ai posté - et je me suis fait griller plus tard. – pm100

Répondre

9

Vous devez initialiser somme à 0.

EDIT Comme d'autres l'ont dit après le fait, la raison pour laquelle vous voyez des ordures est parce que sum n'est pas initialisé et contient tout ce qui est en mémoire . Cela peut être n'importe quoi, et votre utilisation de sum = square + sum va ajouter carré à la valeur non initialisée.

+3

@blaxjax: En pur C, local les variables ne sont pas automatiquement initialisées à quoi que ce soit en particulier. Dans ce cas, «somme» était égal à ce qui se trouvait dans cet endroit en mémoire, ce qui n'est pas ce que vous vouliez. –

+0

@quixoto - merci d'ajouter à ma réponse et de l'améliorer plutôt que de le dupliquer. –

+0

Merci SB, et tout le monde qui a répondu. SB, j'ai coché votre réponse parce que c'était la première, et parce que ça a marché. La réponse était évidente, comme je l'ai deviné, mais cela aurait pu me prendre une semaine pour faire le travail moi-même ..... la prochaine fois, je ne ferai pas cette erreur, mais une autre à la place! – blaxjax

1

Vous n'êtes jamais la valeur de cours d'initialisation sum.

La première fois que votre code fonctionne

sum = square + sum; 

La valeur de sum (sur le côté droit) est un nombre arbitraire parce qu'il n'a pas été initialisé. Par conséquent, la valeur résultante de sum (sur le côté gauche) est ce nombre arbitraire plus square.

Ajoutez simplement une instruction sum = 0 comme vous l'avez déjà pour count et square.

0

somme n'est pas initialisé

1

Dès le départ, vous n'initialisez pas « somme » à quoi que ce soit.

edit: Une version nettoyée, bien que selon le compilateur, vous devrez peut-être appliquer le mode C99, sinon les anciens compilateurs pourraient ne pas supporter les déclarations initiales dans la boucle for.

#include <stdio.h> 

int main() 
{ 

    const int COUNT_MAX = 10; 
    int sum = 0; 

    for (int i = 1; i <= COUNT_MAX; ++i) 
    { 
     sum += i*i; 
    } 

    printf("The sum of squares from 1 to 10 is: %d\n", sum); 

    return 0; 
} 
+0

+1: Je pensais écrire une version "plus propre", mais ensuite j'ai vu ça. (a) Déclaration et initialisation d'une variable par ligne. (b) La boucle "idiomatique" 'for' est beaucoup plus facile à lire. – Arun

0

Vous devriez faire:

sum=0; 

et enlever

square=0;