【问题标题】:Nothing at input cin C++输入 cin C++ 中没有任何内容
【发布时间】:2012-02-21 18:48:43
【问题描述】:

我尝试通过这种方式验证用户是否没有输入任何内容

bool null_input = false;
int i = 0;

while (null_input == false) {

char *name = new char[255];
std::cout<<"Name :";
std::cin>>name;

if (name == "") {

null_input = true;
break;

 }

else star[i++].name = name;

}

无论如何,如果我按 ENTER 而不输入任何内容,cin 仍然等待有效输入。问题是如何正确验证是否没有引入任何内容?

【问题讨论】:

  • 使用std::string + std::getline() 代替std::cin&gt;&gt;name;(当namechar* 时,name == "" 将永远无法正常工作)。
  • new char?你在用哪本 C++ 书?
  • 建议:代替“char *name = new char[255];”,使用:“String name;”这样,你之后就不需要释放任何东西了。而且它是一种更 C++ 的做事方式......

标签: c++ cin


【解决方案1】:

C++ == 运算符将实际比较指针。您想使用字符串,而不是 char*(或使用 C 风格的 strcmp)。

例如:

char*a = "abc"
char*b = "abc"
a == b

返回假。

【讨论】:

  • 这可能是truefalse。实际上我希望它通常是true,因为编译器可以组合重叠的字符串。
【解决方案2】:

声明:

std::cin >> name

在开始真正的阅读之前会跳过每个空白字符。以下字符被视为空白字符(空格、制表符、CR)。

因此,它会等到输入不同于 blak 的内容后才开始读取 `name'。

请注意,如果键入的字符串长于缓冲区大小 (255),则此代码是不安全的。

【讨论】:

    【解决方案3】:

    据我了解,你不能使用 c++ string,所以希望这个 c 风格的代码可以为你工作

    #include <iostream>
    #include <cstring>
    using namespace std;
    
    int main()
    {
        const int name_size = 255;
        char *name = new char[name_size];
        while (true) {
            cout << "Name :";
            cin.getline(name, name_size);
            if (strlen(name) != 0) break;
            cout << "not a valid name...";
        }
    
        cout << "got the name " << name << " -- it is OK!\n";
        delete [] name;
        return 0;
    }
    

    希望对您有所帮助,与char * 玩得开心! ))

    【讨论】:

      【解决方案4】:

      除了代码的非 C++ 特性之外,确切的问题是 name 是一个指向字符的指针,而 "" 是一个字符数组。代码 name == "" 返回 false,因为 name 不指向数组中的第一个字符。相反,您需要通过检查 NULL 终止符是否是第一个字符来检查已分配的数组是否为空。 if (name[0] == '\0')

      现在对于 C++ 特性:不要使用 char*,使用 std::string。此外,如果您收到无效数据,您的代码会继续提示。

      【讨论】:

        【解决方案5】:

        您还应该记住,由“new”创建的任何内容都必须发布。您的算法中存在严重的内存泄漏。在这种情况下,堆分配不是一个好方法。

        最简单的解决方案是使用 std::string。它更安全(没有内存泄漏,您可以放置​​超过 255 个符号的字符串)。 [i++] 中还有 I++ 确保“i”不会高于数组大小(我猜它是一个数组)。有一个 std::vector 可以帮助你。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-07-08
          • 2021-02-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多