问一个关于c++ input 的问题。。
登录 | 论坛导航 -> 华新鲜事 -> 求学狮城 | 本帖共有 8 楼,分 1 页, 当前显示第 1 页 : 本帖树形列表 : 刷新 : 返回上一页
<<始页  [1]  末页>>
作者:我行故我 (等级:5 - 略有小成,发帖:1333) 发表:2003-05-12 14:31:51  楼主  关注此帖
问一个关于c++ input 的问题。。
problem:
input three lines: first line has a number
second line have two numbers
third line has a string of characters( the number of characters is not more than 1000)

my code:


# include<iostream.h>
int main(void){
int a;
cin>>a;
cout<<a<<"\n";

int x, y;
cin>>x>>y;
cout<<x<<" "<<y<<"\n";

char str[1001];
cin.getline(str, 1000);
cout<<str[2]; /*I put this line here to check whether the third line of input is read*/

return 0;
}

sample input and output:
first line input: 1
output: 1 // this is correct
second line input: 2 1
output: 2 1// this is also correc
but after the output 2 1 is displayed in the screen, the program suddenly end after prompting two blank lines..


the whole process is like this:
@sf3:~/c_programming[591]$ ./a.out
1
1
2 1
2 1

@sf3:~/c_programming[592]$



what is wrong with my code?
can anyone enlighten me?



Don't forget to always have a dream
我曾是孤单的飞鸟
飘荡在远方的天空
如今我已飞得太久
才知道我就是春天
我用力地挥动翅膀
开始寻找家的方向
我用力地挥动翅膀
溶进这宽阔的天空
欢迎来到华新中文网,踊跃发帖是支持我们的最好方法!原文 / 传统版 / WAP版只看此人从这里展开收起列表
作者:kikicoco (等级:2 - 初出茅庐,发帖:545) 发表:2003-05-12 18:10:14  2楼
抛砖引玉
我先去掉了前面两个正常运行的fragment,单独测试最后一个,程序正常。因此怀疑是standard in部分的问题。原因是上面输入1,2的以后有个enter,这个'\n'被存在了standard input stream里面,因此getline首先search到的是这个enter,也就是说end of line,自然不会继续读取input了。
为了验证这个猜想,我把getline的parameter改成了(str,100,' '),也就是说用space来结束,程序正常。
遗憾的是用c里面的fflush(stdin)没有用,不知道是不是VC++的问题,那位在unix上面试试看?
另外,我改成cin>>str,结果正常。

有不对之处,盼指正啊!
欢迎来到华新中文网,踊跃发帖是支持我们的最好方法!原文 / 传统版 / WAP版只看此人从这里展开收起列表
作者:魅力十足 (等级:2 - 初出茅庐,发帖:15) 发表:2003-05-12 18:25:19  3楼
抛砖引玉我先去掉了前面两个正常运行的fragment,单独测试最后一个,程序正常。因此怀疑是standard in部分的问题。原因是上面输入1,2的以后有个enter,这个'\n'被存在了standard input stream里面,因此getline首先search到的是这个enter,也就是说end of line,自然不会继续读取input了。 为了验证这个猜想,我把getline的parameter改成了(str,100,' '),也就是说用space来结束,程序正常。 遗憾的是用c里面的fflush(stdin)没有用,不知道是不是VC++的问题,那位在unix上面试试看? 另外,我改成cin>>str,结果正常。 有不对之处,盼指正啊!
Yes, it is caused by the return character.
To ignore the return character, you can add the following line in you code before input.

cin.ignore();

This line is to remove the return character from the std input stream.

I happened to have tried this today.

Any comment is welcome.
欢迎来到华新中文网,踊跃发帖是支持我们的最好方法!原文 / 传统版 / WAP版只看此人从这里展开收起列表
作者:kikicoco (等级:2 - 初出茅庐,发帖:545) 发表:2003-05-12 18:27:12  4楼
Yes, it is caused by the return character.To ignore the return character, you can add the following line in you code before input. cin.ignore(); This line is to remove the return character from the std input stream. I happened to have tried this today. Any comment is welcome.
why fflush(stdio) cannot work??
欢迎来到华新中文网,踊跃发帖是支持我们的最好方法!原文 / 传统版 / WAP版只看此人从这里展开收起列表
作者:魅力十足 (等级:2 - 初出茅庐,发帖:15) 发表:2003-05-12 19:03:58  5楼
why fflush(stdio) cannot work??
Hehe,
fflush(stdio) is a C style function. It is not suitable for C++.

:)
欢迎来到华新中文网,踊跃发帖是支持我们的最好方法!原文 / 传统版 / WAP版只看此人从这里展开收起列表
作者:kikicoco (等级:2 - 初出茅庐,发帖:545) 发表:2003-05-12 19:06:29  6楼
Hehe,fflush(stdio) is a C style function. It is not suitable for C++. :)
还以为能兼容...
原来如此阿
明天就要考C++了...
欢迎来到华新中文网,踊跃发帖是支持我们的最好方法!原文 / 传统版 / WAP版只看此人从这里展开收起列表
作者:Flying (等级:18 - 华新水车,发帖:16849) 发表:2003-05-13 14:55:03  7楼
Hehe,fflush(stdio) is a C style function. It is not suitable for C++. :)
No, your explanation is wrong.
Yes, fflush(stdin) does not work.

No, it doesn't work even in C!

The reason is that fflush really does flushing only on output streams, and it ignores input stream. So even in C, you have to manually read input stream in order to flush it.
欢迎来到华新中文网,踊跃发帖是支持我们的最好方法!原文 / 传统版 / WAP版只看此人从这里展开收起列表
作者:我行故我 (等级:5 - 略有小成,发帖:1333) 发表:2003-05-13 17:41:58  8楼
多谢kikicoco 和 魅力十足
欢迎来到华新中文网,踊跃发帖是支持我们的最好方法!原文 / 传统版 / WAP版只看此人从这里展开收起列表
论坛导航 -> 华新鲜事 -> 求学狮城 | 返回上一页 | 本主题共有 8 篇文章,分 1 页, 当前显示第 1 页 | 回到顶部
<<始页  [1]  末页>>

请登录后回复:帐号   密码