参考,逻辑运算符和循环条件

时间:2016-04-01 23:48:45

标签: c++ reference do-while ternary-operator

我在解决我的代码中出错的问题时遇到了问题。我试图做的是为三元运算符和do-while循环写一个条件来识别我的一个变量是否高于1.好吧,它给了我一个我不知道的错误怎么修。最让我困惑的是我将很快给出一个例子。这是我的整体代码。请记住,我是一个初学者,所以可能有些事情让你感到畏缩或者有些事情可以改进。

#include <iostream>
using namespace std;

void getInfo(int&, int&, double&);

int main() {

   int ordered, stock;
   double charges = 10.00;

   getInfo(ordered, stock, charges);

   system("pause");
   return 0;

}

void getInfo(int& ordered, int& stock, double& charges) {

   do {
       printf("Enter the amount of spools ordered, in stock, and handling charges: ");
       scanf_s("%i %i %lf", &ordered, &stock, &charges);

       printf((&ordered > 1 && &stock > 0 && &charges > 0) ? "All added!\n"
           : "You messed one up. AGAIN!\n");
   } while (&ordered > 1 && &stock > 0 && &charges > 0);

}

现在,我得到的错误特别是在三元和间隔条件下。它给我一个错误,其中>是在两个订购之后。现在,如果我将其设为ordered而不是&ordered,则错误就会消失。但是,我从未收到&stock&charges的错误消息。我不知道为什么它以不同的方式对待&ordered。由于我不完全确定的原因,当我取消ordered时,它也无法正确检查&

感谢任何愿意帮助的人!

2 个答案:

答案 0 :(得分:1)

...(&ordered > 1 && &stock > 0 && &charges > 0) ? "All added!\n"

在这里,&#34;&amp; ordered&#34;表示&#34; ordered变量的地址。您显然没有尝试比较ordered的地址,而是ordered本身。这应该是

...(ordered > 1 && stock > 0 && charges > 0) ? "All added!\n"

同样的问题也出在你的while()语句中。

在C ++中,&#34;&amp;&#34;意味着两件事。在声明中,它用于声明引用。在表达方面,它是&#34;&#34;的地址。操作

声明引用后,例如:

int &whatever;

随后,仅使用whatever引用引用的对象本身。

       : "You messed one up. AGAIN!\n");

答案 1 :(得分:1)

&运算符会根据您放置的位置执行不同的操作。如果它在类型声明中(例如int& foo),则表示该类型是引用。但是,如果&在表达式中用作一元运算符,它将成为 Address-of 运算符,并返回指向它所使用的对象的指针。因此,例如int* bar = &spam(假设spam是一个整数)会在指针栏中指定垃圾邮件的指针。

请注意,引用类型的行为与实际类型相同。用一段代码可能更好地说明了这一点:

#include <iostream>
int main() {
    int foo = 12;
    int& bar = foo;  // a reference expects a variable of the same type in the initializer
    bar = 24; // Once the reference has been made the variable behaves indentically to the
              // to the variable it's a reference to.
    std::cout << foo << std::endl;  // outputs 24

    // if you use the & operator on a reference you get the address the variable it is a
    // reference to.
    std::cout << &bar << ' ' << &foo << std::endl; // Outputs two equal addresses.
}

C ++中还有&的第三个含义。作为按位和运算符。 foo & bar会产生按位和变量foobar