2017-05-03 77 views
0

如何正确传递average()中所需的参数/重载。函数那里面我的主要功能? 正如你可以创建一个函数,它需要两个参数,但我如何通过主参数?如何在C++中正确使用用户输入的参数

#include <iostream> 

using namespace std; 



float average(int v[], int n) { 
    //n = number of elements 
    //v = the vector 

    int sum = 0; 
    int avg = 0; 

    for (int i = 0; i <= n; i++) { 
     cout << "Enter a number: "; 
     cin >> v[i]; 
     sum += v[i]; 

    } 
    avg = (double)sum/n; 

    cout << avg; 

    return 0; 

} 

int main() { 
    average(); 
} 
+2

所以基本上你想知道如何向用户询问10号? – NathanOliver

+0

我想多数民众赞成在一种方式来说:p –

+1

听起来像你可以使用[良好的C++书](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list) – NathanOliver

回答

1

1日的事情是要改变的主要方法取参数...

int main(int argc, char** argv) 

然后

你可以做一个遍历ARGV

for(auto x = 0; x < argc; x++) 
{ 
    std::cout << "argv[" << x << "] = " << argv[x] << std::endl; 
} 

记住所有这些都是字符串,并且参数0是可执行文件的名称...

现在,您可以在运行时循环并接受来自用户的输入...

如果那是您想要的alg。然后做一些事情,如:通过允许用户为他/她想要进入尽可能多的数字,然后用一个特殊的数字或字符结束他们

#include <iostream> 
using namespace std; 

int main() { 
    const auto K = 10; 
    int array[K]; 
    std::cout << "Please give then numbers..." << std::endl; 
    int sum = 0; 

    for (size_t i = 0; i < K; i++) 
    { 
     std::cin >> array[i]; 
    } 


    for (int i = 0; i < K; i++) { 
     sum = sum + array[i]; 
    } 
    double avg = double(sum)/K; 
    std::cout << "avg: " << avg << std::endl; 

    return 0; 
} 
+1

你让它看起来更加复杂,你介意做一个更“简单”的版本,我知道你刚刚发布的方法是“简单”,但如果你看我的代码,我打破了更多一点:p –

+0

嗨@ChristofferNilsson,感谢您的反馈.... –

+1

这更可读,但我试图使用参数,所以,我想创建一个函数的参数,然后起诉它在主要:p –

1

你可以做更多的互动(介意转换的字符的情况下, )例如0,那么你可以计算总和或平均值或...这样的代码是这样的:

#include <iostream> 
using namespace std; 

int main() { 

    int current = 0; 
    int sum = 0; 
    int count = 0; 

    while(true) 
    { 
     cout << "Please enter next number(end by entering 0): "; 
     cin << current; 
     cout << endl; 
     sum = sum + current; 
     count++; 
    } 

    double avg = sum/count; 
    cout << "sum: " << sum << endl; 
    cout << "avg: " << avg << endl; 

    return 0; 
} 

编辑: 如果你真的想使用的参数和功能,这是方式:

#include <iostream> 
#include <stdlib.h>  /* atoi */ 
using namespace std; 

double avg(int argc, char** argv){ 

     int i=1; 
     double sum = 0; 

     while(i<argc){ 
       try{ 
         sum = sum + atoi(argv[i]); 
       } 
       catch(int ex){ 
         cout << "Failed to calculate average" << endl; 
         exit; 
       } 
       i++; 
     } 
     sum = sum/(argc-1); /* note that we have one extra argument because of the name of program. */ 
     return sum; 
} 

int main(int argc, char** argv) { 

    double result = avg(argc, argv); 
    cout << "avg: " << result << endl; 

    return 0; 
} 
+0

有没有办法用这个参数创建一个函数,然后在main中使用该函数? –

+0

@ChristofferNilsson是的,请编辑你的问题,并把你的C#解决方案放在那里,这样我们就可以理解你真正想要的东西。 –

+0

编辑问题 –

0

也许你想这样(按上次编辑):

#include <iostream> 

using namespace std;  

double Average(int a[], int size) 
{ 
    int sum = 0; 

    for (int i = 0; i < 10; i++) { 
    sum = sum + a[i]; 
    } 

    return (double)sum/size; 
} 

int main() { 
    int a[10] = { 1,2,3,4,5,6,7,8,9,10 }; 

    cout << Average(a, sizeof(a)/sizeof(a[0])) << endl; 
    system("pause"); 

    return 0; 
} 

sizeof(a)/sizeof(a[0])是一种方式来获得a数组元素的数量。

还是更类似于C++使用vector模板类解决​​方案:

#include <iostream> 
#include <vector> 

using namespace std;  

double Average(vector<int> a) 
{ 
    int sum = 0; 

    for (auto & v : a) 
    sum = sum + v; 

    return (double)sum/a.size(); 
} 

int main() { 
    vector<int> a = { 1,2,3,4,5,6,7,8,9,10 }; 

    cout << "Average = " << Average(a) << endl; 
    system("pause"); 

    return 0; 
} 

而且具有交互式用户输入:

int main() { 
    vector<int> a; 

    for (int i = 0; i < 10; i++) 
    { 
    cout << "Enter value " << i + 1 << endl; 
    int value; 
    cin >> value; 
    a.push_back(value); 
    } 

    cout << "Average = " << Average(a) << endl; 
    system("pause"); 

    return 0; 
} 
+0

更改我的问题 –

+0

@ChristofferNilsson仍然不清楚你想要什么,你的C++代码在这个问题上没有多大意义。 Pleeeese显示你工作的** C#**代码,这样我们就可以理解你到底想要什么。 –

相关问题