在C中将参数从main传递给函数

时间:2015-08-13 07:22:37

标签: c atoi

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

    // Compile this program with:
    //      cc -std=c99 -Wall -Werror -pedantic -o rot rot.c


        #define ROT 3

        //  The rotate function returns the character ROT positions further along the
        //  alphabetic character sequence from c, or c if c is not lower-case

        char rotate(char c)

        {

                // Check if c is lower-case or not
                if (islower(c))
                {
                        // The ciphered character is ROT positions beyond c,
                        // allowing for wrap-around
                        return ('a' + (c - 'a' + ROT) % 26);

                }
                else
                {
                        return ('A' + (c - 'A' + ROT) % 26);;
                }
        }

        //  Execution of the whole program begins at the main function

        int main(int argc, char *argv[])
        {


                     for (int j = 2; j < argc; j++){
                        // Calculate the length of the second argument
                        int length = strlen(argv[j]);

                        // Loop for every character in the text
                        for (int i = 0; i< length; i++)
                        {
                                // Determine and print the ciphered character
                            printf("%c" ,rotate(argv[j][i]));
                            printf("%c" ,rotate(argv[j][i])-ROT);
                            printf("%d",i+1);
                            printf("\n");

                        }

                        // Print one final new-line character
                        printf("\n");
                    }
                        // Exit indicating success
                        exit(EXIT_SUCCESS);

                return 0;
        }

我正在努力使用一个程序来旋转给定字符,用户输入的金额为argv的第一个参数。

现在我需要修改程序来实现这一目标。问题是我可以使用àtoi`函数来做到这一点。

我的困惑是,如何将Main中的argv[1]值传递给函数rotate(Variable ROT)?

理想的输出是(在MAC中使用终端)

./rot 1 ABC
AB1
BC2
CD3

1 个答案:

答案 0 :(得分:2)

ROT是一个宏。您无法在运行时更改它。改为使用变量。

(您需要进行错误检查strtol()并确保在使用它们之前传递了argv[]次数 - strtol()优于atoi,因为它有助于检测错误。)

 int rot = (int)strtol(argv[1], 0, 0);


 printf("%c" ,rotate(rot, argv[j][i]));
 printf("%c" ,rotate(rot, argv[j][i])-ROT);

并将其更改为:

char rotate(int rot, char c) {
 ...
}

并使用rot代替ROT