为什么cin操作未定义?

时间:2017-10-13 03:45:43

标签: c++ arrays boolean cin

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

main()
{

    bool string1[20];
    cout << "Enter string: ";
    cin >> string1;
    int counter = 0;
    int length;
    length = strlen(string1);

这是不完整的代码,但我的问题是为什么在使用cin时出现编译错误?它说:

  

错误:'operator&gt;&gt;'不匹配(操作数类型为'std :: istream {aka std :: basic_istream&lt; char&gt;}'和'bool [20]')

在这一行:

 cin >> string1;

我不确定如何解决这个问题。

3 个答案:

答案 0 :(得分:1)

bool string1[20];对于用户输入作为字符串是错误的选择,它所做的就是创建一个20布尔数组,truefalse这不是什么你想要的。

你所追求的是你所包含的#include <string>

string string1;
cout << "Enter string: ";
cin >> string1;

使用strlen

提供的length方法取代std::string,而不是auto length = string1.length()

{{1}}

答案 1 :(得分:0)

没有operator>>来读取bool值数组。您需要的是一系列char值:

#include <iostream>
#include <string>
#include <iomanip>
using namespace std;

int main() {
    char string1[20];
    cout << "Enter string: ";
    cin >> setw(20) >> string1;
    int length = strlen(string1);

或者更好,一个std::string

#include <iostream>
#include <string>
using namespace std;

int main() {
    string string1;
    cout << "Enter string: ";
    cin >> string1;
    int length = string1.length();

答案 2 :(得分:-1)

我认为你把字符串与数组混淆了。代码中的string1不是一个字符串,而是一个数组。因此,您无法在不提供正确索引编号的情况下将数据放入其中。还记得它的bool类型,所以你只能输入0/1 / true / false值。

同样,您在代码中使用了strlen()函数,该函数用于确定字符串的长度,但您的数组是一个数组。你没有问过这个问题但是当我在IDE中运行代码时出错了。

这是一种方法:

    main()
    {
        bool string1[20];
        cout << "Enter string: ";
        for(int i=0;i<20;i++)//iterating through the boolian array
        {
            cin >> string1[i];
        }
        int counter = 0;
        int length;
        length = sizeof(string1)/sizeof(string1[0]);
        cout<<length;//printing the size of the array
    }