C++ 如何使用istream对象在对象数组中输入多个字符?(和\0作为sentinel值。我下面的代码将不起作用)

C++ 如何使用istream对象在对象数组中输入多个字符?(和\0作为sentinel值。我下面的代码将不起作用),c++,user-input,istream,C++,User Input,Istream,以下代码将不起作用。有人能告诉我为什么吗?这是我第一次在这里发帖,所以我很抱歉,如果我的问题似乎含糊不清 istream &operator>>(istream &in, CharacterSet &s) { for (int x = 0; x < ARRSIZE; x++) { s.charArray[x] = false; } char myChar = '\0'; do { in &g

以下代码将不起作用。有人能告诉我为什么吗?这是我第一次在这里发帖,所以我很抱歉,如果我的问题似乎含糊不清

istream &operator>>(istream &in, CharacterSet &s)
{
   for (int x = 0; x < ARRSIZE; x++)
   {
      s.charArray[x] = false;
   }

   char myChar = '\0';

   do
   {
      in >> myChar;

      if (myChar >= 32 && myChar <= 126)
      {
         s.charArray[myChar - 32] = true;
      }

   } while (myChar != '\0');

   return in;
}
istream&operator>>(istream&in,CharacterSet&s)
{
对于(int x=0;x>myChar中;

如果(myChar>=32&&myChar逐行读取,然后在行中的字符上循环。使用空行作为哨兵

istream &operator>>(istream &in, CharacterSet &s) {
    for (int x = 0; x < ARRSIZE; x++) {
        s.charArray[x] = false;
    }

    std::string line;
    while (in.getline(line) && line != "") {
        for (char myChar: line) {
            if (isprint(myChar)) {
                s.charArray[myChar - ' '] = true;
            }
        } 
    }
    return in;
}
istream&operator>>(istream&in,CharacterSet&s){
对于(int x=0;x你应该使用字符常量(例如‘a’或‘1’)的魔法数(特别是因为C++不要求ASCII编码,它也使代码更清晰)。@Borgleader感谢您的回答。这是一个类的成员函数。它的目标是将布尔值数组设置为true或false。如果字符有效,则为true。数组中只能存储可打印字符,因此我有一个包含95个元素的数组,设置为false,如果用户输入它们,则将其设置为true。空格为数组元素0ll~字符是数组中的最后一个。你说的幻数是什么意思?@Borgeader指的是
myChar>=32
。它应该是
myChar>=''&&myChar What does“将不起作用”是什么意思?它做错了什么?你确定输入流有空字节吗?为什么不一直读到EOF?@JohnMarkCaguicla哦,我明白了,谢谢你。这很有意义。