gpt4 book ai didi

c++ - 读取一个值并使用它而不用声明一个额外的变量,就像在 Java 的 sc.next() 中一样

转载 作者:太空宇宙 更新时间:2023-11-04 03:43:39 25 4
gpt4 key购买 nike

在 java 中你可以这样做:

Scanner sc = new Scanner(System.in);
int total = 0;

for(int i = 0; i<something;i++){
total+=sc.nextInt(); // <<< Doesn't require an extra variable
}

我的问题是:你能用 C 或 C++ 做类似的事情吗?如果有,是不是更好?

这是我目前所做的:

int total;
int aux; // <<< Need an extra variable to read input
for(int i = 0; i<something;i++){
scanf("%d",&aux);
total+=aux; // <<< and add the read value here
}

最佳答案

在 C++ 中最明显的方法是这样的:

int total = std::accumulate(std::istream_iterator<int>(std::cin), 
std::istream_iterator<int>(),
0);

就目前而言,这会从输入文件中读取它可以读取的所有 int,而不需要单独指定输入值的数量。如果你非常想要,你可以指定一个 N,但至少根据我的经验,你不太可能想要那样。

如果你真的想直接指定 N,处理这种情况的最干净的方法可能是定义一个 accumulate_n ,它的工作方式类似于 std::accumulate:

template <class InIt, class T>
T accumulate_n(InIt in, size_t n, T init) {
for (size_t i=0; i<n; i++)
init += *in++;
return init;
}

您可以像以前的版本一样使用它,但(显然足够)指定要读取的值的数量:

int total = accumulate_n(std::istream_iterator<int>(std::cin), 
something,
0);

我想我应该补充一点(尤其是对于生产代码)您可能想要在上面的 accumulate_n 定义中的模板参数上添加一些约束。我也没有尝试对错误输入的可能性做任何事情,例如包含数字以外的内容,或者只是包含比指定更少的项目。这些可以处理,但我不记得 Java 是如何处理它们的;我可能需要进行一些思考/研究,以找出/弄清楚对此类问题的确切 react 是最合适的。

关于c++ - 读取一个值并使用它而不用声明一个额外的变量,就像在 Java 的 sc.next() 中一样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26639621/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com