Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/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++ 引用、逻辑运算符和循环条件_C++_Reference_Do While_Ternary Operator - Fatal编程技术网

C++ 引用、逻辑运算符和循环条件

C++ 引用、逻辑运算符和循环条件,c++,reference,do-while,ternary-operator,C++,Reference,Do While,Ternary Operator,我在理解代码中的错误方面遇到了问题。我要做的是为三元运算符和do while循环编写一个条件,以识别其中一个变量是否大于1。嗯,它给了我一个我不知道如何修复的错误。最让我困惑的是,我很快会给出一个例子。这是我的全部代码。请记住,我是一个初学者,所以可能有一些事情让你畏缩,或者有一些地方需要改进 #include <iostream> using namespace std; void getInfo(int&, int&, double&); int ma

我在理解代码中的错误方面遇到了问题。我要做的是为三元运算符和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);

}
#包括
使用名称空间std;
void getInfo(int&,int&,double&);
int main(){
国际订购,库存;
双重收费=10.00;
getInfo(订购、库存、费用);
系统(“暂停”);
返回0;
}
作废获取信息(整数和订单、整数和库存、双重和费用){
做{
printf(“输入订购的线轴数量、库存量和处理费:”);
扫描(“%i%i%lf”、&订购、库存和费用);
printf((&ordered>1&&&stock>0&&charges>0)?“全部已添加!\n”
:“你又把一个搞砸了!\n”);
}而(&订单>1&&&库存>0&&&费用>0);
}
现在,我得到的误差,特别是在三元和while条件下。它给了我一个错误,即为这两种产品订购
。现在,如果我将其设置为
有序的
,而不是
&有序的
,错误就会消失。然而,
&stock
&charges
从未出现错误。我不知道为什么它对
和排序有不同的处理方式。当我取下
时,它也不能正确地检查
订购的
,原因我不完全确定

感谢任何愿意帮忙的人

...(&ordered > 1 && &stock > 0 && &charges > 0) ? "All added!\n"
在这里,“&ordered”表示“排序的
变量的地址。显然,您并不是要比较排序的
变量的地址,而是要比较排序的
变量本身的地址。这应该是

...(ordered > 1 && stock > 0 && charges > 0) ? "All added!\n"
while()语句也存在同样的问题

在C++中,“&”是指两个事物。在声明中,它用来声明引用。在表达式中,它是“操作符的地址”。< /P> 声明引用后,如:

int &whatever;
随后,仅使用
任何
引用引用的对象本身

       : "You messed one up. AGAIN!\n");
此处,“&ordered”表示“已排序的
变量的地址”。显然,您并没有试图比较
ordered
的地址,而是试图比较
ordered
本身。这应该是

...(ordered > 1 && stock > 0 && charges > 0) ? "All added!\n"
while()语句也存在同样的问题

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

声明引用后,如:

int &whatever;
随后,仅使用
任何
引用引用的对象本身

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

&
操作符根据您放置的位置执行不同的操作。如果它在类型声明中(例如
int&foo
),则表示该类型是一个引用。但是,如果
&
在表达式中用作一元运算符,则它将成为运算符的地址,并返回指向其所用对象的指针。因此,例如
int*bar=&spam
(假设
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.
}
#包括
int main(){
int-foo=12;
int&bar=foo;//引用需要初始值设定项中具有相同类型的变量
bar=24;//引用完成后,变量的行为与
//它是对变量的引用。

std::cout根据您放置的位置,
&
操作符执行不同的操作。如果它在类型声明中(例如
int&foo
),这意味着该类型是一个引用。但是,如果表达式中的
&
用作一元运算符,则它将成为运算符的地址,并返回指向所使用对象的指针。例如
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.
}
#包括
int main(){
int-foo=12;
int&bar=foo;//引用需要初始值设定项中具有相同类型的变量
bar=24;//引用完成后,变量的行为与
//它是对变量的引用。

Std::你可能想读一下<代码>和<代码>在不同上下文中的意思。提示:<代码>和命令< /C> >在三元表达式中没有做你所期望的。如果你用警告编译你的代码,你可能会得到一个错误,比如“代码>”,ISO C++禁止指针和整数之间的比较[fime]。
(取决于您使用的编译器)@jpw相信我,我已经试过了。你认为我至少在正确的轨道上吗?我想你知道我在做什么。编辑:我使用Visual Studio。它告诉我在两行上都没有从int到int*的转换。但我不确定这意味着什么。而且,如果我将1设为零,错误就会消失。也不确定为什么会这样做……什么错误你还得考虑吗?也可以考虑使用<代码> STD::CIN < /Cord>作为输入,而不是<代码> Snffys。无论哪种方式,都要测试从阅读中返回的内容,以确保您确实阅读了您所期望的。一些指导者只是喜欢输入“FuBar”之类的东西。您期望相应的数字和分数。@user2475059我算出了!我使用了错误的逻辑运算符…哎呀。>应该使用| |。谢谢您的帮助!我将阅读*和更多内容。再次感谢大家!您可能想阅读
&
在不同上下文中的含义。提示:
&ordered
没有做你在t里期待的事情