【问题标题】:why does adding a space makes the compiler go into an infinite loop?为什么添加空格会使编译器进入无限循环?
【发布时间】:2013-02-05 04:22:43
【问题描述】:

案例 3 是向结构中添加书籍的选项。只要添加标题不带空格的书籍,它们就可以,每当我尝试输入一个包含空格的名称时,编译器就会发疯,有点像执行无限循环时会发生的事情。为什么以及解决方案是什么?

struct bookStruct
{
    string bookTitle;
    int bookPageN;
    int bookReview;
    float bookPrice;
};

const int MAX_BOOKS=10;



case 3:
        {
            for(int i=0;i<MAX_BOOKS;i++)
            {
                if(books[i].bookTitle=="\0")
                {
                cout << "\nPlease Enter the Title: ";
                cin >> books[i].bookTitle ;
                cout << "\nPlease Enter Total Number of Pages: ";
                cin >> books[i].bookPageN ;
                cout << "\nPlease Enter Rating (stars): ";
                cin >> books[i].bookReview ;
                cout << "\nPlease Enter Price: ";
                cin >> books[i].bookPrice;
                cout << "\n\nBook Added.\n\n";
                break;
                }
            }break;

        }

【问题讨论】:

  • 您已经发布了 3 个关于您的代码的问题。你不认为你应该通过像谷歌这样的搜索或使用调试器来自己解决这些问题吗?
  • 编译器不会做任何不寻常的事情。卡住的是编译器代表您创建的程序。
  • @Rapptz 我整天都在尝试,没有运气,也没有来自这里的有效答案。
  • 如果您认为对您的问题给出的答案都不是有效的,或者更确切地说是“可接受的”,那么您不应将它们标记为已接受。
  • 顺便说一下,与"\0"比较有点多余,因为""包含一个'\0'字符,而前者包含两个。更好的是if (books[i].bookTitle.empty())

标签: c++ arrays loops struct


【解决方案1】:

输入运算符&gt;&gt;在读取字符串时停在空格处。
你要使用的是std::getline

cout << "\nPlease Enter the Title: ";
std::getline(std::cin, books[i].bookTitle);

输入运算符&gt;&gt; 在读取数字时也会停在空格或换行符处(将它们留在输入流上)。因此,当您翻到下一本书时,输入流上仍然有一个 '\n' 字符。因此对于数字,您还需要使用 std::getline()。但在这种情况下,您需要将值转换为整数。

cout << "\nPlease Enter Total Number of Pages: ";
std::string line;
std::getline(std::cin, line);

std::stringstream linestream(line);
linestream >> books[i].bookPageN ;

【讨论】:

  • 有什么解决方法的建议吗?
  • @MokammelHossainSanju 再次阅读我的答案。
  • 为什么这不起作用并且当我使用空格时仍然使我的代码进入无限循环。
  • @MokammelHossainSanju:它进入无限循环的原因是流变坏了,并且代码的其他部分存在您未显示的错误。要解决本地问题,请参阅更新后的答案。
  • @MokammelHossainSanju:但你做错了。您应该为 bookStruct 类定义输入运算符。
猜你喜欢
  • 2011-04-19
  • 2011-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-28
  • 1970-01-01
相关资源
最近更新 更多