C编程,新人求助

时间:2021-03-10 17:37:16
编写程序,加密数据。方法:对给定数值,每一位数字均加2,且在[0,9]范围内,若加密后某位数字大于9,则取其被10除的余数。如:6987加密后为8109。



我不知道输入的数有多少位,不知如何处理

10 个解决方案

#1


当做字符串处理,先定义一个char a[MAX],再scanf("%s",a);
C++中可以直接定义一个string a;再cin>>a;即可

#2


可是我不知道用户输入的字符串长度,怎么确定数组的元素个数???

#3


你可以指定一个长度, 能体现你的功能就行了.
实际产品中又不是用户从输入字符串, 根据实际情况分配动态内存就可以了

#4


#include <stdio.h>
#include <stdlib.h>
void main ()

{
int i,j; 
char a;
scanf("%s",&a);
j=sizeof (a);
char str1[j],str2[j];                        //此行报错,怎么改啊,求大神!
scanf("%s",str1);
for (i=0;i<=j-1;i++)
 {
 int t(char x);
 str2[i]=t(str1[i]);
 }
    printf("%s",str2); 
system("pause");
}

int t(char x)
{
int y;
if (x>=0&&x<=7)
y=x+2;
else if (x>7&&x<=9)
y=x%10;
else printf("error");
}

#5


char str1[j],str2[j];                        //此行报错,怎么改啊,求大神!


这里的申明中“j”不能使变量,必须是常量或者常量表达式
 
处理!

可以

#define m 10
...
下面申明就可以了
不知道长度的话,可以写个if来判断长度自适应

#6


谢谢各位,可是为什么我改了以后编译通过,但是运行的结果不对呢?
#include <stdio.h>
#include <stdlib.h>
void main ()

{
int i,j; 
char a;
scanf("%s",&a);
#define m sizeof(a)
j=m;
char str1[m],str2[m];
scanf("%s",str1);
for (i=0;i<=j-1;i++)
 {
 int t(char x);
 str2[i]=t(str1[i]);
 }
    printf("%s",str2); 
system("pause");
}

int t(char x)
{
int y;
if (x>=0&&x<=7)
{
y=x+2;
    return (y);
}
else if (x>7&&x<=9)
{
y=x%10;
    return (y);
}
else printf("error");
}

#7


第七行定义a是char类型,怎么输入时用%s啊?

#8


那怎么改???

#9


读一个字符,加2,输出,再读一个字符,加2,输出……
根本没必要在内存中保存

#10


谢谢大家,我终于编出来了,换了一种思路!

#1


当做字符串处理,先定义一个char a[MAX],再scanf("%s",a);
C++中可以直接定义一个string a;再cin>>a;即可

#2


可是我不知道用户输入的字符串长度,怎么确定数组的元素个数???

#3


你可以指定一个长度, 能体现你的功能就行了.
实际产品中又不是用户从输入字符串, 根据实际情况分配动态内存就可以了

#4


#include <stdio.h>
#include <stdlib.h>
void main ()

{
int i,j; 
char a;
scanf("%s",&a);
j=sizeof (a);
char str1[j],str2[j];                        //此行报错,怎么改啊,求大神!
scanf("%s",str1);
for (i=0;i<=j-1;i++)
 {
 int t(char x);
 str2[i]=t(str1[i]);
 }
    printf("%s",str2); 
system("pause");
}

int t(char x)
{
int y;
if (x>=0&&x<=7)
y=x+2;
else if (x>7&&x<=9)
y=x%10;
else printf("error");
}

#5


char str1[j],str2[j];                        //此行报错,怎么改啊,求大神!


这里的申明中“j”不能使变量,必须是常量或者常量表达式
 
处理!

可以

#define m 10
...
下面申明就可以了
不知道长度的话,可以写个if来判断长度自适应

#6


谢谢各位,可是为什么我改了以后编译通过,但是运行的结果不对呢?
#include <stdio.h>
#include <stdlib.h>
void main ()

{
int i,j; 
char a;
scanf("%s",&a);
#define m sizeof(a)
j=m;
char str1[m],str2[m];
scanf("%s",str1);
for (i=0;i<=j-1;i++)
 {
 int t(char x);
 str2[i]=t(str1[i]);
 }
    printf("%s",str2); 
system("pause");
}

int t(char x)
{
int y;
if (x>=0&&x<=7)
{
y=x+2;
    return (y);
}
else if (x>7&&x<=9)
{
y=x%10;
    return (y);
}
else printf("error");
}

#7


第七行定义a是char类型,怎么输入时用%s啊?

#8


那怎么改???

#9


读一个字符,加2,输出,再读一个字符,加2,输出……
根本没必要在内存中保存

#10


谢谢大家,我终于编出来了,换了一种思路!