c - 您如何使输入接受 3 个参数

标签 c

我正在努力做到这一点,以便您可以调用具有要执行的函数的方法,例如 -r、-u、-l,然后是文件名或使用标准输入 我将如何制作它以便它可以接受 3 个输入我已经尝试了一些东西,但我刚开始使用 c 并且几乎不知道我在做什么。我无法弄清楚的是如何使输入接受三个然后能够比较要选择的字符串做什么操作。

#include <stdlib.h>

void upper(FILE *src, FILE *dest)
{
    int c;
    {
        fprintf(dest, "%c", toupper(c));
    }
}

void lower(FILE *src, FILE *dest)
{
    int c;
    while ((c = fgetc(src)) != EOF)
    {
        fprintf(dest, "%c", tolower(c));
    }
}

void rot13(FILE *src, FILE *dest)
{
    int c;
    while ((c = fgetc(src)) != EOF)
    {
        fprintf(dest, "%c", c+13);
    }
}

FILE * input_from_args(int argc,char choice, const char *argv[])
{
    if (argc == 1)
    {
        return stdin;
    } else
    {
        return fopen(argv[1], "r");
    }
}

FILE * input_from_args(int argc, const char *argv[])
{
    if (argc == 1)
    {
        return stdin;
    } else
    {
        return fopen(argv[1], "r");
    }
}

int main(int argc,char** choice,const char *argv[])
{
  FILE *src = input_from_args(argc, argv);
  FILE *dest = stdout;

    if (src == NULL)
    {
        fprintf(stderr, "%s: unable to open %s\n", argv[0], argv[1]);
        exit(EXIT_FAILURE);
    }
    else if(*choice == '-r')
    }
      rot13(src,dest)
    }
    else if(*choice == '-u')
    {
      upper(src,dest)
    }
    else if(*choice == '-l')
    {
      lower(src,dest)
    }

    fclose(src);

    return EXIT_SUCCESS;
}

最佳答案

这就是 argv 数组的用途。它将包含传递给程序的所有参数。

例如拿这个简单的测试程序:

#include <stdio.h>

int main(int argc, char *argv[])
{
    printf("argc = %d\n", argc);

    for (int a = 0; a < argc; ++a)
    {
        printf("argv[%d] = \"%s\"\n", a, argv[a]);
    }
}

如果您构建该源代码,并执行如下程序

$ ./a.out argument1 argument2 argument3

会输出

argc = 4
argv[0] = "./a.out"
argv[1] = "argument1"
argv[2] = "argument2"
argv[3] = "argument3"

换句话说,传递给程序的参数与源代码中的参数不匹配,而是将它们转换为 argv 数组。

关于c - 您如何使输入接受 3 个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28245913/

相关文章:

c - 如何创建一个从 99% 倒计时到 0% 每秒减少 1% 的计时器

c++ - 复杂情况下如何进行宏替换?

c++ 对 c 函数 mbstowcs() 的调用更改参数

c++ - 与教授一起衡量绩效

c - 输入 "###"后退出C程序

c - 尝试在 MIPS 中创建并打印数组中的元素

c - 如何在 GtkEntry 中选择文本

c - 从单个 C 源代码生成库和二进制文件

c - 使用 C 中指向指针的指针删除链表中的节点

c - pthread 同步阻塞队列