我想为int x放两个值,为int y放两个值。这段代码实际上运行得很好,但是在编译时我得到两个警告,因为我没有使用每个int的一个值。有更好的方法可以做到这一点,还是应该忽略警告?
#include <stdio.h>
int main() {
int x = (10, 20);
int y = (15, 25);
if (x > y)
{
printf("%d\n", x);
}
else if (y > x)
{
printf("%d\n", y);
}
else {
printf("Both values are the same.\n");
}}
警告讯息:
compare_vars.c:4:11: warning: expression result unused [-Wunused-value]
int x = (10, 20);
^~
compare_vars.c:5:11: warning: expression result unused [-Wunused-value]
int y = (15, 25);
^~
生成了2个警告。
(编辑:原来我的老师只想要每个变量一个值。但是我从这个令人困惑的Q / A中学到了很多东西。下一个任务可能包含我现在觉得可以理解的数组: - );)
答案 0 :(得分:4)
int x
声明类型为x
的变量int
。 一个 int。
您要找的是int
的对,这是C中原生不存在的数据类型。(*)
您可以使用数组...
int x[2] = { 10, 20 };
......或结构......
struct int_pair
{
int first;
int second;
} x;
struct int_pair x = { 10, 20 };
...但你必须编写自己的比较函数,因为操作符>
不会对这两种情况都这样做。
(*):看看例如pmg或Bathsheba关于为什么用一对int
初始化单个int
的答案不会产生编译错误。
答案 1 :(得分:1)
(10, 20);
是表达式等于20.(这就是逗号运算符的工作原理:它计算所有参数,表达式的值等于最后一个任期)。
所以你的代码是有效的(因此编译成功),但它确实包含冗余数据。
你想要int x[] = {10, 20};
等吗?即使用两个元素创建数组,并使用x[0]
和x[1]
&amp; c等代码访问元素。请注意,x > y
将 undefined ,因为您要比较指针(两个数组中每个数组中第一个元素的地址)相同的阵列。
答案 2 :(得分:1)
逗号运算符产生右边的值。
表达式
4, 3
的值为3
。
您正在做的是为每个变量分配一个值。
如果您的值足够小,您可以编写值。例如,如果所有值都小于1000
x = 42003; // 42 and 3
y = 538907; // 538 and 907
if (x % 1000 == y / 1000) /* if 3 == 538 */;
或者你可以使用数组!