c语言程序相关的问题

c语言初学者
编写一个程序
要求读取命令行所输入的一个数字
然后将输入的字母转换成原字母加上数字后在Asscii所对应的字母
符号不变
例子 :

./test 1
How are you?
Ipx bsf zpv?

这是我的代码 能帮我看看怎么修改吗

#include<stdio.h>

int encrypt(int character, int shift) {    
    char m=character;
    if((m>='A' && m<='Z')||(m>='a' && m<='z')) 
    {
     m=m+shift;
    }
    return 0;
}

int main(int argc,char *argv[]) {
    int ch;
    int i=1;
    while((ch=getchar())!= EOF) {
    ch=encrypt(ch,argv[i]);
    putchar(ch);
}   
}

#include <stdio.h>
#include <stdlib.h>

int encrypt(int c, int s)
{
    s %= 26;
    if (s < 0)
        s += 26;
    if (c >= 'A' && c <= 'Z')
        return (c - 'A' + s) % 26 + 'A';
    else if (c >= 'a' && c < 'z')
        return (c - 'a' + s) % 26 + 'a';
    else
        return c;
}

int main(int argc, char *argv[])
{
    int ch;
    while ((ch = getchar()) != EOF)
        putchar(encrypt(ch, atoi(argv[1])));
    return 0;
}
$ gcc -Wall main.cpp
$ ./a.out 1
How are you?
Ipx bsf zpv?
$ ./a.out -27
How are you?
Gnv zqd xnt?

img


修改在注解里,有问题请回复

#include<stdio.h>

int encrypt(int character, int shift) {
    char m=character;
    if((m>='A' && m<='Z')||(m>='a' && m<='z'))
    {
        m=m+shift;
    }
    return m;//返回改过的值
}

int main(int argc,char *argv[]) {
    int ch;
    int i=1;
    while((ch=getchar())!= EOF) {
        ch=encrypt(ch,1);//例中是ascll码加1
        putchar(ch);
    }
}

char和int型要分开

#include<stdio.h>
char encrypt(char character, int shift) {    
    char m=character;
    if((m>='A' && m<='Z')||(m>='a' && m<='z')) 
    {
     m=m+shift;
    }
    return m;
} 
int main() {
    int ch;
    int i=1;
    while((ch=getchar())!= EOF) {
    ch=encrypt(ch,i);
    putchar(ch);
}   
}
 

读取数字版本

#include<stdio.h>
char encrypt(char character, int shift) {    
    char m=character;
    if((m>='A' && m<='Z')||(m>='a' && m<='z')) 
    {
     m=m+shift;
    }
    return m;
} 
int main() {
    int ch;
    int i;
    scanf("%d",&i);
    while((ch=getchar())!= EOF) {
    ch=encrypt(ch,i);
    putchar(ch);
}   
}

修改如下,供参考:

#include<stdio.h>
int encrypt(int character, int n)
{
    int m=character;
    if((m>='A' && m<='Z')||(m>='a' && m<='z'))
        m=m+n;
    return m;
}

int main(int argc,char *argv[])
{
    int ch,i;
    if(argc < 1)  return 1;
    sscanf(argv[1],"%d",&i);
    while((ch=getchar())!= EOF) {
         ch=encrypt(ch,i);
         putchar(ch);
    }
    return 0;
}