标题:初学者,输出还像错了。多了个“N"~求解!
只看楼主
Cai_xw1993
Rank: 2
等 级:论坛游民
威 望:1
帖 子:55
专家分:30
注 册:2011-9-5
结帖率:100%
 问题点数:0 回复次数:12 
初学者,输出还像错了。多了个“N"~求解!
#include <iostream>
using namespace std;
int main ()
{
    char ch = 'M';
    int i = ch;

    cout << "The ASCⅡ code for " << ch << " is "<< i << endl;
    cout << "Add one to the character code;"<< endl;

    ch = ch + 1;
    i = ch;
   
    cout << "The ASCⅡ code for " << ch << " is " << i << endl;
    cout << " Displaying char ch using cout.put(ch): " << cout.put(ch) << endl;
    cout << " Done !" << endl;

    return 0;
}

为什么得出来是:
The ASCⅡ code for M is 77
Add one to the character code;
The ASCⅡ code for N is 78;
N Displaying char ch using cout.put(ch):0047CE94
Done!

不是应该这样吗?:
The ASCⅡ code for M is 77
Add one to the character code;
The ASCⅡ code for N is 78;
Displaying char ch using cout.put(ch):0047CE94
Done!

怎么在Displaying前面会出现一个“N”??

[ 本帖最后由 Cai_xw1993 于 2012-5-3 22:00 编辑 ]
搜索更多相关主题的帖子: one character include return 
2012-05-03 21:53
tongzhipeng
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:14
专家分:101
注 册:2012-5-1
得分:0 
我自己百度了一下,因为以前没见过cout.put()的用法
cout.put(ch)的用法 等同于cout << ch;
在你的代码里面ch在+1后由M变成了N,这也就是你那个N产生的原因了,至于为什么在最前面我就不知道了,可能是cout.put()的功能是将字符插入到输出流的最前面。
cout.put(ch) man 了一下,应该是这段

 template<typename _CharT , typename _Traits > basic_ostream< _CharT, _Traits > & std::basic_ostream< _CharT,
       _Traits >::put (char_type __c)
       Simple insertion. Parameters:
           c The character to insert.

       Returns:
           *this

我猜是 返回的是输出流对象的指针,也就是你后面打印的0047CE94
其实这段代码真正的逻辑应该还是这样写的
程序代码:
#include <iostream>
using namespace std;
int main ()
{
    char ch = 'M';
    int i = ch;

    cout << "The ASCⅡ code for " << ch << " is "<< i << endl;
    cout << "Add one to the character code;"<< endl;

    ch = ch + 1;
    i = ch;
    
    cout << "The ASCⅡ code for " << ch << " is " << i << endl;
    cout << " Displaying char ch using cout.put(ch): ";
    cout.put(ch) << endl;
    cout << " Done !" << endl;
    
    return 0;
}


[ 本帖最后由 tongzhipeng 于 2012-5-3 23:46 编辑 ]
2012-05-03 23:44
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
对于 cout << " Displaying char ch using cout.put(ch): " << cout.put(ch) << endl;
先执行 cout.put(ch),也就是先输出了一个N,然后将这个put的返回值传给 cout

我觉个简单的例子
int foo( int a ) { return 123; }
foo( foo(3) );
则相当于
int x = foo(3);
foo( x );
2012-05-04 08:39
Cai_xw1993
Rank: 2
等 级:论坛游民
威 望:1
帖 子:55
专家分:30
注 册:2011-9-5
得分:0 
回复 3楼 rjsp
其他都懂了。但为什么会打印出0047CE94
2012-05-04 12:34
Cai_xw1993
Rank: 2
等 级:论坛游民
威 望:1
帖 子:55
专家分:30
注 册:2011-9-5
得分:0 
回复 2楼 tongzhipeng
懂了~但指针还没学,不懂..
2012-05-04 12:34
江米条二号
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2012-5-8
得分:0 
没看懂
2012-05-16 09:38
小楼听雨a
Rank: 1
等 级:新手上路
帖 子:3
专家分:3
注 册:2012-5-16
得分:0 
不是ch = ch+1的问题..如果去掉的话  输出照样还得了n!
没搞懂哪里的问题 求教
2012-05-16 21:56
夏一站
Rank: 1
等 级:新手上路
帖 子:11
专家分:7
注 册:2012-4-26
得分:0 
+0,前面也出现M,可能是前段程序出了问题,看不出哪里问题,旁观!!
2012-05-17 15:34
荡气回肠
Rank: 2
等 级:论坛游民
帖 子:33
专家分:40
注 册:2012-5-6
得分:0 
回复 楼主 Cai_xw1993
    os.put()——将字符ch放入ostream,返回os。os.put()是未格式化的操作一次一个字符地处理流,它们不忽略空白地读。标准库提供了丰富的支持未格式化IO的低级操作,这些低级操作能够将流作为未解释的字节处理,而不是作为数据类型(如 char、int、string等)的序列处理。而控制输入格式化默认情况下,输入操作符忽略空白(空格、制表符、换行符、进纸和回车)。
    对于您遇到的的问题,可以将程序修改如下:

#include <iostream>
using namespace std;
int main ()
{
    char ch = 'M';
    int i = ch;
   
    cout << "The ASCⅡ code for " << ch << " is "<< i << endl;
    cout << "Add one to the character code;"<< endl;
   
    ch = ch + 1;
    i = ch;
   
    cout << "The ASCⅡ code for " << ch << " is " << i << endl;
    cout << " Displaying char ch using cout.put(ch): ";
    cout << cout.put(ch) << endl;
    cout << " Done !" << endl;
   
    return 0;
}



[ 本帖最后由 荡气回肠 于 2012-5-17 16:39 编辑 ]
2012-05-17 16:37
nongzhaobo
Rank: 3Rank: 3
来 自:广西南宁
等 级:论坛游侠
帖 子:59
专家分:155
注 册:2012-4-8
得分:0 
还是不懂....唉..
2012-05-17 21:57



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




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

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