我试图制作一个程序来获取用户的整数输入,然后将该int中的每个数字过滤为偶数和奇数。完成代码时没有任何错误,但是运行代码时会出错。
我的代码:
#include <iostream>
#include <string>
#include <array>
#include <stdio.h>
#include <cstring>
#include <sstream>
using namespace std;
int main() {
int input = NULL;
int EvenNumbering = 0;
int OddNumbering = 0;
cout << "Please input a number: ";
cin >> input;
string str = to_string(input); //Convert it to string
char cstr[str.length];
int EvenNo[str.length];
int OddNo[str.length];
strcpy(cstr , str.c_str()); //Put it into char array
//Now filter Even number and Odd number
for (string x : cstr) {
int z = stoi(x);
if (z % 2 == 0) {
EvenNo[EvenNumbering] += z;
EvenNumbering++;
}
else {
OddNo[OddNumbering] += z;
OddNumbering++;
}
}
cout << endl;
cout << "Even Numbers: ";
for (int x : EvenNo) {
cout << x << ", ";
}
cout << endl;
cout << "Odd Numbers: ";
for (int x : OddNo) {
cout << x << ", ";
}
system("pause");
return 0;
}
我的错误:
source.cpp(18): error C2131: expression did not evaluate to a constant
source.cpp(18): note: a non-constant (sub-)expression was encountered
source.cpp(19): error C2131: expression did not evaluate to a constant
source.cpp(19): note: a non-constant (sub-)expression was encountered
source.cpp(20): error C2131: expression did not evaluate to a constant
source.cpp(20): note: a non-constant (sub-)expression was encountered
source.cpp(26): error C2065: 'x': undeclared identifier
source.cpp(40): error C2065: 'x': undeclared identifier
source.cpp(47): error C2065: 'x': undeclared identifier
1>Done building project "Question.vcxproj" -- FAILED.
对C ++还是个新手,这是我的第一个项目,所以如果我犯了一些初学者的错误,请原谅我。
答案 0 :(得分:0)
问题(一个问题)在这里:
string str = to_string(input); //Convert it to string
char cstr[str.length];
int EvenNo[str.length];
int OddNo[str.length];
str
字符串在运行时进行了初始化,因此其长度无法在编译时得知。
但是str.lenght
用于设置三个C样式数组的维度。
在C ++(标准版本)中,必须知道C样式数组的大小。
建议:对std::vector
,cstr
和EvenNo
使用OddNo
答案 1 :(得分:0)
这三行不是合法的C ++语法:
char cstr[str.length];
int EvenNo[str.length];
int OddNo[str.length];
要指出的第一个错误是length()
函数是一个函数,而不是属性。因此语法为str.length()
(注意括号表示函数调用)。
但是除此之外,C ++中的数组必须使用常量表达式声明,以表示条目数,而不是运行时派生的值。
在C ++中完成动态数组的方式(或最优选的方式)是使用std::vector
:
#include <vector>
//...
string str = to_string(input); //Convert it to string
std::vector<char> cstr(str.length());
std::vector<int> EvenNo(str.length());
std::vector<int> OddNo(str.length());
此外,确实不需要cstr
。既然cstr
是vector<char>
,那么下一行将导致失败:
strcpy(cstr , str.c_str()); //Put it into char array
由于cstr
不再是char
的数组,因此将不会(或不应)进行编译。解决此问题的方法是完全摆脱cstr
,而在整个程序中都使用str
。
但是,如果您坚持保留std::vector<char>
,则可以使用以下方法,但是实际上您应该摆脱cstr
。但是这里:
strcpy(&cstr[0] , str.c_str()); //Put it into char array
如果cstr
仍然是数组,则以下内容也可以工作。