如何解决只有一个变量正在打印 C++
//libraries
#include <iostream>
//standard namepace
using namespace std;
int Car() {
int a;
int b;
cout << "Fuel Tank" << endl;
cin >> a;
cout << "MPG" << endl;
cin >> b;
return a,b;
}
int main() {
int a;
int b;
a,b = Car();
cout << "Print Values " << (a,b); // <--- Line 25
return 0;
}
假设您将 10 和 15 作为第一个和第二个输入。为什么 15 是第 25 行 cout
语句中唯一要打印的变量。
解决方法
C++ 不是这样工作的。
您需要:
std:: pair<int,int> Car() {
...
return {a,b};
}
auto [a,b] = Car();
std::cout << a << "," << b;
你有什么:
int Car()
Car
是一个返回 1 int
的函数。
return a,b;
这里有逗号运算符,它计算每个参数并丢弃除最后一个参数之外的所有参数。所以它返回 b
。
a,b = Car();
(a,b)
再次是逗号运算符。 a
被丢弃,b
被分配。然后 a
被丢弃并打印 b
。
与 Python 不同,C++ 没有内置的元组概念。您的 Car
函数被声明为返回一个整数,因此您将获得一个整数。另一种方法是在 std::pair<int,int>
中使用 #include <utility>
,如下所示:
std::pair<int,int> Car() {
// ...
return std::make_pair(a,b);
}
我假设程序可以编译,因为在 C/C++ 中,您编写的逗号分隔表达式列表是按顺序计算的,并且只返回该列表中的最后一个表达式或项目。因此,您的第一个 Car()
函数返回最后一个整数 b
,并且您只将 b
中的 main()
赋值给另一个 b
。同样,您的 cout
仅打印 b
,因此为 15。
我建议做的是使函数为空并通过引用传递变量。当您通过引用传递变量时,您可以在函数中更改它们的值,并且它们不会因作用域而丢失。这是因为通过引用传递引用了内存中存储该变量的位置,而不是像通过值传递那样创建副本(您所做的)。
#include <iostream>
using namespace std;
void car(int &a,int &b); // function prototype calling for a and b to be passed by
// reference
int main()
{
int a = 0;
int b = 0;
car(a,b);
cout << "Print Values " << a << " " << b;
return 0;
}
void car(int &a,int &b)
{
int temp = 0;
cout << "Fuel Tank" << endl;
cin >> a;
cout << "MPG" << endl;
cin >> b;
}
如您所见,该函数不是返回值,而是通过访问变量的位置来更改变量的值。
编辑:通常,函数将位于 main 之下,并且您拥有 main 之上函数的原型(如我的示例所示)。
另一件事,您将函数命名为“Car();”。通常,函数以第一个单词的小写字母开头,后面的单词大写。这使得它们更容易与类的构造函数名称混淆,其中第一个单词的第一个字母通常大写。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。