tttttt@@@@@@ 发表于 2023-6-5 10:07:17

为什么输出不了字符输出的是数字?

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;
}

isdkz 发表于 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值,而不是对应的字符。

tttttt@@@@@@ 发表于 2023-6-5 10:19:41

还是不行{:10_266:}
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

zhenjen 发表于 2023-6-5 13:04:38

(char)f

zhenjen 发表于 2023-6-5 13:05:50

f+=t,f是char,t是int。扩展了

zhenjen 发表于 2023-6-5 13:07:57

static_cast<char>(f),不是int

tttttt@@@@@@ 发表于 2023-6-5 14:10:13

zhenjen 发表于 2023-6-5 13:07
static_cast(f),不是int

原来是这样谢谢谢谢
页: [1]
查看完整版本: 为什么输出不了字符输出的是数字?