(初学者)如何将这些值分配给字符串?

时间:2013-10-17 00:23:37

标签: function

我需要创建一个1和0的字符串s。该字符串是根据函数isSet返回的值创建的。它始终返回10。我不能简单地将isSet放入if语句中以将10添加到字符串中,因为程序无法编译。我是新手。我想知道是否有一种简单的方法可以循环我的isSet函数,同时将其返回值分配给我的字符串s,而不是在bitsetfn内。任何帮助表示赞赏。在c ++中

int isSet(unsigned int x, int i)
{
    return ((x >> i) & 1);
}

string bitsetfn(int nbits, unsigned int x)
{
    string s;
    for (int i = 0; i < 16; i++)
    {
        isSet(x, i);
        if (isSet = 0)
        {
            s = s + "0";
        }
        if (isSet = 1)
        {
            s = s + "1";
        }
    }
    return s;
}

2 个答案:

答案 0 :(得分:1)

该代码中的问题是您使用一些参数调用函数isSet,然后,比喻说,丢弃返回值(即函数应用程序的值),而不是将其存储在一个变量,也不是立即用于例如if声明。

然后您正在使用函数本身(与应用该函数的值相反,或者,当使用参数调用时该函数的返回值)将其与01进行比较,这不是正确的事。

相反,你应该做的是:

if (isSet(x, 1) == 1) {
    ...
}
if (isSet(x, 1) == 0) {
    ...
}

注意:比较运算符为==而非=,这是赋值运算符 - 这几乎适用于所有现代编程语言。)

可以缩短为:

if (isSet(x, 1) == 1) {
    ...
} else {
    ...
}

...而且,在将10视为布尔值True和False(C,C ++,Python,PHP等但不是Java和C#)的编程语言中,您可以减少到:

if (isSet(x, 1)) {
    ...
} else {
    ...
}

此外,通常情况下,特别是在具有副作用的函数(即从后续调用中返回不同值的函数,或者修改其环境,或两者都有)的情况下,您将希望存储返回值函数调用变量,如果你要做的不仅仅是单个ifif-else

 int rnd = generateRandomValue();  // return different values on consequent calls
 if (rnd < 0.25) {
     doSomething();
 } else if (rnd < 0.5) {
     doSomethingElse();
 } else {
     doSomethingThird();
 }

在上面的示例中,如果您只是在generateRandomValue()if行中调用else if,他们将检查2个完全不同的值,从而导致错误的逻辑

PS 根据编程语言的不同,整个程序可能会大大减少(例如,即使只有一行,也不一定会损害可读性),但这超出了本问题的范围。

答案 1 :(得分:-1)

您忘记将isSet()的返回值存储为本地变量。所以这一行:

isSet(x, i);

应该是:

int isSet = isSet(x, i);

然后,当你在后面的行中引用isSet时,它将被定义。

编辑:请注意,正如评论所述,拥有与函数同名的变量通常不是一个好主意。您可以以不同的方式命名变量(并在适当的时候更改后面行中对它的引用),或者按照另一个答案的建议进行操作,并在比较中调用该函数。