在C中仅使用一个变量添加两个数字

Utt*_*her 7 c

我试图创建一个输入两个数字并输出其总和的程序.为此,我必须使用两个变量.我只是好奇这是否可以通过只使用一个变量来完成.
注意:用户必须输入两个数字.

#include<stdio.h>
int main()
{
int a, b;
scanf("%d%d",&a,&b);
printf("%d",(a+b));
return 0;
}
Run Code Online (Sandbox Code Playgroud)

ron*_*ron 11

#include <stdio.h>
int main ( void )
{
   int a[3];

   scanf("%d", &a[0]);   /* first number */
   sscanf("%d", &a[1] );    /* second number */

   a[2] = a[0] + a[1];

   printf("sum is %d\n", a[0] + a[1] );

   printf("sum stored in a[%d] is %d\n", 2, a[2] );

   return 0;
}
Run Code Online (Sandbox Code Playgroud)


agi*_*lla 5

技术上一个变量,一个指针:

#include<stdio.h>

int main() {
    int *nums = malloc(2 * sizeof(int));
    scanf("%d%d",nums, (nums + sizeof(int)));
    printf("%d",(*nums + *(nums + sizeof(int))));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是,没有一种优雅的方法可以将一个变量用于两个输入.

  • 代码破了.Certinaly`scanf("%d%d",nums,(nums + sizeof(int)));`应该是`scanf("%d%d",nums,nums + 1);`(指针数学) (3认同)

Win*_*ter 5

请注意,我认为问题就像挑战或谜题.不要认为这个答案好C练习.显然,从输入中得出2个值之和的最简洁方法是使用2个变量.我仍然觉得挑战很有趣.

#include <stdio.h>
#include <math.h>

int main()
{
    int a;
    printf("%g", fmin((scanf("%d", &a), a), 1.0/0.0 + rand()) + fmin((scanf("%d", &a), a), 1.0/0.0 + rand()));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

使用负值.

我正在使用逗号运算符执行两个表达式但只返回第二个表达式.所以(scanf("%d", &a), a)就像打电话scanf("%d", &a)和退货一样a.我通过函数(任何函数)传递此结果,因为我想阻止更新值(用新的a求和).我不知道你的编译器是否会首先调用大表达式的左侧或右侧部分,但它们无关紧要,因为它们都在做同样的事情.无论哪个先执行都将是输入的第一个值.

fmin(x, 1.0/0.0 + rand())确保编译器不会内联任何内容.1.0/0.0是无限,fmin()在我们的情况下永远不会返回.编译器会将此内联x正常,但添加+ rand()到Infinity(仍然是Infinity)似乎会阻止它.

您甚至可以通过使用argc声明"0"变量来实现:

#include <stdio.h>
#include <math.h>

int main(int a)
{
    printf("%g", fmin((scanf("%d", &a), a), 1.0/0.0 + rand()) + fmin((scanf("%d", &a), a), 1.0/0.0 + rand()));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我用它来测试:https://www.onlinegdb.com/online_c_compiler


chu*_*ica 5

在C中仅使用一个变量添加两个数字

使用1变量创建辅助函数.

#include <stdio.h>

int scan_int(void) {
  int a;
  if (scanf("%d", &a) == 1) {
    return a;
  }
  return 0;
}

int main(void) {
  printf("Sum %d\n", scan_int() + scan_int());
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

请注意scan_int() + scan_int(),代码可以先调用左边或右边scan_int()(或并行).幸运的+是可交换,所以这里没有区别.

这里的"技巧"是按顺序或并行存在,a 1st_call_scan_int::a2nd_call_scan_int::a.代码中仍然只有一个变量.