2009-02-16 15 views
1

À des fins de clarification, j'ai besoin du programme pour imprimer les nombres entrés pour a et b, pas les lettres réelles a et b.
D'accord, voici le programme révisé par des suggestions de yall:erreur avec l'instruction printf? (En C) * Mise à jour *

int main (int argc, char *argv[]) 
{ 
    int a; /*first number input*/ 
    int b; /*second number input*/ 

    a = atoi(argv[1]); /*assign to a*/ 
    b = atoi(argv[2]); /*assign to b*/ 

    if (a < b) 
     printf("%s\n", a < b); /* a is less than b*/ 
     else { 
     printf("%s\n", a >= b); /* a is greater than or equal to b*/ 
     } 

    if (a == b) 
     printf("%s\n", a == b); /* a is equal to b*/ 
     else { 
     printf("%s\n", a != b); /* a is not equal to b*/ 
     } 

    return 0; 
} /* end function main*/ 

lol, maintenant, quand je lance le programme on me dit

 
8 [main] a 2336 _cygtls::handle_exceptions: Error while dumping state 
Segmentation fault 

Que diable ce que cela signifie? (Si vous ne l'avez pas remarqué maintenant, je suis assez désespéré à ce genre de choses lol).

+0

Si vous le faites de cette façon, vous devez inclure des guillemets autour de vos instructions. "a kgrad

+0

Vous avez oublié de fournir deux arguments au programme, d'où la faute de segmentation et le vidage du noyau. –

Répondre

2

En fonction de votre édition, je pense que vous cherchez ceci:

#include <stdio.h> 

int main (int argc, char *argv[]) { 
    int a; /*first number input*/ 
    int b; /*second number input*/ 

    a = atoi(argv[1]); /*assign to a*/ 
    b = atoi(argv[2]); /*assign to b*/ 

    if (a < b) 
     printf("%d < %d\n", a, b); /* a is less than b*/ 
    else 
     printf("%d >= %d\n", a, b); /* a is greater than or equal to b*/ 

    if (a == b) 
     printf("%d == %d\n", a, b); /* a is equal to b*/ 
    else 
     printf("%d != %d\n", a, b); /* a is not equal to b*/ 

    return 0; 
} 

Ce code:

[email protected]:~$ ./foo 1 2 
1 < 2 
1 != 2 
7

Vous demandez à printf() d'imprimer les valeurs des expressions booléennes (qui sont toujours égales à 1 ou 0 pour respectivement vrai et faux).

Vous voulez probablement votre code ressemble plus:

if (a < b) 
    printf("%s\n", "a < b"); /* a is less than b*/ 
else { 
    printf("%s\n", "a >= b"); /* a is greater than or equal to b*/ 
} 

Pour afficher les résultats sous forme de chaînes.

+0

Droit sur la marque en ce qui concerne les expressions booléennes. Notez cependant que les instructions printf() peuvent être trivialement remplacées par puts ("a = b"), respectivement. – DevSolar

6

Cette ligne:

if (a = b) 

devrait-il pas

if (a == b) 

même ici:

printf("%d\n", a = b); /* a is equal to b*/ 

devrait être

printf("%d\n", a == b); /* a is equal to b*/ 
0

Votre problème est, vous essayez de substituer des expressions logiques au lieu d'entiers. Tout ce qui précède (a> b) ... évalue à vrai ou faux (sauf a = b qui assigne la valeur de b à a). Ce que vous devez faire, si vous essayez de revenir la plus grande valeur, est la suivante:


    printf("%d\n", a > b ? a : b) 

Cela dit, si un est supérieur à b, imprimer une, sinon b. Editer: Je pense que ce que vous recherchez est d'imprimer les mots "a> b" etc. Dans ce cas, mettez-les dans le printf. Lorsque vous placez% d dans le printf, il sous-tend une valeur entière spécifiée dans cet endroit de la chaîne.

Je crois que vous voulez les éléments suivants:


    if(a > b) 
     printf("a > b\n"); 
    else 
     printf("b >= a\n"); 

Est-ce exact?

+0

Vous avez oublié les nouvelles lignes dans printfs dans votre deuxième exemple. – strager

+0

ah désolé, cela a été remédié – kgrad

1
printf("%s\n", a == b); 

"% s" imprime une chaîne. a == b n'est pas une chaîne, c'est une expression booléenne, résultant en 1 (vrai) ou 0 (faux). Donc, votre printf() tente d'imprimer des caractères jusqu'à ce qu'il trouve un octet nul, en commençant à la position de l'expression booléenne ... desaster.

0

Je suppose que vous voulez quelque chose comme ça ...

Entrée:

a = 5, b = 7

Sortie:

5 = 7

Si oui, vous avez besoin d'imprimer les entiers a et b! , ainsi qu'une chaîne entre les deux pour montrer la relation.

if(a < b) { 
    printf("%d < %d\n", a, b); 
} 
else { 
    printf("%d >= %d\n", a, b); 
} 

// follow similar pattern for the next if/else block..