为啥程序不能正常工作?
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();
或者你甚至可以包含标题<limits>
和插入语句
#include <limits>
//...
cin.ignore( std::numeric_limits<streamsize>::max(), '\n' );
【讨论】:
以上是关于为啥程序不能正常工作?的主要内容,如果未能解决你的问题,请参考以下文章
我的 quickSort() 程序不能正常工作,为啥? [关闭]