Wie ein cin Eingang zu einem Command Line Argument Eingang in C ++ ändern

stimmen
-1

Ich versuche, meinen Code zu ändern, für eine cin Benutzereingabe von x und y Werten von bitten, ein einzigen Befehlszeile Argument mit dem Namen einer Datei zu verwenden. Die Datei weist eine Reihe von Doppel für x und y, wobei ein Paar auf jeder durch ein Leerzeichen getrennt Linie. Ich verstehe, wie Sie den Code zu schreiben, wie ich hier tat, aber wenn es Zeilenargumente befehlen kommt, ich verwirrt. Wenn jemand irgendwelche Tipps bieten könnte oder helfen, den Code bei der Umwandlung, wäre ich sehr dankbar.

1 #include <iostream>
2 #include <vector>
3 #include <cmath>
4 
5 using namespace std;
6 
7 double correlation_r(const vector<double> &x, const vector<double> &y);
8 double mean(const vector<double> &x_obs);
9 double st_dev(const vector<double> &x_obs);
10 void least_squares_regression(const vector<double> &x, const vector<double> &y);
11 
12 int main(){
13     
14     double x;
15     double y;
16     vector<double> x_obs;
17     vector<double> y_obs;
18     
19     cout << Please enter two real number values for x and y: ;
20     
21     while(cin >> x >> y){
22         if (!cin.good()){
23             break;
24         } else {
25             x_obs.push_back(x);
26             y_obs.push_back(y);
27             
28             cout << Please enter two real number values for x and y or a string to terminate: ;
29         }
30     }
31     
32     if(x_obs.size()==0||x_obs.size()==1){
33         cout << The sample was too small to be useful.;
34         return 0;
35     }
36     
37     cout << The sample mean of x is  << mean(x_obs) << endl;
38     cout << The sample mean of y is  << mean(y_obs) << endl;
39     
40     cout << The sample standard deviation of x is  << st_dev(x_obs) << endl;
41     cout << The sample standard deviation of y is  << st_dev(y_obs) << endl;
42     
43     if(st_dev(x_obs)==0.0){
44         cout << The correlation is undefined. << endl;
45     } else if(st_dev(y_obs)==0.0&& st_dev(x_obs)!=0.0){
46         cout << The correlation is undefined. << endl;
47     } else {
48         cout << The sample correlation is  << correlation_r(x_obs, y_obs) << endl;
49     }
50     
51 
52     least_squares_regression(x_obs, y_obs);
53     
54     return 0;
55 }
56 void least_squares_regression(const vector<double> &x, const vector<double> &y){
57 double m;
58 double b;
59 if(st_dev(x)!=0 && st_dev(y)!=0){
60  m=correlation_r(x,y)*(st_dev(y)/st_dev(x));
61  b= mean(y)-(m*mean(x));
62  cout << The least squares regression line is y= << m << x+  << b << endl;
63 } else if(st_dev(x)==0){
64  cout<< The least squares linear regression line is undefined.<< endl;
65 } else if(st_dev(y)==0 && st_dev(x)!=0){
66  cout<< The least squares linear regression line is y= << mean(y) << endl;
67 }
68 return;
69 }
70  
71
72 double correlation_r(const vector<double> &x, const vector<double> &y){
73 double r = 0.0;
74 for(int i = 0; i < x.size(); i++){
75     r += (x[i] - mean(x))*(y[i] - mean(y))/st_dev(x)/st_dev(y);
76 }
77 return r = r / (x.size() - 1.0);
78 }
79
80
81 double mean(const vector<double> &x_obs){
82 double total = 0.0;
83 for (int i = 0; i < x_obs.size(); i++){
84  total += x_obs[i];
85 }    
86 return total/x_obs.size();
87 }
88
89 double st_dev(const vector<double> &x_obs){
90 double x_bar = mean(x_obs);
91 double total = 0.0;
92 for (double elem : x_obs){
93  total += pow(elem - x_bar, 2);
94 }
95 return pow( total/(x_obs.size() - 1.0), .5);
96 }
Veröffentlicht am 07/11/2018 um 23:51
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
1

Sie benötigen eine Haupt-Definition ändern

int main(int argc, char ** argv)

argc „Argument count“ ist die Anzahl der Argumente, durch Leerzeichen getrennt, übergeben Sie Ihr Programm

argv„Argument value“ ist ein Array von c Strings , die Ihre Argumente halten. argv[0]immer yor Programme Pfad aufrufen.

So zu tun , was Sie erreichen wollen, Ihr Haupt ändern und die Befehlszeilenargumente finden zu erstellen fstreamoder ifstreamObjekt , das ziemlich genau wie Ihr Standard wirkt istreamFreund cinnur , dass es aus Dateien liest stattstdin

EDIT: Ich würde sagen, dass Sie nicht Ihre Hauptüberlasten können, wie Sie bitte aber, dass diese die beiden Unterschriften für die Standard-Hauptverfahren gibt.

Beantwortet am 07/11/2018 um 23:59
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more