请教关于cin问题?

koo8 2008-10-30 01:34:18
#include <iostream>
using namespace std;

int main()
{

char p[3],q[5],k[8];
// cin.clear();
cout<<"input p:";
cin>>p;
cout<<"input q:";
cin>>q;
cout<<"input k:";
cin>>k;

cout<<"output p:"<<p<<endl;
cout<<"output q:"<<q<<endl;
cout<<"output k:"<<k<<endl;
}
当我输入字符数小于或等于该数组元素个数时能够正常,否则就读取的字符就是错误的。
例如:
输入下面数据能正确输出。
P : 12
q : 123
k : 123678

P : 123
q : 12345
k : 12345678

输入下面就错误,三个变量的值不正常。
P : 12300
q : 12345000
k : 1234567800000

请问,如何控制输入使用cin情况下。
...全文
145 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
koo8 2008-10-31
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 jia_xiaoxin 的回复:]
C/C++ code#include <iostream>
using namespace std;

int main()
{
//char p[3],q[5],k[8];
char * p = new char[3];
char * q = new char[5];
char * k = new char[8];

cout <<"input p:";
cin>>p;
p[2] = '\0';
cin.clear(istream::goodbit);
cin.sync();

cout <<"input q:";
cin>>q;
q[4] = '\0';
cin.clear(istream::goodbi…
[/Quote]

方法不错!

多谢各位的指教。
DarknessTM 2008-10-30
  • 打赏
  • 举报
回复

#include <iostream>
#include <string>
using namespace std;

int main()
{
string p;
string q;
string k;
//char p[3],q[5],k[8];
// cin.clear();
cout < <"input p:";
cin>>p;
cout < <"input q:";
cin>>q;
cout < <"input k:";
cin>>k;

cout < <"output p:" < <p < <endl;
cout < <"output q:" < <q < <endl;
cout < <"output k:" < <k < <endl;
}
jia_xiaoxin 2008-10-30
  • 打赏
  • 举报
回复
#include <iostream> 
using namespace std;

int main()
{
//char p[3],q[5],k[8];
char * p = new char[3];
char * q = new char[5];
char * k = new char[8];

cout <<"input p:";
cin>>p;
p[2] = '\0';
cin.clear(istream::goodbit);
cin.sync();

cout <<"input q:";
cin>>q;
q[4] = '\0';
cin.clear(istream::goodbit);
cin.sync();

cout <<"input k:";
cin>>k;
k[7] = '\0';
cin.clear(istream::goodbit);
cin.sync();

cout <<"output p:" << p <<endl;
cout <<"output q:" << q <<endl;
cout <<"output k:" << k <<endl;

}
杨彦龙 2008-10-30
  • 打赏
  • 举报
回复
用new 动态分配内存吧
koo8 2008-10-30
  • 打赏
  • 举报
回复
也不行,只能用下面方法:
cout<<"input q:";
for(i=0;i<5;i++)
  cin>>q[i];//=cin.get();
q[i]='\0';

多谢各位指点。
NesTa_xP 2008-10-30
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 koo8 的回复:]
引用 1 楼 macfan 的回复:
你的数组定义了长度,下面的长度显然超过数组向内存申请分配的长度,当然会报错。
如果使用静态分配就将字符数组开大,或者可以使用new 和delete的动态分配。


明白,
只是想问如何用cin来控制输入字符?有没有方法?没有只能放弃啦。
[/Quote]
用cin.get()行不行?控制输入的字符不超过数组大小
NesTa_xP 2008-10-30
  • 打赏
  • 举报
回复
#include <iostream> 
using namespace std;

int main()
{

char *p,*q,*k;
// cin.clear();
char str[100];
cout<<"input p:";
cin>>str;
p=new char[strlen(str)+1];
strcpy(p,str);
cout<<"input q:";
cin>>str;
q=new char[strlen(str)+1];
strcpy(q,str);
cout<<"input k:";
cin>>str;
k=new char[strlen(str)+1];
strcpy(k,str);
cout<<"output p:"<<p<<endl;
cout<<"output q:"<<q<<endl;
cout<<"output k:"<<k<<endl;
delete p;
delete q;
delete k;
}
koo8 2008-10-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 macfan 的回复:]
你的数组定义了长度,下面的长度显然超过数组向内存申请分配的长度,当然会报错。
如果使用静态分配就将字符数组开大,或者可以使用new 和delete的动态分配。
[/Quote]

明白,
只是想问如何用cin来控制输入字符?有没有方法?没有只能放弃啦。
koo8 2008-10-30
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zhanshen2891 的回复:]
此人乃2B 一个

鉴定完毕!
[/Quote]

不想参与讨论,给我 滚!!!
zhanshen2891 2008-10-30
  • 打赏
  • 举报
回复
此人乃2B 一个

鉴定完毕!
pengzhixi 2008-10-30
  • 打赏
  • 举报
回复
数组溢出了,这样很容易破坏掉其他程序所分配内存里的东西
ypf7127729 2008-10-30
  • 打赏
  • 举报
回复
超出分配的内存长度了
偶觉得最好用动态分配
比如用new ~~
cyj626 2008-10-30
  • 打赏
  • 举报
回复
不可以超出定义
cyj626 2008-10-30
  • 打赏
  • 举报
回复
不可以超出定义
macfan 2008-10-30
  • 打赏
  • 举报
回复
你的数组定义了长度,下面的长度显然超过数组向内存申请分配的长度,当然会报错。
如果使用静态分配就将字符数组开大,或者可以使用new 和delete的动态分配。
macfan 2008-10-30
  • 打赏
  • 举报
回复
你的数组定义了长度,下面的长度显然超过数组向内存申请分配的长度,当然会报错。
如果使用静态分配就将字符数组开大,或者可以使用new 和delete的动态分配。

65,186

社区成员

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

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