cin.getline ()问题

Yanger_xy 2009-02-21 05:30:57

#include <iostream>
using namespace std;

int main ()
{
char ch[20];
cout << "enter a sentence:" << endl;
cin >> ch;
cout << 1 << ':' << ch << endl;
cin.getline (ch, 20, '/');
cout << 2 << ':' << ch << endl;
cin.getline (ch, 20);
cout << 3 << ':' << ch << endl;
return 0;
}
当在键盘上输入:"I like C++./I study C++./I am happy."的时候,为何结果是:
1:I
2: like c++. 这一行输出的结果为何不是I like C++./I study(19个字符)
3:I study c++./I am h 此结果为何不和上一行一样?默认情况下cin.getline(ch,20,'/')和cin.getline(ch,20)等价
...全文
178 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
lsyzh 2009-02-22
  • 打赏
  • 举报
回复
谭浩强的书上,讲的清清楚楚,LZ可以去看看
书名叫:C++程序设计
JK1860 2009-02-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 feng4206yu 的回复:]
1.cin>>ch将会把第一个word放入ch数组中,即接受第一个空格前的输入...
2.在缓冲区中读取已有的输入,以'/'作为结束符,同时以20个为上限...
3.在缓冲区中读取剩余的输入,读取20个字符为上限,默认以换行符为结束符...
[/Quote]正解
UndefinedCoder 2009-02-21
  • 打赏
  • 举报
回复
enter a sentence:
123456789012345678901234567890
1:123456789012345678901234567890
123456789012345678901234567890
2:
123456789012345678
3:

第一步不是最多接收20字符嘛?
第二步不是19个而是18?
第三步空白,难道第二步没有找到/符号就吧整个缓冲丢掉了?
9527- 2009-02-21
  • 打赏
  • 举报
回复
楼上的说过了,我就不说了,来凑凑热闹
Yanger_xy 2009-02-21
  • 打赏
  • 举报
回复
cin.getline (ch, 20, '/'); 最多只能输入19个字符吧!
第二个输出为何不输出I like c++./I study(19个字符)呢?
缓冲区中存放的是什么呢?莫非I已经被缓冲区清理掉了?
jakqigle 2009-02-21
  • 打赏
  • 举报
回复
1:
int a,b;
cin >> a >> b;
这时候输入两个数是不是需要空格分开a和b啊,道理就是cin接受空格前的输入。
2:
既然getline()中你用/做输入结束,当然就只把第一个/前的句子输入字符数组中了
3:
getline()默认是以\n作为技术的,所以是你想要的把整行输入到字符数组中。
waizqfor 2009-02-21
  • 打赏
  • 举报
回复
[Quote=引用楼主 cpp_yangzuoshi 的帖子:]

#include <iostream>
using namespace std;

int main ()
{
char ch[20];
cout < < "enter a sentence:" < < endl;
cin >> ch;
cout < < 1 < < ':' < < ch < < endl;
cin.getline (ch, 20, '/');
cout < < 2 < < ':' < < ch < < endl;
cin.getline (ch, 20);
cout < < 3 < < ':' < < ch < < endl;
return 0;
}
当在键盘上输入:"I like C++./I study C++./I am happy."的时候,为何结果是:
1:I…
[/Quote]
第一个输入cin >> ch; 遇到了LZ输入的空格 就被截断了 所以第一输出 只保留了第一个输入的字符I
第二个输入cin.getline (ch, 20, '/'); 还是往ch里面输入 这时的缓冲区有输入字符了 表示可以再输入20个字符的上限 当遇到'/'的时候停止
第三个输入cin.getline (ch, 20); 直接往ch中输入字符 字符的读取上限也是20 不过没有中断条件 所以当输入'\n'时 停止
feng4206yu 2009-02-21
  • 打赏
  • 举报
回复
1.cin>>ch将会把第一个word放入ch数组中,即接受第一个空格前的输入...
2.在缓冲区中读取已有的输入,以'/'作为结束符,同时以20个为上限...
3.在缓冲区中读取剩余的输入,读取20个字符为上限,默认以换行符为结束符...
蜥蜴枪王 2009-02-21
  • 打赏
  • 举报
回复
cin.getline(ch,20,'/')第一个参数是存储输入文本的地址,即是字符数组ch;第二个参数是要存储的最大字符数,在这里是20;第三个参数是可选参数,它是用来指定'\n'的替代字符的,来表示输入的结束.所以这个函数,可以输入20个字符,当输入'/'是 输入结束.cin.getline(ch,20)前两个参数的意义和上面一样,它使用默认的读取了换行符'\n'(即按下回车键)后输入结束.所以没有第三个参数.
Yanger_xy 2009-02-21
  • 打赏
  • 举报
回复
而且如果将cin.getline (ch, 20, '/'); 改为cin.getline (ch, 20, 'b'); 的话结果却又变成
1:I
2: like c++./I study 此行多输出:/I study
3: 此行什么也没输出!

64,654

社区成员

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

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