C++ 在不使用单个if的条件下执行某些语句
我试图解决流动问题: 您将得到一个名为n的整数。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为零,则打印“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);
}