注册 登录
编程论坛 C++教室

请问我这句话错在哪?在cpp中是可以cout<<ends;的ends的作用是在缓冲区插入一个空终止作为字符串来使用,而且一般和std :: basi

叶纤 发布于 2020-03-17 23:08, 4122 次点击
在cpp中是可以cout<<ends;的ends的作用是在缓冲区插入一个空终止作为字符串来使用,而且一般和std :: basic_ostream一起使用
23 回复
#2
lin51616782020-03-17 23:37
在cpp中是可以cout<<ends;
简单点
cout << ends;
输出什么
请回答
#3
叶纤2020-03-17 23:43
为了找到我这句话的错误,我把I/O所有的知识点都粗浅的看了一遍,简直就是赶鸭子上架式的学习,超纲了都,就是没找到为什么不可以用cout,虽然说是插入的是ASCII 的0,但是c字符串里面也是有ASCII 的0,也是可以使用cout的为什么ends就不可以用cout了?不过一个‘/0’是先进入缓冲区,一个是后插进去的按理说是可以用cout的,可能在不同计算机会有不同的结果我也考虑到了,
我也知道ends在实际上是很少使用的,一般使用在字符串上,可是这和用不用cout有什么关系啊
#4
lin51616782020-03-17 23:49
可能在不同计算机会有不同的结果

这还不够错吗?
#5
叶纤2020-03-17 23:50
以下是引用lin5161678在2020-3-17 15:37:26的发言:

顺便说一点题外话
3楼的代码里面 cout << ends;
这个做法是错误的 ends 不是给cout使用的参数
不要被误导

你说的是不能给cout使用并没有说显示的结果,
我回答的是可以加cout,问题来了为什么本意加cout
#6
lin51616782020-03-17 23:54
回复 5楼 叶纤
说不说运行结果都一样
cout<<ends本身存在问题
#7
lin51616782020-03-17 23:55
为什么本意加cout
看不懂什么意思
#8
叶纤2020-03-17 23:57
还有std :: basic_ostream的对象难道不是cout,cerr什么的吗,既然说可以配合使用std :: basic_ostream,不就是和cout这样的东西一起使用吗
#9
叶纤2020-03-17 23:59
以下是引用lin5161678在2020-3-17 23:55:14的发言:

看不懂什么意思

我才练习盲打第三天,有错别字咋的了?意思说为什么不能使用cout了
#10
lin51616782020-03-18 00:14
回复 9楼 叶纤
2楼就请你回答了
cout<<endls;
输出什么
#11
lin51616782020-03-18 00:22
以下是引用叶纤在2020-3-17 23:57:09的发言:

还有std :: basic_ostream的对象难道不是cout,cerr什么的吗,既然说可以配合使用std :: basic_ostream,不就是和cout这样的东西一起使用吗

从来就不是能编译能运行能输出就叫做正确了
编程没那么简单
随便举个例子
程序代码:
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
    int n;
    cout << n;   
    return 0;
}

一样能编译能运行能输出
问题是输出是什么
能不能解决问题达到目的
回到原题
cout<<ends
不是能输出就完事
还得能达到目的
请问这里用cout<<ends 是为了达到什么目的
目测常见是用来输出一个空格
问题是 ends 和空格没关系 输出空格只是一个可能性
预期输出
1 2 3 4
运行输出可能是
1234
运行输出可能是
1a2a3a4
这合理吗
这还正确吗
设计ends 根本就不是准备给cout使用
cout<<ends 只是自找麻烦

#12
叶纤2020-03-18 00:23
程序代码:

确实在Windows上是输出的空格,在手机端是输出是空空的没有空格,既然手机端和电脑端用cout不报错,那不就等于cout是可以跟着ends的吗?
最重要的是看使用者怎么使用的的呢?
就像goto一样。有的人就喜欢用,但大部分人都知道要避免使用
也像using namespace std;呢我的教材说尽量避免使用这句话,因为有可能会有冲突,但是大部分人都喜欢用using namespace std;吗,
也像 unsigned 我的教材说避免使用,因为如果益处就是另一个结果了,如果结果是负号也是另一个结果了,说使用也可以在什么,再哪地方使用是比较好的,我突然忘了
总之,少部分人喜欢这样用可能有个人的目的,但是不一定是错的啊
#include <iostream>
#include<typeinfo>//

using std:: cout;
using std::ends;
int main()
{
   std::string a={"seff"};
  cout<<1<<'\0'<<1;cout<<std::endl;
  cout<<1<<ends<<1;cout<<std::endl;
   cout<<1<<static_cast<char>(0)<<1;


    return 0;}


#13
lin51616782020-03-18 00:31
回复 12楼 叶纤
程序代码:
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
    int n;
    cout << n;   
    return 0;
}
这样的代码就是错的
#14
lin51616782020-03-18 00:32
回复 12楼 叶纤
有什么个人目的 自嗨无所谓
这里新手很多会误导新人
不要在新手问题贴里面 使用cout<<ends这种错误的错误
#15
lin51616782020-03-18 00:33
回复 12楼 叶纤
既然手机端和电脑端用cout不报错
看11楼 我解释了不是没报错就是对的
#16
叶纤2020-03-18 00:35
回复 13楼 lin5161678
未初始化啊。突然想练习五笔打字了。。。
#17
lin51616782020-03-18 00:41
回复 16楼 叶纤
未初始化输出垃圾值是错的
为什么cout<<ends随便输出就不是错了?
#18
叶纤2020-03-18 00:42
你睡觉吧明天再说,反正就是感觉前面加cout也没错
#19
叶纤2020-03-18 00:45
以下是引用lin5161678在2020-3-18 00:41:58的发言:

未初始化输出垃圾值是错的
为什么cout<<ends随便输出就不是错了?

可是endl ends,cin,print和一个变量值不一样啊他们不用初始化的,你家的endl需要初始化呀
#20
lin51616782020-03-18 00:49
回复 19楼 叶纤
问题不在初始化
问题在输出结果无法确定
#21
lin51616782020-03-18 00:51
以下是引用叶纤在2020-3-18 00:42:40的发言:

你睡觉吧明天再说,反正就是感觉前面加cout也没错

别感觉 你的感觉毫无意义
你可以感觉没错
那我感觉有错 有何不可
你的感觉是感觉 我的感觉就不是感觉了?
谈点实际的
#22
叶纤2020-03-18 01:00
这些都是小意思的啦,电脑也有32位的和64位的,这也导致类型字节不一样,结果也是没办法预料,难道说因为不一样就不用类型?只能说尽量考虑的清楚点,在cpp上毕竟是用ends的是小众行为,无所谓啦,反正我没用过,睡觉吧,不用回的,咱两回个三天三夜都意见不统一,不过可以确定的事咱两用ends会很少
#23
lin51616782020-03-18 01:18
回复 22楼 叶纤
标准明确规定类型大小可以不一样
标准可没有说cout<<ends合适
#24
叶纤2020-03-18 01:20
睡觉吧哥哥。不早啦,再不睡觉你明天就成国宝了
1