1

为澄清起见,我需要程序打印为 a 和 b 输入的数字,而不是实际的字母 a 和 b。
好的,这是根据你们的建议修改后的程序:

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*/  

大声笑,现在当我运行程序时,我被告知

8 [main] a 2336 _cygtls::handle_exceptions: 转储状态时出错   
分段故障

这是什么意思?(如果你现在还没有注意到我对这些东西很绝望,哈哈)。

4

6 回答 6

7

您要求printf()打印布尔表达式的值(对于真和假,它们总是分别解析为 1 或 0)。

您可能希望您的代码看起来更像:

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*/
}

将结果显示为字符串。

于 2009-02-16T03:49:50.287 回答
6

这一行:

if (a = b)

不应该

if (a == b) 

同样在这里:

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

应该

printf("%d\n", a == b);  /* a is equal to b*/
于 2009-02-16T03:50:26.383 回答
2

根据您的编辑,我认为您正在寻找这个:

#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;
}

这段代码:

wfarr@turing:~$ ./foo 1 2
1 < 2
1 != 2
于 2009-02-16T04:30:40.890 回答
1
printf("%s\n", a == b);

"%s" 打印一个字符串。a == b 不是字符串,它是一个布尔表达式,结果为 1(真)或 0(假)。

因此,您的 printf() 尝试打印字符,直到它找到一个空字节,从布尔表达式的位置开始......灾难。

于 2009-02-16T04:22:13.953 回答
0

您的问题是,您试图用逻辑表达式代替整数。以上所有(a > b)...评估为真或假(a = b 将 b 的值分配给 a 除外)。如果您尝试返回较大的值,您应该做的是以下内容:


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

这表示如果 a 大于 b,则打印 a,否则打印 b。

编辑:我认为您真正要寻找的是打印出“a > b”等字样。在这种情况下,将它们放在 printf 中。当您将 %d 放入 printf 时,它会将指定的整数值代入字符串中的该位置。

我相信您想要以下内容:


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

那是对的吗?

于 2009-02-16T03:51:48.813 回答
0

我假设你想要这样的东西......

输入:

a = 5, b = 7

输出:

5 < 7

5 != 7

如果是这样,您需要打印整数 a 和 b,以及介于两者之间的字符串以显示关系。

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..
于 2009-02-16T04:31:52.120 回答