gpt4 book ai didi

c++ - cin >> 未知类型的函数模板 arg

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:12:42 24 4
gpt4 key购买 nike

我有一个函数模板和主要如下:

 template <class type > type* calculate(type inputVal) {
type val;
static int counter = 0;
static type sum = inputVal;
static type average = inputVal;
static type* address = &sum

do {
cout << "Enter value: ";
cin >> val;
counter++;
sum += val;
average = sum / counter;
} while (!cin.eof());
return address;
}

void main() {
int num;
cout << "Enter Value: ";
cin >> num;
int *ptr = calculate(num);
cout << "SUM: " << *ptr << " AVG: " << *(ptr+1);
}

我的问题是,这应该适用于不同的输入类型,而不仅仅是 int,因此如果用户首先输入 float,它会将所有内容都视为该类型,就像用户输入 char 一样。

模板函数也不能打印结束值。

最佳答案

普通变量 sum 被视为指针算术(N3337 5.7 加法运算符)的单元素数组,当 ptr 指向它时,ptr +1 未指向有效对象,因此不得取消引用。如果您想要连续的内存区域,请使用数组。

还要注意

  • 在更新 sumaverage 之后检查 !cin.eof() 似乎不是一个好主意,因为它会使用无效的 (重复)数据。在处理数据之前检查输入是否成功。
  • 在标准 C++ 中,在全局命名空间中声明 void main()(或返回类型不是 intmain)是非法的。除非您有一些特殊原因——例如,您的老板或老师禁止编写符合标准的代码——您应该使用 int main()(在本例中)。
  • 您应该将counter 初始化为1 以将inputVal 放入数字中。避免将输入作为参数来避免编写重复代码似乎更好。

试试这个:

#include <iostream>
using std::cin;
using std::cout;

template <class type > type* calculate(type inputVal) {
type val;
static int counter = 1;
static type buffer[2];
type& sum=buffer[0];
type& average=buffer[1];
sum=average=inputVal;
static type* address = buffer;

for(;;) {
cout << "Enter value: ";
if(!(cin >> val)) break;
counter++;
sum += val;
average = sum / counter;
}
return address;
}

int main() {
int num;
cout << "Enter Value: ";
cin >> num;
int *ptr = calculate(num);
cout << "SUM: " << *ptr << " AVG: " << *(ptr+1);
}

或者没有来自参数的输入:

#include <iostream>
using std::cin;
using std::cout;

template <class type > type* calculate() {
type val;
static int counter = 0;
static type buffer[2];
type& sum=buffer[0];
type& average=buffer[1];
sum=0; // the type used has to be capable to be converted from integer 0
average = 0;
static type* address = buffer;

for(;;) {
cout << "Enter value: ";
if(!(cin >> val)) break;
counter++;
sum += val;
average = sum / counter;
}
return address;
}

int main() {
int *ptr = calculate<int>();
cout << "SUM: " << *ptr << " AVG: " << *(ptr+1);
}

关于c++ - cin >> 未知类型的函数模板 arg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38365949/

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