C语言问题,希望得到解答

这是一道普通的习题,但是我仍然有问题,希望有人能为我解答。如果能说明原理就更好了,感谢感谢。

img

解释看代码注释


#include<stdio.h>
#include<string.h>
#define N 100
int main()
{
    char s[N] = {'\0'};    //定义字符数组
    gets(s);                //输入字符串
    int len = strlen(s);   //len为字符长度
    for (int i = 0; i < len; i++)  //采用for循环依次对每个字符进行操作
    {
        int temp = (s[i] + 6) % 10;    //将每个字符加6,对10取余,结果为int
        s[i] = (char)(temp+'0');       //将求得的新密码转换为字符型
    }
    puts(s);                //输出新字符串,即加密后字符
}

#include <stdio.h>

int main()
{
    char s[10];
    int i=0, r=0, x;
    scanf("%8s", s); //最大接收8个字符

    while(s[i])
    {
        x = (s[i] + 6) % 10;
        s[i] = x + '0'; //%10的结果为数字0-9,+'0'转换为字符
        r = r * 10 + x; //转换成数字,r*10升位
        i++;
    }
    printf("%s\n", s);
    printf("%d\n", r);

    return 0;
}

解答如下

img

#include <stdio.h>
int main()
{
    char t;
    while((t=getchar())!='\n')
    {
        t+=6;
        t=t%10;
        putchar(t+48);
    }
    return 0;
}