2011-07-13 4 views
0

Je semble avoir un problème avec les déclarations foirant mes maths. Tous les conseils ou suggestions sont les bienvenus.Déclaration déclarations en C

Voici le code:

int num1, num2, num3, num4, op, ; 
    op = ((1==num3) || (2==num4)); 
    num3 = (num1 + num2); 
    num4 = (num1 * num2); 

J'ai essayé beaucoup d'arrangements et réaffectations. Beaucoup de choses ont été compilées, mais quand 5 + 5 = 2659043, il y a un problème ...

+1

Quel est l'objectif de ce code? En outre, la dernière virgule sur la première ligne ne devrait pas être là. Cet extrait de code a-t-il même été compilé? –

+3

Plusieurs choses ici ... Quelle est l'erreur? Cela ne compilera pas. Et vous ne semblez pas assigner de valeurs à ces variables, donc arithmétique effectuant sur les variables non initialisées va bien sûr vous donner des nombres sauvages. –

+0

Pourriez-vous donner un contexte pour ce code? Comme la fonction dont elle fait partie et comment elle s'appelle. –

Répondre

3

Je ne sais pas ce que vous essayez de faire, mais c'est ce que votre code est en train de faire:

int num1, num2, num3, num4, op, ; 

Cette ligne informe le compilateur C qu'il doit allouer de l'espace pour 5 entiers (num1, num2, num3, num4, op), ces entiers peuvent maintenant être utilisés comme variables jusqu'à l'expiration de la portée. Je ne sais pas pourquoi vous avez le dernier "," vous pourriez vouloir supprimer cela.

op = ((1==num3) || (2==num4)); 

Si num3 est 1, ou num4 = 2, définissez op sur 1 (vrai). Sinon, définissez op sur 0 (faux). Explicite: Ajoutez num1 et num2 et mettez la somme dans num3. Auto-explicatif: Multiplier num1 et num2 et mettre le produit dans num4.

Immédiatement, je vois un problème avec votre programme. Vous utilisez ces variables, mais vous ne les avez pas initialisées. Par exemple, comment doit-on supposer une somme de (num1 + num2) si num1 et num2 n'ont pas de valeur. Essayez ceci:

#include <stdio.h> 

int main() 
{ 
    int num1, num2, sum; 
    num1 = 1; 
    num2 = 2; 
    sum = num1 + num2; 

    printf("sum = %d\n", sum); 
} 
+0

Je veux fondamentalement que la variable "op" pointe vers la fonction num1 ou num2, en fonction de l'entrée "1" ou "2", assignée par "op". –

+0

Ok, merci pour ces détails. Je suis un newb, oui. Je m'amuse. J'aime C. J'ai déjà programmé, mais c'était il y a un moment. En ce qui concerne le contexte du code, voici le tout après plusieurs tweeks comme recommandé. –

+0

Je ferai cela en 2 parties: –

1

Vous n'avez pas initialisé les variables, donc leurs valeurs ne sont pas définies (et probablement pas 0). Vous devez initialiser (comme, par exemple):

int num1 = 0, num2 = 0, num3 = 0, num4 = 0, op = 0 ; 
+0

J'ai essayé d'initialiser les variables de cette façon, mais les fonctions mathématiques ne fonctionnent toujours pas. Je suis en train de résoudre cette discussion en réponse. C'est parce que j'étais vague dans ma description, à cause de mon manque d'expérience avec de tels forums ... –

+0

Mais j'apprécie vraiment l'aide !!! : D –

2

Bon ... il y a beaucoup de problèmes ici, mais je vais passer en revue ce que vous avez posté dans les commentaires point par point.

#include <stdio.h> 

