C++里怎么限制输入字符的长度? 30

代码如下,要求把term限制在6个字母内,可是运行的时候超过6个就Crash,到底咋办啊????跪求高手,在线等....急啊!!!#include<iostream>us... 代码如下,要求把term限制在6个字母内,可是运行的时候超过6个就Crash, 到底咋办啊????跪求高手,在线等....急啊!!!

#include <iostream>
using std::cin;
using std::cout;
using std::endl;

#include <iomanip>
using std::left;
using std::setw;

class course
{
public:
char courseDesignation[14];
char term[7];
int units;
char grade;
course* next;
};

void print(const course*);

int main()
{
course* head = 0;

cout << "Lab11" << endl;
cout << "Programer: XiaoQi Yang" << endl;
cout << endl;

while(1)
{
print(head);
cout << endl;

char ans;
cout << "Do you want to add course [Y/N]? ";
cin >> ans;
cin.ignore(1000, 10);
if (ans == 'n' || ans == 'N')
break;
cout << endl;

course* temp = new course;

cout << "Enter course designation and term without spaces." << endl;

cout << "Enter the course designation : \n";
cin.getline(temp->courseDesignation, 14);

cout << "Enter the term (6-charactrer Allowed): \n";
cin.getline(temp->term, 7);

cout << "Enter the units : ";
cin >> temp->units;
cin.ignore(1000, 10);

cout << "Enter the grade ['X' if not completed yet] : \n";
cin >> temp->grade;
cin.ignore(1000, 10);
cout << endl;

temp->next = head;
head = temp;
}

while (head)
{
course* next = head->next;
delete head;
head = next;
}

return 0;
}

void print(const course* head)
{
cout << " COURSE TERM UNITS GRADE" << endl;
cout << "---------- ------ ----- -----" << endl;

for (const course* p = head; p; p = p->next)
{
cout << setw(14) << left << p->courseDesignation
<< " " << setw(6) << left << p->term
<< " " << p->units
<< " " << p->grade << endl;
}
}
展开
 我来答
adoqq_bd
2012-05-13 · TA获得超过7050个赞
知道大有可为答主
回答量:1818
采纳率:63%
帮助的人:1610万
展开全部
cout << "Enter the term (6-charactrer Allowed): \n";
cin.getline(temp->term, 7); //如果输入超过6个,那么会把剩下的留在缓冲区,而下一
//次输入是int, 那么会导致类型不符拒绝读取
cin.sync(); //清理输入缓冲区
cin.clear(); //清除异常标志
cout << "Enter the units : ";
cin >> temp->units;
//cin.ignore(1000, 10);
追问
不行啊,编译以后term超过6个字符还是会无限循环啊???
象三脱康泰
2019-05-11 · TA获得超过3853个赞
知道大有可为答主
回答量:3135
采纳率:27%
帮助的人:234万
展开全部
这个可以从缓冲区来做
有一个输入缓冲区,不管是gets或者for循环用scanf单个输入,输入后先进入缓冲区,在从缓冲区读入
你可以定义缓冲区的长度,让他不进入缓冲区,直接读入
具体做法我不知道,你百度一下吧
请采纳答案,支持我一下。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
慎重还可靠灬宝贝f
推荐于2018-05-14 · TA获得超过12.9万个赞
知道大有可为答主
回答量:1.9万
采纳率:52%
帮助的人:2596万
展开全部
限制输入字符的长度
目标:在编辑框中输入的内容只能是0和1,而且输入内容的长度不能超过32位。
实现方法:限制输入字符的内容,可以达到过滤非法字符的作用。
1、首先新建一个MFC类:CLimitEdit,基类是CEdit。
2、添加响应WM_CHAR消息的事件OnChar。在其中输入的内容只能为0和1.代码如下:
if(!((nChar == 8) || ((nChar >= 48)&&(nChar <= 49))))
{
return;
}
3、为编辑框绑定CLimitEdit类型的控件变量:m_string。
若程序出现错误,看是否缺少头文件:#include “LimitEdit.h”
4、在CSheZhiDlg类的DoDataExchange中添加代码,控制用户输入的字符串不超过32各字符。
m_string.SetLimitText(32);
其他限制条件:如控制输入的内容只能为字母或数字。
//8为回格键(Back Space)
//65到90之间为大写字母
//97到122之间为小写字母
//48到57之间为数字
if(!((nChar == 8) || ((nChar >= 65)&&(nChar <= 90)) || ((nChar >= 97)&&(nChar <= 122)) || ((nChar >= 48)&&(nChar <= 57))))
{
return;
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
musen0
2012-05-15 · 超过10用户采纳过TA的回答
知道答主
回答量:68
采纳率:0%
帮助的人:29.3万
展开全部
直接强制限定,或者转换也行
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式