Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在不使用单个if的条件下执行某些语句_C++_C - Fatal编程技术网

C++ 在不使用单个if的条件下执行某些语句

C++ 在不使用单个if的条件下执行某些语句,c++,c,C++,C,我试图解决流动问题: 您将得到一个名为n的整数。 如果n为正,则打印“+”, 如果n为负数,则打印“-, 如果n为零,则打印“0” 编写一个c\c++解决方案而不使用单个if 我写了这段代码: int n; scanf("%d", &n); ! n >> (sizeof(n) - 1) && printf("-") || return 0; n > 0 && prtintf("+") || return 0; printf("0");

我试图解决流动问题:

您将得到一个名为n的整数。
如果n为正,则打印“+”,
如果n为负数,则打印“-,
如果n为零,则打印“0”

编写一个c\c++解决方案而不使用单个if

我写了这段代码:

int n;
scanf("%d", &n);

! n >> (sizeof(n) - 1) && printf("-") || return 0;
n > 0 && prtintf("+") || return 0;
printf("0");
retuen 0;
但我得到了一个错误:第3行和第4行的“return”之前应该是主表达式。 如何更改此代码以使其正常工作


p、 s:使用接线员被认为是作弊

条件运算符
?:
是这里最简单、最合适的答案

但如果你愿意,你可以做

int n = -5;
...
const char s[] = { '-', '0', '+' };
std::cout << (s + 1)[(n > 0) - (n < 0)] << std::endl;
intn=-5;
...
常量字符s[]={'-','0','+'};
是的,它是可行的(有一些限制)

#包括
#包括
#包括
//假设2s补数
//和一个理解编译器
//有些支票漏掉了!
int main(int argc,字符**argv)
{
int输入;
无符号整数itmp;
整数大小;
阴符号,罪恶,灵魂;
字符输出[3]={0','+','-'};
如果(argc!=2){
fprintf(stderr,“用法:%s整数\n”,argv[0]);
退出(退出失败);
}
//TODO:使用strtol并检查输入!
输入=atoi(argv[1]);
size=sizeof(int)*字符位;
itmp=(无符号整数)输入;
sin=itmp>>(尺寸-1);
符号=sin^1;
//现在“符号”为0(负)或1(正)
//但我们需要1(负)和-1(正)
// 0 * -2 + 1 = 1
// 1 * -2 + 1 = -1
符号=符号*-2+1;
//现在我们可以做了
//在sin sout登录退出
//-x*1=-x->1+1=2
//+x*-1=-x->0+1=1
//  0 *  -1 =  0 ->   0  +  0  =  0
itmp=itmp*符号;
sout=itmp>>(尺寸-1);
符号=罪恶+灵魂;
printf(“输入:%c\n”,输出[(大小)符号];
退出(退出成功);
}

没有条件表达式,既不能用
if
显式表示,也不能用
隐式表示,
for
,也不能用快捷方式
…?:

尝试此
返回(n>0?'+':(n<0?'-':'0'))
使用三元条件运算符:
?:
至少可以说,您发布的代码是不连贯的。为了“修复”这段代码,您首先必须解释您希望它如何工作。你发布的内容完全不清楚。
是什么!n>>(sizeof(n)-1)
应该怎么做?整数n的最后一位是数字的符号:0表示零和正,1表示负。谷歌2的补充,但我可以使用退出(代码),以终止该计划。那么我想终止一个函数呢?@user3073850:首先,
exit
不会终止函数。它会终止整个程序。第二,“终止函数”从何而来?你原来的帖子没有提到任何“功能”或“终止”。更正了这个问题sorry@user3073850:如果我没有遗漏任何内容,那么从表达式内部“终止函数”的唯一方法可能是
throw
。而
throw
并不完全是“终止函数”。你也可以在这里使用
switch
而不是
if
,然后在
switch
内自由使用
return
,但我担心这也会被视为“作弊”。
 (n < 0 && (std::cout << '-', true)) || 
   (n > 0 && (std::cout << '+', true)) || 
   (std::cout << '0', true);
 std::cout << std::endl;
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>

// Assuming 2s-complement numbers
// and an understanding compiler
// Some checks omitted!

int main(int argc, char **argv)
{
  int input;
  unsigned int itmp;
  int size;
  int sign, sin, sout;
  char out[3] = { '0', '+', '-' };


  if (argc != 2) {
    fprintf(stderr, "Usage: %s integer\n", argv[0]);
    exit(EXIT_FAILURE);
  }
  // TODO: use strtol and check input!
  input = atoi(argv[1]);

  size = sizeof(int) * CHAR_BIT;
  itmp = (unsigned int) input;

  sin = itmp >> (size - 1);
  sign = sin ^ 1;

  // now "sign" is either 0 (negative) or 1 (positive)
  // but we need 1 (negative) and -1 (positive)
  // 0 * -2 + 1 = 1
  // 1 * -2 + 1 = -1

  sign = sign * -2 + 1;

  // Now we can do
  // in   sign   out   sin   sout
  // -x *   1 = -x ->   1  +  1  =  2
  // +x *  -1 = -x ->   0  +  1  =  1
  //  0 *  -1 =  0 ->   0  +  0  =  0

  itmp = itmp * sign;
  sout = itmp >> (size - 1);

  sign = sin + sout;

  printf("Input: %c\n", out[(size_t) sign]);

  exit(EXIT_SUCCESS);
}