下面的代码可以正常工作,但年龄没有任何价值,并且会终止。
#include <iostream>
#include <string>
using namespace std;
class user{
int id,level=1,kills=0,age;
char name[20],server[40];
public:
void get(){
cout<<"Enter your name:";
cin>>name[20];
cout<<"Enter your age:";
cin>>age;
}
};
int main(){
user u;
u.get();
return 0;
}
/*Output
Enter your name:Jack
Enter your age:
C:\Users\user\documents\c++
*/
在输出部分,年龄不被接受,程序终止。
答案 0 :(得分:2)
使用string name
代替char name[20]
来获取多字符值。字符名称[20]将在使用单个字符后终止。
此外,其值将不会显示在给出的输出中。
修改后的代码以供参考。
#include <iostream>
#include <string>
using namespace std;
class user{
int id,level=1,kills=0,age;
string name,server;
public:
void get(){
cout<<"Enter your name:";
cin>>name;
cout<<"Enter your age:";
cin>>age;
}
//test output
void put(){
cout<<name<<endl;
cout<<age<<endl;
}
};
int main(){
user u;
u.get();
//test
u.put();
return 0;
}
答案 1 :(得分:1)
只需将代码修改为此:
#include <iostream>
#include <string>
using namespace std;
class user{
int id,level=1,kills=0,age;
char name[20],server[40];
public:
void get(){
cout<<"Enter your name:";
cin>>name; // changes done here
cout<<"Enter your age:";
cin>>age;
}
};
int main(){
user u;
u.get();
return 0;
}
完成工作:)
答案 2 :(得分:1)
您的问题在这里:
cin>>name[20];
为什么:
'name [20]'是您之前定义的数组的第21个字符。从0开始计数!因此,它只是一个字符。如果您现在输入的不止一个字符,其余的将由cin>>age
读取。
示例:
cout<<"Enter your name:";
cin>>name[20];
cout<<"Enter your age:";
cin>>age;
std::cout << "Name " << name << std::endl;
std::cout << "Age " << age << std::endl;
然后输入:
Enter your name:1234
Enter your age:Name
Age 234
如您所见,名称中现在有“ 1”,其余的存储在年龄中。
但是要注意:您将数组定义为`name [20],这意味着您有0..19个元素。访问名称[20]是错误的!
但是您只想做的是:
cin >> name;
答案 3 :(得分:0)
处理字符串(一长串字符)甚至带空格的字符串的最简单方法就是使用C ++中的以下库。
#include <bits/stdc++.h>
然后只声明一个字符串变量。
String name;
现在,您可以保存很长的字符串,而不会出现任何错误。例如
name = jshkad skshdur kslsjue djsdf2341;
您将不会有任何错误,请尽情享受;)