int main() { 
    /*Declare the active agents */ 
    int num1=0, num2=0, num3=0, num4=0, op = 1 || 2 ; 

INITIALISATION vos variables à zéro ici, à l'exception op, que vous définissez à 1 (1 || 2, qui est le booléen ou, retourne 1 (vrai), pour un résultat que vous définissez op à 1).

num3 = (num1 + num2); 
    num4 = (num1 * num2); 

Ici vous définissez num3 et num4 les deux à zéro, puisque num1 + est num2 0 + 0 et num1 * num2 est 0 * 0. Vous voulez déplacer ce bas après vos années scanf.

/* Information Extraction Method */ 
    printf("YO MOFO!!!Press a number or hit the dirt!!\n"); 
    scanf("%d", &num1); 
    printf("Since you didn't hit the dirt, how about another number?\n"); 
    scanf("%d", &num2); 

    /* Menu (AKA Input */ 
    printf("If you want to add, press 1 ,\nIf you want to multiply, press 2 ... \n\n "); 
    scanf ("%d", &op); 

Ces printf et scanf sont bons. Bon travail.

/* PROCESS */ 
    if (op = 1) {num3;}; 
    if (op = 2) {num4;}; 

Trois choses ici. Premièrement, op = 1 attribue 1 à op. Idem avec op = 2. Vous voulez op == 1 et op == 2 comme vous l'avez ci-dessous. Le résultat de ceci sera que op sera toujours 2 après ces instructions if.

La deuxième chose est que, alors qu'une instruction valide, num3; en soi ne fera rien.Enfin, bien que cela ne nuise à rien, vous n'avez pas besoin de points-virgules après la fermeture de vos accolades.

/* OutPut */ 
    if (op == 1) { 
    printf("Alone, a toothpick is weak, but as part of a sum, your answer is:\n%d"), &num3; 
    }; 

    if (op == 2) { 
    printf("Multiplied as a sum of it's parts, your answer is:\n%d"), &num4; 
    }; 

Ici, vous imprimez l'adresse de num3 et num4 au lieu de leurs valeurs. C'est en partie la raison pour laquelle vous voyez de grands nombres qui n'ont pas de sens, c'est l'adresse de num3 et num4 en mémoire. Seul scanf a besoin de l'esperluette (&), contrairement à printf. En outre, dans sa forme actuelle, la valeur réelle de ces éléments sera toujours égale à 0 puisque vos calculs sont effectués avant que vous obteniez les chiffres de l'utilisateur.

EDIT: En fait, il s'avère que la raison pour laquelle vous n'obtenez pas les bons chiffres ici est que vous ne transmettez pas le numéro à printf. Vous avez num3 et num4 en dehors des parenthèses. Il ne devrait toujours pas y avoir d'esperluette avant le nom de la variable, mais cela devrait ressembler à ceci: printf("Multiplied... is:\n%d", num4); Notez comment num4 se trouve entre parenthèses.

printf("\n\n\n\nMath frum da hud..... Yo. \n\n\nLOL\n >;]"); 

    /* End Of Program */ 
    return 0; 
} 

Edit: Par souci de clarté, je l'ai re-écrit de manière à ce qu'il devrait fonctionner de la façon dont vous l'intention.

#include <stdio.h> 

int main() { 
    /*Declare the active agents */ 
    int num1=0, num2=0, num3=0, num4=0, op = 0; 

    /* Information Extraction Method */ 
    printf("YO MOFO!!!Press a number or hit the dirt!!\n"); 
    scanf("%d", &num1); 
    printf("Since you didn't hit the dirt, how about another number?\n"); 
    scanf("%d", &num2); 

    num3 = (num1 + num2); 
    num4 = (num1 * num2);  

    /* Menu (AKA Input */ 
    printf("If you want to add, press 1 ,\nIf you want to multiply, press 2 ... \n\n "); 
    scanf ("%d", &op); 

    /* OutPut */ 
    if (op == 1) { 
    printf("Alone, a toothpick is weak, but as part of a sum, your answer is:\n%d", num3); 
    }; 

    if (op == 2) { 
    printf("Multiplied as a sum of it's parts, your answer is:\n%d", num4); 
    }; 

    printf("\n\n\n\nMath frum da hud..... Yo. \n\n\nLOL\n >;]"); 

    /* End Of Program */ 
    return 0; 
} 

HTH.

+0

Upvote pour l'hilarité de ceci – Armbrat

+0

@Armbrat Il est supprimé maintenant, mais c'était le code de l'OP, pas le mien, alors merci pour l'hilarité. –