一个int

时间:2016-08-22 10:51:11

标签: c int

我想为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中学到了很多东西。下一个任务可能包含我现在觉得可以理解的数组: - );)

3 个答案:

答案 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 */;

或者你可以使用数组!