我对C ++很陌生,我在阅读错误时遇到了问题我能够消除大部分错误,但是我已经找到了一些,我请求帮助。
这是程序
#include <string>
#include <iostream>
using namespace std;
int main(){
int *bN = new int[9];
string bankNum;
int *number = new int[9];
int total, remain;
int *multi = new int{7,3,9,7,3,9,7,3};
cout<<"Please enter the bank number located at the bottom of the check"<<endl;
cin>>bankNum;
for(int i = 0; i < 8; i++){
bN[i]= (bankNum[i]-48);
}
for(int i = 0; i < 8;i++){
cout<<bN[i];
}
cout<<endl;
for(int i = 0; i < 8;i++){
cout<<multi[i];
}
cout<<endl;
for(int i = 0; i < 8;i++){
bN[i] = bN[i] * multi[i];
cout<< bN[i];
}
cout<<endl;
for(int i = 0; i < 8;i++){
total += bN[i]
cout<<total;
}
cout<<endl;
remain = total % 10;
if(remain == (bankNum[9] - 48)){
cout<<"The Number is valad"<<endl;
cout<<remain<<endl;
}
}
和错误
wm018@cs:~$ c++ bankNum.cpp
bankNum.cpp: In function âint main()â:
bankNum.cpp:9:19: warning: extended initializer lists only available with -std=c++0x or -std=gnu++0x [enabled by default]
bankNum.cpp:9:38: error: cannot convert â<brace-enclosed initializer list>â to âintâ in initialization
bankNum.cpp:30:3: error: expected â;â before âcoutâ
答案 0 :(得分:11)
这种初始化方式,使用大括号:
int *multi = new int{7,3,9,7,3,9,7,3};
于2011年被引入该语言。较旧的编译器不支持它;一些较新的(如你的)只有你告诉他们才支持它;对于您的编译器:
c++ -std=c++0x bankNum.cpp
但是,这种初始化形式对于使用new
创建的数组仍然无效。因为它很小并且只在本地使用,所以你可以声明一个本地数组;这不需要C ++ 11支持:
int multi[] = {7,3,9,7,3,9,7,3};
这也有修复内存泄漏的优势 - 如果你使用new
来分配内存,那么你应该在完成它后用delete
释放它。
如果您确实需要动态分配,则应使用std::vector
为您分配和释放内存:
std::vector<int> multi {7,3,9,7,3,9,7,3};
请注意您的GCC版本已经过时,并且对C ++ 11的支持不完整。
答案 1 :(得分:0)
错误-:
1)您的第5个for循环中有一个语法错误,您忘记了;在 total + = b [N]
之后2)因为数组multi很小,并且值和大小是预定义的,然后使用 int multi [] = {7,3,9,7,3,9,7,3}对其进行初始化; 这种方式
提高程序效率的建议: 1)而不是为每个 定义 i 变量 5 次循环将在C / C ++中给出 错误 ,因此为了避免这种情况,您可以将i声明为全局变量