鱼C论坛

 找回密码
 立即注册
查看: 1159|回复: 7

[已解决]为什么输出不了字符输出的是数字?

[复制链接]
发表于 2023-6-5 10:07:17 | 显示全部楼层 |阅读模式
1鱼币
include<iostream>
using namespace std;
int main()
{
        int n,i,t,m;
        char ch,f;
        cin>>n>>ch>>t;
        if(n>10)
        cout<<"error"<<endl;
        else
        {
                for(i=0;i<n;i++)
                {   f=ch;
                        for(m=0;m<n;m++)
                        {
                            f+=t;       
                                cout<<f<<" ";
                        }
                 
                        cout<<endl;
                }
               
        }
        return 0;
}
最佳答案
2023-6-5 10:07:18
这段代码中,你在循环中对字符 f 进行增加操作 f+=t; 。 t 是一个整数,而 f 是一个字符。在 C++ 中,字符本质上就是较小的整数类型,因此你可以对它们进行数学运算。当你将一个整数加到字符上时,你实际上是改变了它的ASCII值。

cout<<f<<" "; 会打印 f 对应的字符,如果f的ASCII值在可打印字符范围内(32到126),那么它就会打印出对应的字符。如果f的ASCII值超出了这个范围,它就会打印出无法识别的字符或者看起来像数字的字符。

例如,如果输入的 ch 是'a',ASCII值为97, t 是10,那么第一次迭代后, f 的值就变成了107,对应的字符是'k'。在第二次迭代中, f 变为117,对应的字符是'u'。如果 f 继续增加到超过126,那么打印出来的字符就可能是无法识别的字符。

如果你想让代码打印出 f 的整数值,你可以使用 static_cast<int>(f) 将 f 转换为整数。修改后的代码如下:
include<iostream>
using namespace std;
int main()
{
    int n,i,t,m;
    char ch,f;
    cin>>n>>ch>>t;
    if(n>10)
    cout<<"error"<<endl;
    else
    {
        for(i=0;i<n;i++)
        {   
            f=ch;
            for(m=0;m<n;m++)
            {
                f+=t;       
                cout<<static_cast<int>(f)<<" ";
            }

            cout<<endl;
        }

    }
    return 0;
}

在这个修改后的版本中,每次循环会打印 f 的ASCII值,而不是对应的字符。

最佳答案

查看完整内容

这段代码中,你在循环中对字符 f 进行增加操作 f+=t; 。 t 是一个整数,而 f 是一个字符。在 C++ 中,字符本质上就是较小的整数类型,因此你可以对它们进行数学运算。当你将一个整数加到字符上时,你实际上是改变了它的ASCII值。 cout
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-6-5 10:07:18 | 显示全部楼层    本楼为最佳答案   
这段代码中,你在循环中对字符 f 进行增加操作 f+=t; 。 t 是一个整数,而 f 是一个字符。在 C++ 中,字符本质上就是较小的整数类型,因此你可以对它们进行数学运算。当你将一个整数加到字符上时,你实际上是改变了它的ASCII值。

cout<<f<<" "; 会打印 f 对应的字符,如果f的ASCII值在可打印字符范围内(32到126),那么它就会打印出对应的字符。如果f的ASCII值超出了这个范围,它就会打印出无法识别的字符或者看起来像数字的字符。

例如,如果输入的 ch 是'a',ASCII值为97, t 是10,那么第一次迭代后, f 的值就变成了107,对应的字符是'k'。在第二次迭代中, f 变为117,对应的字符是'u'。如果 f 继续增加到超过126,那么打印出来的字符就可能是无法识别的字符。

如果你想让代码打印出 f 的整数值,你可以使用 static_cast<int>(f) 将 f 转换为整数。修改后的代码如下:
include<iostream>
using namespace std;
int main()
{
    int n,i,t,m;
    char ch,f;
    cin>>n>>ch>>t;
    if(n>10)
    cout<<"error"<<endl;
    else
    {
        for(i=0;i<n;i++)
        {   
            f=ch;
            for(m=0;m<n;m++)
            {
                f+=t;       
                cout<<static_cast<int>(f)<<" ";
            }

            cout<<endl;
        }

    }
    return 0;
}

在这个修改后的版本中,每次循环会打印 f 的ASCII值,而不是对应的字符。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-6-5 10:19:41 | 显示全部楼层
还是不行
5 A 2
67 69 71 73 75
67 69 71 73 75
67 69 71 73 75
67 69 71 73 75
67 69 71 73 75
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-6-5 13:04:38 From FishC Mobile | 显示全部楼层
(char)f
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-6-5 13:05:50 From FishC Mobile | 显示全部楼层
f+=t,f是char,t是int。扩展了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-6-5 13:07:57 From FishC Mobile | 显示全部楼层
static_cast<char>(f),不是int

点评

我很赞同!: 0.0
我很赞同!: 0
  发表于 2023-6-5 14:12
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-6-5 14:10:13 | 显示全部楼层
zhenjen 发表于 2023-6-5 13:07
static_cast(f),不是int

原来是这样谢谢谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-24 11:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表