鱼C论坛

 找回密码
 立即注册
查看: 1707|回复: 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 转换为整数。修改后的代码如下:

  1. include<iostream>
  2. using namespace std;
  3. int main()
  4. {
  5.     int n,i,t,m;
  6.     char ch,f;
  7.     cin>>n>>ch>>t;
  8.     if(n>10)
  9.     cout<<"error"<<endl;
  10.     else
  11.     {
  12.         for(i=0;i<n;i++)
  13.         {   
  14.             f=ch;
  15.             for(m=0;m<n;m++)
  16.             {
  17.                 f+=t;      
  18.                 cout<<static_cast<int>(f)<<" ";
  19.             }

  20.             cout<<endl;
  21.         }

  22.     }
  23.     return 0;
  24. }
复制代码


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

最佳答案

查看完整内容

这段代码中,你在循环中对字符 f 进行增加操作 f+=t; 。 t 是一个整数,而 f 是一个字符。在 C++ 中,字符本质上就是较小的整数类型,因此你可以对它们进行数学运算。当你将一个整数加到字符上时,你实际上是改变了它的ASCII值。 cout
小甲鱼最新课程 -> https://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 转换为整数。修改后的代码如下:

  1. include<iostream>
  2. using namespace std;
  3. int main()
  4. {
  5.     int n,i,t,m;
  6.     char ch,f;
  7.     cin>>n>>ch>>t;
  8.     if(n>10)
  9.     cout<<"error"<<endl;
  10.     else
  11.     {
  12.         for(i=0;i<n;i++)
  13.         {   
  14.             f=ch;
  15.             for(m=0;m<n;m++)
  16.             {
  17.                 f+=t;      
  18.                 cout<<static_cast<int>(f)<<" ";
  19.             }

  20.             cout<<endl;
  21.         }

  22.     }
  23.     return 0;
  24. }
复制代码


在这个修改后的版本中,每次循环会打印 f 的ASCII值,而不是对应的字符。
小甲鱼最新课程 -> https://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
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-6-5 13:04:38 From FishC Mobile | 显示全部楼层
(char)f
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-6-5 13:05:50 From FishC Mobile | 显示全部楼层
f+=t,f是char,t是int。扩展了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

点评

我很赞同!: 0.0
我很赞同!: 0
  发表于 2023-6-5 14:12
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

原来是这样谢谢谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-12 21:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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