我的C ++程序没有输入就终止了,我该怎么办?

时间:2019-03-09 06:46:51

标签: c++

下面的代码可以正常工作,但年龄没有任何价值,并且会终止。

#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++
*/

在输出部分,年龄不被接受,程序终止。

4 个答案:

答案 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;

您将不会有任何错误,请尽情享受;)