getline的错误在哪?

HoneyC 2008-04-16 09:14:51
//有3个问题,都打了注释了~~~~~找了很多资料,还是不知道为什么~~~
#include <iostream.h>
#include <fstream.h>
class Student
{
private:
int stuID[11];
char stuName[10];
char stuSex[3];
public:
void getData()
{
cout <<"\n请输入学生的学号:";
cin >>stuID; //这里,想请问有没有办法控制输入的长度呢?比如学号定为10个字节?
cout <<"\n请输入学生的姓名:";
cin.getline(stuName,10); //程序通过编译,但运行时,会跳过这里,直接进入下一行,为什么呢?
cout <<"\n请输入学生的性别:";
cin.getline(stuSex,3); //有什么办法使得性别的输入只有“男”“女”两种选择?
}//end of getData()
void dispData()
{
//^^^^^^略
}//end of dispData()
};
int main()
{
Student stuObj;
cout <<"欢迎使用学生信息系统!\n";
int choice;
while ( true )
{
cout <<"\n0.退出系统";
cout <<"\n1.添加学生信息";
cout <<"\n2.查看学生信息";
cin >>choice;

if (choice==1)
{
ofstream outFile("LINPROJECT_student.dat");
char reply='Y';
while (reply=='Y' || reply=='y')
{
cout <<"\n输入详细资料:\n\n";
stuObj.getData();
outFile.write((char*)&stuObj, sizeof(stuObj));
cout <<"是否继续?(Y/N)"<<endl;
cin >>reply;
}
outFile.close();
}//end of if
if (choice==2)
{
//^^^^^^略
}//end of if
if (choice==0)
break;
}//end of while
return 0;
}

...全文
207 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
HoneyC 2008-04-20
  • 打赏
  • 举报
回复
谢谢哈~C++都快结课了,可都还没讲过string的用法,很郁闷,只能自己来学了
诚谢!
HoneyC 2008-04-20
  • 打赏
  • 举报
回复
谢谢哈,有些讲得还是很有用!
worry45678 2008-04-20
  • 打赏
  • 举报
回复
LS
string类不是可以直接用==做比较的.
没必要哟功能strcmp了吧.
zhuzhu3192003 2008-04-20
  • 打赏
  • 举报
回复
2.
#include <string>
#include <stdio.h>



cout <<"\n请输入学生的性别:";
std::string chstusex;
do
{
cin>>stuSex;
std::string man = "男";
std::string woman = "女";
if ( strcmp( stuSex, man.c_str()) == 0 || strcmp( stuSex, woman.c_str()) == 0 )
{
break;
}
else
{
stuSex[0] = '\n';
cout<<"\n请输入正确的学生性别!";
}
} while( 1 );
bagegejin 2008-04-19
  • 打赏
  • 举报
回复
1.char stuID[10]
2.
cout < <"\n请输入学生的学号:";
cin.get(stuID,10).get();
cout < <"\n请输入学生的姓名:";
cin.getline(stuName,10)
HoneyC 2008-04-19
  • 打赏
  • 举报
回复
呵呵,当然想知道!
师姐真会钓长线!呵呵~~~
:)
HoneyC 2008-04-19
  • 打赏
  • 举报
回复
谢谢哈,这些我一定会慢慢学的!
如果有好的书籍来看看也好……总觉得路好长~~~哎
HoneyC 2008-04-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zhuzhu3192003 的回复:]
1.你不要定义成int型,定义成长度为10的字符串就OK了
2.
cout < <"\n请输入学生的姓名:";
cin.ignore(1000,'\n');
cin.getline(stuName,10);
3.stuSex只给三个值就可以了男、女、非法,输入时做个字符比较就OK了,
[/Quote]

先谢谢哈!!!
cin.ignore(1000,'\n');中1000代表的是什么呢?
第三个中具体改怎么写呢?
谢谢!:)
tgh621 2008-04-17
  • 打赏
  • 举报
回复
第2个问题是回车的问题,你在读之前先清空输入缓冲区
xjy1204 2008-04-17
  • 打赏
  • 举报
回复
cin >> stuId; //这个之后缓冲区会留着"\n"(如果你是用回车结束输入而不是用空格的话..)
cin.getline... //这时第一个检测到的就是'\n',所以立即就给函数返回了空字符串,可以如1楼处理一下

想要限制输入长度,可以考虑不使用>>,使用循环get处理,告知用户输入什么字符表示结束,
如果一直不输入结束符,到了限定字符数就跳出循环

另外,希望楼主注意考虑一下程序的健壮性,例如
char stuId[11];
cin>>stuId; //如果输入的字符串很大的话,那么就出现了内存越界..

还得考虑用户的非法输入等等...
K_s_G 2008-04-17
  • 打赏
  • 举报
回复
第一个定义char stuId[11];
cin>>stuId;
stuId[10]='\0';
pengzhixi 2008-04-17
  • 打赏
  • 举报
回复
第2个问题最好是用string 类型
pengzhixi 2008-04-17
  • 打赏
  • 举报
回复
第3个问题可以考虑用枚举类型。
驴被脑袋踢了 2008-04-17
  • 打赏
  • 举报
回复
BS LS
zhuzhu3192003 2008-04-16
  • 打赏
  • 举报
回复
想知道第二个为什么吗?
jf
zhuzhu3192003 2008-04-16
  • 打赏
  • 举报
回复
1.你不要定义成int型,定义成长度为10的字符串就OK了
2.
cout <<"\n请输入学生的姓名:";
cin.ignore(1000,'\n');
cin.getline(stuName,10);
3.stuSex只给三个值就可以了男、女、非法,输入时做个字符比较就OK了,

64,849

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