C++;比较长度-信号Sigabrt 我是C++新手。我已经看了很多教程,但我还是很新,只是在尝试熟悉它。我正在测试比较字符串长度,但我有一些问题。这是代码

C++;比较长度-信号Sigabrt 我是C++新手。我已经看了很多教程,但我还是很新,只是在尝试熟悉它。我正在测试比较字符串长度,但我有一些问题。这是代码,c++,C++,*编辑:“cin”中的[10]在修复后仍给出错误。 错误是线程1:信号Sigabrt-如果我将>更改为a11){ cout行cin>>名称[10];不符合您的期望 由于name[10]是一个char,您要求从cin中提取一个char,并将其放入name[10],数组末尾的一个位置(最后一个有效位置是name[9}) 你想要的可能是: cin.width(10); cin >> name; 它要求从cin中最多提取9个字符,并将它们放在名称中,后跟一个终止的null 编辑: 您上次的

*编辑:“cin”中的[10]在修复后仍给出错误。 错误是线程1:信号Sigabrt-如果我将>更改为a<,那么它会工作。。。但这不是我想要的

#include <iostream>
using namespace std;

int main(){
    char name[10];
    cout<<"What is your name? ";
    cin>> name;
    if(strlen(name)> 11){
        cout<<"Sorry we only handle names less than 10 letters";
    }
    return 0;

}
#包括
使用名称空间std;
int main(){
字符名[10];
姓名;
如果(strlen(name)>11){

cout行
cin>>名称[10];
不符合您的期望

由于
name[10]
是一个
char
,您要求从
cin
中提取一个char,并将其放入
name[10]
,数组末尾的一个位置(最后一个有效位置是
name[9}

你想要的可能是:

cin.width(10);
cin >> name;
它要求从
cin
中最多提取9个字符,并将它们放在名称中,后跟一个终止的null

编辑:

您上次的编辑修复了
[10]
错误,但您仍然有一个问题。如果允许用户在大小为10的缓冲区中输入超过10个字符,您将有未定义的行为,因为您将覆盖可能包含其他变量的内存

唯一简单的方法是在输入字符数组之前用
width
方法限制输入

但是真正的
C++
方法是使用
std::string
,其中大小和分配由
string
类本身管理

编辑2:

下面是一个简单的示例,它仍然使用字符数组,并通过允许多个字符并测试它不被使用,从而安全地保证输入值小于10个字符:

#include <iostream>
using namespace std;

int main(){
    char name[11];
    cout<<"What is your name? ";
    cin.width(11);
    cin >> name;
    if(strlen(name)>=10){
        cout<<"Sorry we only handle names less than 10 letters";

    }
    return 0;
}

就条件而言,我同意谢尔盖的意见

我将更进一步,给您一个使用
std::string
来实现目标的示例。我建议您仔细研究它,并将其用作字符数组的开始类型。 (我没有看整件事,但这可能是一个好的开始)

#包括
#包括
使用名称空间std;
int main(){
字符串名;
cin>>名称;
if(name.length()>11){

这与sigabrt信号有关吗?你的下一项工作是查看
std::string
。在你当前的框架中,不要忘记空终止符。你的
返回0;
应该在
if
语句之外。返回0应该在哪里,对不起,我是新来编码的。另外两个违规行为是:(1)如果您有
char name[10]
,那么您只能在其中放入一个9个字符的字符串,因为您总是需要一个空格作为终止字符;(2)您的检查是反向的(投诉说字符串太长,但您在它太短时触发它)。我是否仍然通过执行char name[10]来声明变量“name”;如果可能的话,你能发布一个我不完全理解的固定版本吗。
#include <iostream>
#include <string>
using namespace std;

int main(){
    string name;
    cout<<"What is your name? ";
    cin >> name;
    if(name.length() >=10){
        cout<<"Sorry we only handle names less than 10 letters";

    }
    return 0;
}
#include <iostream>
#include <string>

using namespace std;

int main(){
    string name;
    cin >> name;
    if(name.length() > 11){
        cout<<"Sorry we only handle names less than 10 letters";
    }
    cin.ignore();
    cin.ignore();
    return 0;

}