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;
}
} 展开
#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;
}
} 展开
4个回答
展开全部
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);
cin.getline(temp->term, 7); //如果输入超过6个,那么会把剩下的留在缓冲区,而下一
//次输入是int, 那么会导致类型不符拒绝读取
cin.sync(); //清理输入缓冲区
cin.clear(); //清除异常标志
cout << "Enter the units : ";
cin >> temp->units;
//cin.ignore(1000, 10);
追问
不行啊,编译以后term超过6个字符还是会无限循环啊???
展开全部
这个可以从缓冲区来做
有一个输入缓冲区,不管是gets或者for循环用scanf单个输入,输入后先进入缓冲区,在从缓冲区读入
你可以定义缓冲区的长度,让他不进入缓冲区,直接读入
具体做法我不知道,你百度一下吧
请采纳答案,支持我一下。
有一个输入缓冲区,不管是gets或者for循环用scanf单个输入,输入后先进入缓冲区,在从缓冲区读入
你可以定义缓冲区的长度,让他不进入缓冲区,直接读入
具体做法我不知道,你百度一下吧
请采纳答案,支持我一下。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
限制输入字符的长度
目标:在编辑框中输入的内容只能是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;
}
目标:在编辑框中输入的内容只能是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;
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
直接强制限定,或者转换也行
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询