C++;比较长度-信号Sigabrt 我是C++新手。我已经看了很多教程,但我还是很新,只是在尝试熟悉它。我正在测试比较字符串长度,但我有一些问题。这是代码
*编辑:“cin”中的[10]在修复后仍给出错误。 错误是线程1:信号Sigabrt-如果我将>更改为a<,那么它会工作。。。但这不是我想要的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 编辑: 您上次的
#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;
}