2010-11-12 4 views
1
... 

char A,M,Q,Q_1,count; 

int main() 

{ 

    system("cls"); 
    count=8; 
    printf("%d",count); 
    printf("\n\tEnter the Multiplicand(M) : "); 
    scanf("%d",&M); 
    printf("\n\tEnter the Multiplier(Q) : "); 
    scanf("%d",&Q); 
     printf("%d",count); //prints 0??????? 
....... 

} 

Je ne comprends pas comment la valeur des changements 'de comptage' à 0.les variables globales changent-elles automatiquement la valeur?

aide plz ... merci.

Système: win7/VS2008

EDIT: Après avoir un aperçu sur ce que je faisais (grâce à Péter Török), je me suis déplacé à l'affectation 'count' après Scanfs, ce a résolu le problème ... Merci.

+0

Les deux sont importants, mais je (et, je pense, la plupart des gens) préfèrent un espace horizontal (espaces, onglets) à un espace vertical (lignes vides) – pmg

+0

Oh ... et essayer de rester à l'écart des variables globales – pmg

+0

ouais je ne les aime pas non plus mais je l'ai fait pour quelqu'un de débutant (relativement) dans C – rsjethani

Répondre

5

Puisque vous essayez de lire un entier (%d) avec scanf et le stocker dans une variable char, il y a un débordement de mémoire: un char est 1 octet tandis qu'un int est (généralement) 4. Le résultat est que la mémoire zone après les variables M, puis Q, est écrasée. Et cela arrive à affecter count aussi.

déclarer vos variables comme int pour éviter ce (ou lire char valeurs explicitement avec scanf - mais si vous voulez multiplier les valeurs, il est préférable de commencer par int s tout de suite, au moins atténuer le risque de débordement d'entier) .

+0

super ... Je n'aurais jamais pensé aussi loin ... merci. – rsjethani

3

Ne mentez pas au compilateur.

Vous avez d'abord dit M est char

char A,M,... 

puis essayé de l'utiliser comme un int

scanf("%d",&M); 

Ne fais pas ça!

Soit déclarer M (et les autres variables) comme int, ou Scanf char

+0

le programme effectue des opérations sur A, M & N et la valeur fournie était de l'ordre de 255 n il y a un grand nombre de ces noeuds j'ai enlevé d'autres détails, donc je pensais pouvoir économiser de la mémoire en utilisant un caractère. ... clairement, j'ai créé un désordre tout seul. – rsjethani

+0

Si vous avez un grand nombre de valeurs, il est préférable d'utiliser 'char' (peut-être' unsigned char' pour les opérations sur les bits). Avec C99 vous pouvez scanner une valeur 'char' avec' "% hhd" '(' "% hhu" 'pour' unsigned char') – pmg