繁体   English   中英

引用,逻辑运算符和循环条件

[英]References, Logical Operators, and Loop Condition

我在了解自己在代码中做错了什么时遇到了问题。 我想做的是为三元运算符和一个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);

}

现在,我得到的错误特别是在三元和while条件中。 这给了我一个错误,在>两者都订购后。 现在,如果我将其设置为ordered而不是&ordered ,那么错误就会消失。 但是,我从不会对&stock&charges犯错。 我不知道为什么它的治疗&ordered方式不同。 当我摘下& ,它也不能正确检查ordered ,原因是我不确定。

谢谢任何愿意帮助的人!

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

在这里,“&ordered”表示“ ordered变量的地址。您显然不是在尝试比较ordered的地址,而是要对ordered本身进行比较。这应该是

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

同样,您的while()语句也存在问题。

在C ++中,“&”表示两件事。 在声明中,它用于声明引用。 在表达式中,它是运算符的“地址”。

声明引用后,例如:

int &whatever;

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

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

&运算符根据您放置的位置执行不同的操作。 如果它在类型声明中(例如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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM