标题:怎么才能让一句话显示完整?
只看楼主
fxzjw
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2006-1-22
 问题点数:0 回复次数:8 
怎么才能让一句话显示完整?

有一个简单的程序,是输入一个句子,然后显示。程序如下:
#include<iostream.h>
int main(int argc, char* argv[])
{ char* s;
cout<<"please input sentence:"<<endl;
cin>>s;
cout<<s;
system("pause");
return 0;
}
但我输入"how are you"时,却只能显示"how".这是怎么回事?怎样才能显示全部句子?

搜索更多相关主题的帖子: int char cout sentence pause 
2006-02-27 22:22
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
得分:0 
下面的代码是正确的代码

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

int main(int argc, char* argv[])
{
string s;
cout<<\"please input sentence:\"<<endl;

getline(cin, s);
cout<<s;
system(\"pause\");
return 0;
}


而你的代码中有一个致命的错误,请看这里 char * s; 当你定义这个 s 的时候,这个s 是个野指针,而你紧接着要用cin 来输入, 请问,输入的东西输入到哪里? 你的程序在编译时没错,但运行时会出错。如果你一定要用char * s; 那么你一定要为它动态开辟空间,或用数组, 但是不管是动态开辟空间或者用数组,都有一个很尴尬的问题, 那就是你事先无法知道这个空间要多大, 开大了, 空间浪费, 开小了, 以后会溢出. 所以最好的解决办法是用 string 这个类型.

自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2006-02-27 22:48
fxzjw
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2006-1-22
得分:0 

谢谢kai

请问一下用#include <cstdlib>
有什么作用?我测试好象不用它也行?
另外,我测试把getline(cin, s);换成cin>>s;为什么不行?


2006-02-28 00:38
fxzjw
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2006-1-22
得分:0 
另外我发现如果用new开辟空间也不行,因为只要我觉得好象只要输入空格时,它就认为我输入结束,后面的输入就不起作用了,只输出第一个单词。如:
#include <iostream.h>
void main(){
char *s=new char[11];
cin>>s;//我输入时是:how are you
cout<<s;//得到:how
system("pause");
}

2006-02-28 01:52
lcff
Rank: 1
等 级:新手上路
帖 子:72
专家分:0
注 册:2006-2-27
得分:0 
cin>>的断点是空格

尝试用cin.getline()

「叶子的离开,是因为风的追求,还是树的不挽留?」
2006-02-28 01:59
fxzjw
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2006-1-22
得分:0 
谢谢lcff,我试了可以
我还有三楼的问题,请回答一下

2006-02-28 02:22
luckbaby
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2006-2-28
得分:0 
三楼中的问题楼主应该去看置顶帖
http://bbs.bc-cn.net/bbs/dispbbs.asp?boardID=55&ID=17267&page=1
里面有的。第二个问题不清楚








PS:小弟新人+新手,请多多指教,以后可能会问些白痴问题,希望不要嘲笑我啊~~~
2006-02-28 11:36
DarkHero
Rank: 1
等 级:新手上路
威 望:2
帖 子:191
专家分:0
注 册:2006-1-14
得分:0 
cin,cout分别是istream,ostream的对象,包含在头文件<iostream>里;
getline(const &istream,string &line),包含在头文件<string>里。
前者似乎是以控制字符作为一行结束的标志(即把当前缓冲区里的字符发送的屏幕上),常见的有 空格、回车。。。
后者以换行、回车作为一行结束的标志,但在vc6.0似乎第一次需要敲2次回车。。。
我没怎么仔细看过输入输出流,以上仅供参考~~~

[此贴子已经被作者于2006-2-28 18:01:09编辑过]


for( ; me.alive() ; ) { 淡泊名利,志存高远 } //Forever
2006-02-28 18:00
DarkHero
Rank: 1
等 级:新手上路
威 望:2
帖 子:191
专家分:0
注 册:2006-1-14
得分:0 
噫,竟然有“威望”了,好搓。。。

for( ; me.alive() ; ) { 淡泊名利,志存高远 } //Forever
2006-02-28 18:03



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-47530-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.887207 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved