printf 语句出错?(在 C) *更新*

error with printf statement? (In C) *Update*

提问人:Kaity 提问时间:2/16/2009 最后编辑:Commodore JaegerKaity 更新时间:2/16/2009 访问量:1751

问:

为了澄清起见,我需要程序打印 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: Error while dumping state   
Segmentation fault 

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

c printf if 语句

评论

0赞 kgrad 2/16/2009
如果你要这样做,你必须在你的陈述周围加上引号。“a<b”而不是 a<b。
0赞 Jonathan Leffler 2/16/2009
您忘记为程序提供两个参数 - 因此 seg 错误和核心转储。

答:

7赞 Michael Burr 2/16/2009 #1

您要求打印布尔表达式的值(对于 true 和 false,这些值始终解析为 1 或 0)。printf()

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

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

将结果显示为字符串。

评论

0赞 DevSolar 2/16/2009
就在关于布尔表达式的标记上。但请注意,printf() 语句可以简单地分别替换为 puts( “a < b” ) 和 puts( “a >= b” )。
6赞 Otávio Décio 2/16/2009 #2

这一行:

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*/
0赞 kgrad 2/16/2009 #3

您的问题是,您正在尝试替换逻辑表达式而不是整数。以上所有(a > b)......计算结果为 true 或 false(除了 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");

这是对的吗?

评论

0赞 strager 2/16/2009
在第二个示例中,您忘记了 printfs 中的换行符。
0赞 kgrad 2/16/2009
啊对不起,这已经补救了
1赞 DevSolar 2/16/2009 #4
printf("%s\n", a == b);

“%s” 打印一个字符串。a == b 不是字符串,而是布尔表达式,结果为 1 (true) 或 0 (false)。

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

2赞 wfarr 2/16/2009 #5

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

#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
0赞 MahlerFive 2/16/2009 #6

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

输入:

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..