添加重复以调用函数

时间:2015-12-13 04:19:37

标签: c string function repeat

好的我正在尝试创建一个代码,用字母表中的下一个字符串替换输入的字符串中的字符,并打印26次(所有字母旋转)
我从rot13代码中获取了帮助,稍微修改了一下它除了打印26次之外我想要的一切。我试着用for和while添加一个计数器,但我真的看起来很愚蠢,当然没有用。

这是代码

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

int main() {
    printf("Please Enter The Secret Code\n");
    int code;
    while((code = getchar())) {
        code = chariot(code);
        putchar(code);
    } 
    return 0;
}

int chariot(int code)
{
    if('a' <= code && code <= 'z'){
        return Chariot(code,'a');
    } else if ('A' <= code && code <= 'Z') {
       return Chariot(code, 'A');
    } else {
        return code;
    }
}

int Chariot(int code, int newcode){
    code = (((code-newcode)+1)%26)+newcode;
    return code;
}

2 个答案:

答案 0 :(得分:1)

你需要做的是运行最后一点:

int Chariot(int code, int new code)
{
    code = (((code-newcode)+1)%26)+newcode;
    return code;
}

通过&#39; for&#39;循环。

它看起来应该是这样的:

int Chariot(int code, int new code)
{

    for (int i = 0; i < 26; i++)
    {
        code = (((code-newcode)+1)%26)+newcode;
    }
    return code;
}

这样做是运行相同的代码26次,这是你想要的结果。对循环做一些更多的研究,因为它们会在你的生活中帮助你。

答案 1 :(得分:0)

如果您坚持按字符处理输入字符,可以在足够高的VT100兼容终端上使用它:

    while (code = getchar())
    {
        int i;
        for (i = 0; i < 26; ++i)
            if (putchar(code = chariot(code)) != '\n') printf("\b\v");
        if (code != '\n') printf(" \e[26A");
    }

但当然,这太荒谬了。理智的解决方案是o_weisman所建议的:

  

首先读取整个字符串,然后才开启Chariot函数   循环中的所有字符26次在每次后打印结果   调用