【问题标题】:Is there a way to input just required numbers of characters in a c++ character array有没有办法在 c++ 字符数组中输入所需的字符数
【发布时间】:2020-01-03 22:32:45
【问题描述】:

我必须使用 bool 函数在 C++ 中输入和检查字符数组。如果超过 10 个字符程序必须返回 false。如果少于 10 个字符,prog 必须返回 true。 我尝试了以下方法,但没有得到想要的结果。请各位帮忙

#include<iostream>
#include<cstring>
using namespace std;
bool namefunc( char name[10] );
int main()
{
    char name[10];
    cin.getline(name,10);
    int print = namefunc(name);
    cout<<print;

}
bool namefunc( char name[10] ) {

    if (strlen(name)>10)
        return false;
    else
        return true;
}

【问题讨论】:

  • strlen 永远不能为该数组返回 >= 10,因为一个字符将是空终止符。 cin.getline(名称,10);无论您在提示中输入多少,都会将返回的字节数限制为 10。
  • @Michael 轻微更正:strlen 永远无法为该数组返回 &gt;= 10如果不涉及未定义行为
  • @scohe001 迈克尔就在这里。不可能有UB。 std::iostream::getline 将在 9 个字符处停止,终止并在 cin 中设置一个失败位。

标签: c++ arrays validation


【解决方案1】:

不要使用 c 字符串:

#include<cstring>

使用 C++ std::string:

#include <iostream>
#include <string>

bool namefunc(const std::string& name)
{
    return name.size() <= 10;
}

int main()
{
    std::string name;
    std::cin.getline(name);
    bool print = namefunc(name);
    std::cout << print;

}

【讨论】:

  • 亲爱的,我不能改变我的函数名和参数的数据类型。
  • 你原来的函数错了,char[10] 数组不能有超过 10 个字符而没有未定义的行为。
  • @NadeemKhan 您检查的顺序错误。缓冲区溢出后,您无法检查缓冲区溢出。该程序在那时已经不稳定并且不能被信任在这种情况下,这一点是没有实际意义的。 cin.getline(name,10); 不能给您超过 9 个字符(第 10 个字符由空终止符使用)。如果用户尝试输入超过 9 个字符,cin 将被置于失败状态并变得不可读,直到错误状态为 cleared。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-19
  • 2020-03-01
  • 2021-06-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多