这是我第一次使用Stack Overflow,我必须警告你,我本周早些时候才开始学习C语言。我正在尝试编写一个简单的程序,它将找出哪种颜色具有RGB光谱中最大的值。它有一个手动输入每种颜色,但当它完成后,我得到2个奇数,数百万。有人可以帮助一个菜鸟吗?这是我到目前为止编写的代码:
#include <stdio.h>
int main()
{
int mm, m;
int hh, h;
int r, g, b, c;
printf("Enter Value For Red (0-255)\n");
scanf("%d", &r);
printf("Enter Value For Green (0-255)\n");
scanf("%d", &g);
printf("Enter Value For Blue (0-255)\n");
scanf("%d", &b);
if ( r > g );
if ( r > b );
mm = r;
if ( g > b );
m = b;
if ( b > g );
m = g;
if ( r < b );
mm = b;
m = g;
if ( g > r );
if ( g > b );
mm = g;
if ( r > b );
m = b;
if ( b > r );
m = r;
if ( g < b );
mm = b;
m = r;
printf("%d\n", &mm);
printf("%d\n", &m);
}
答案 0 :(得分:4)
printf("%d\n", &mm);
printf("%d\n", &m);
应该是:
printf("%d\n", mm);
printf("%d\n", m);
&
获取变量的地址。当您通过scanf()
设置变量时,您需要提供地址以便设置。当您通过printf()
打印变量的值时,您需要提供名称,而不是地址。
您现在看到的是您的变量以十进制数存储在堆栈中的地址。
旁注,你的代码不像你想象的那样工作:
if ( r > g );
if ( r > b );
mm = r;
if ( g > b );
m = b;
if ( b > g );
m = g;
if ( r < b );
mm = b;
m = g;
需要更多的缩进才能使其正常工作,现在它正在执行以下操作:
mm = r;
m = b;
m = g;
mm = b;
...
每次你运行它,因为if是被淘汰的。在;
声明之后你不能拥有if
,或者它不会在它下面做什么。还可以使用大括号{ }
来使范围做更多的事情:
if ( r > g )
{
if ( r > b )
{
mm = r;
if ( g > b )
m = b;
if ( b > g )
m = g;
}
if ( r < b )
{
mm = b;
m = g;
...
是你想要的。
答案 1 :(得分:3)
有一个原因scanf()
接受指向其参数的指针:它必须修改它们。
但是,printf()
不会修改其参数(通常是...... - 有例外),因此您不必传递指针。变化
printf("%d\n", &mm);
printf("%d\n", &m);
到
printf("%d\n", mm);
printf("%d\n", m);
答案 2 :(得分:2)
你应该在你的ifs之后使用{和}。您的if ( r > g );
形式几乎无效。特别是半冒号在这里是错误的。