有关c++中cin.getline的问题

这个程序的作用大概是输入字符串
再输入一个数字
然后把字符串输出
输出的次数等于输入的数字大小
没输入数字的话就默认输出一次
在下面输入字符串的时候出现问题了
不想用string来实现这个功能 就用new来创建的动态数组
但是这个输入语句怎么写? 顺便问下各个输入语句的区别(忽略我那逗比的英语、、、)
#include <iostream>
void output (const char * ch,int n=1);
int main(void)
{
using std::cin;
using std::cout;
using std::endl;
char * ch=new char[];
cout<<"Please enter a sentence:"
<<endl;
//在这里加入一个输入语句
if (cin.fail()!=0)
{
cin.clear();
while (cin.get()!='\n')
;
cout<<"Error!Please enter the right sentence:"
<<endl;
//同上注释
}
cout<<"Please enter an intger:"
<<endl;
unsigned int n;
cin>>n;
if (cin)
output (ch,n);
else
output (ch);
delete ch;
return 0;
}
void output (const char * ch,int n)
{
using std::cin;
using std::cout;
using std::endl;
if (n>1)
for (int j=0;j<n;++j)
output (ch);
else if (n==1)
cout<<*ch<<endl;
else
cout<<"Error!"<<endl;
}

你的程序没有什么大问题,就是输入的内容没写到数组中去。。。。
#include <iostream>
void output (const char * ch,int n=1);
int main(void)
{
using std::cin;
using std::cout;
using std::endl;
char * ch=new char[20];  //动态数组的创建
memset( ch, 0, 20 );     //初始化
cout<<"Please enter a sentence:"
<<endl;
//在这里加入一个输入语句
if ( !(cin.fail()) )
{
cin.clear();
int count = 0;//将输入写入数组
while ((ch[count++]=cin.get())!='\n');
ch[--count] = 0;
cout<<"Error!Please enter the right sentence:"
<<endl;
//同上注释
}
cout<<"Please enter an intger:"
<<endl;
unsigned int n = 0;
cin>>n;
if (cin)
output (ch,n);
else
output (ch);
delete []ch;
return 0;
}
void output (const char * ch,int n)
{
using std::cin;
using std::cout;
using std::endl;
if (n>1)
for (int j=0;j<n;++j)
output (ch);
else if (n==1)
cout<<ch<<endl;
else
cout<<"Error!"<<endl;
}

追问

……不是输入的东西没有写入数组。。。而是我根本没写输入语句。。。因为不知道怎么写
程序的原意是定义一个动态数组 根据输入的长度来决定数组的大小
所以你定义的那个数组和我想的不一样。。。如果数组长度是决定的话那就可以直接用cin.getline(*ch,20);来解决了……但是问题是数组长度不定 用cin>>*ch;只能读入一个字符。。这个可以解决么?

追答

你这个想法不合理,你只有先分配了内存才能往里面存东西,你要分配内存你就得知道分配多大吧,而且cin输入流和文件流不一样,不支持随机访问还有跳转。。。除非你一开始只分配一个,然后每次有输入的时候将原来的先复制再重分配,但是这样效率太低,而且没有必要,你的源程序中while( cin.get()!='\n' );其实已经逐个字符读取了,只是你没有保存

追问

……while那点不是用来丢弃错误字符的么……ˊ_ˋ算了,我再看看书吧……我是想根据输入的字符串长度来决定分配的内存大小的,应该可以实现吧,string不就是这样的么

……while那点不是用来丢弃错误字符的么……ˊ_ˋ算了,我再看看书吧……我是想根据输入的字符串长度来决定分配的内存大小的,应该可以实现吧,string不就是这样的么

温馨提示:答案为网友推荐,仅供参考
相似回答