C++的开发问题
黄舟
黄舟 2017-04-17 11:48:10
[C++讨论组]
#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
   char a[]={};
   char b[]={};
   cout<<"*****欢迎使用凯撒密码加解密系统*****"<<endl;
   cout<<"请输入明文"<<endl;
   scanf("%s",&a);
   const int c=sizeof(a);
   for(int i=0;i<c-1;i++)
   {
       if(a[i]==' ')
       {
           b[i]=a[i];
       }
       else
       {
           b[i]=(a[i]+1);
       }
   }
   cout<<"密文为"<<b<<endl;
   return 0;
}

请问这段代码有什么问题吗 就是输入一段字符 输出加密后的字符
为啥密文都显示不出来。。

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回复(1)
迷茫

假设你要实现的功能是用读入一个用户输出的字符串存储在a中,然后加密后存储在b中,并显示出来。

那么上面这一段代码有这么一些错误之处:

1,给a、b保留的空间不足
定义部分可以改为:
char a[1000], b[1000];

2,读取输入语句错误
C语言中使用数组名时,等同于数组首地址,也就是a = &(a[0])。
a已经是一个地址,scanf不用对a取地址。
读入语句应该改为
scanf("%s", a);

3,求字符串长度错误
求字符串的长度应该使用strlen函数。
int c = strlen(a);
另外求出字符串长度不用-1,这是off-by-1错误。

4,C风格字符串结束符错误
C风格字符串以'\0'结局,应该在修改b后将b结局置为'\0'。

为什么显示不出结果来?
原因是(1)和(3)。
sizeof对数组使用时是求出数组的长度。
虽然(2)错误地修改了a的值,但我估计这一sizeof在编译器已经进行,因此没有影响sizeof(a)的求值。
一开始定义的a[]数组中没有内容,所以后面的循环实际上没有执行。

另外,混用了c和c++风格。
c++中读入的时候可以考虑使用string类(至少一般的c++教材是这么说的)。

如果要一段正确的代码,大概应该是这样:

string a;
cin>>a;
string b = enc(a);
cout<<b<<endl;

或者用c风格写法
char a[1000], b[1000];
scanf("%s", a);
enc(b, a);
printf("%s\n", b);

enc函数请自己编写,记得求a长度用C语言的方法应该是strlen(a)

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号