提问人:Kaity 提问时间:2/16/2009 最后编辑:Commodore JaegerKaity 更新时间:2/16/2009 访问量:1751
printf 语句出错?(在 C) *更新*
error with printf statement? (In C) *Update*
问:
为了澄清起见,我需要程序打印 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
这到底是什么意思?(如果你现在还没有注意到,我对这些东西很绝望,哈哈)。
答:
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..
评论