【问题标题】:Why the program is not working properly?为什么程序不能正常工作?
【发布时间】:2016-12-14 03:07:01
【问题描述】:

我是编程新手,并试图在 C++ 中实现 struct 程序,这是一个简单的程序,但它没有打印出正确的结果。请告诉我为什么?

#include <iostream>
using namespace std;
struct classroom {
    int number;
    char name[9];
    int marks;
    void getAndPrint()
    {
        cout << "struct classroom ";
        cin >> number;
        cout << number << '\n';

        cin.get(name, 9);
        //cin>>name;
        cout << name;

        cin >> marks;
        cout << marks;
    }
};
int main()
{
    classroom room1;
    room1.getAndPrint();
    int i;
    cin >> i;
    return 0;
}

在 getAndPrint() 函数中,我使用的是 cin.get().. 编译器会正确执行直到打印“数字”,但是当它出现在 cin.get(name,9) 时,它会打印垃圾并跳过其余部分函数内部的代码。如果我使用 cin>>name 那么它工作正常。 谁能告诉我到底是什么问题?

【问题讨论】:

  • 您可能想阅读有关cin.get 的信息,不要以为它在做您期望的事情。理解 C++ 流很重要。此外,在不相关的说明中,您永远不会调用您的函数。
  • 您需要阅读 C++ 书中有关 C++ 流的章节,特别强调格式化和未格式化操作。
  • 除非你真的需要,否则不要使用char[] - std::string 更容易!
  • @JackDeeth 很好,不确定这是否一直都是好的建议。他们有数以千计的旧库和使用 char[] 作为 std::string 可以工作的函数的参数的东西。 OP 应该对使用 char[] 这样或作为指针感到满意。

标签: c++


【解决方案1】:

首先,在 C++ 中,struct 是类,而 access_modifier 是公共的。 其次,您应该尝试阅读: Difference between cin and cin.get() for char array

【讨论】:

    【解决方案2】:

    结构体定义中不包含see这样的函数

    room1.see();
          ^^^^
    

    我想你是说

    room1.getAndPrint();
    

    也在此声明之前

    cin.get(name, 9);
    

    至少插入此语句

    cin.ignore();
    

    或者你甚至可以包含标题&lt;limits&gt; 和插入语句

    #include <limits>
    
    //...
    
    cin.ignore( std::numeric_limits<streamsize>::max(), '\n' );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-18
      • 2020-09-19
      • 2016-09-07
      • 1970-01-01
      • 1970-01-01
      • 2016-07-16
      • 2019-01-04
      • 2020-09-03
      相关资源
      最近更新 更多