为啥程序不能正常工作?

Posted

技术标签:

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

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

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

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

        cin >> marks;
        cout << marks;
    
;
int main()

    clas-s-room 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[] 这样或作为指针感到满意。 【参考方案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' );

【讨论】:

以上是关于为啥程序不能正常工作?的主要内容,如果未能解决你的问题,请参考以下文章

为啥这个java程序不能正常工作?

我的 quickSort() 程序不能正常工作,为啥? [关闭]

为啥我的 pygame 应用程序循环不能正常工作? [复制]

为啥 React 路由不能在服务器上正常工作?

为啥 memset() 放在循环体内时不能正常工作?

为啥我不能在 docker 中构建这个 nuxtjs 应用程序,而本地构建工作?