所以我终于能够让我的换位密码工作了。 但我需要能够从命令行参数中获取变量。 例如,transposition []给出的转置表可以根据命令行参数中的输入进行更改,同样在命令行中给出一个npos,它确定我总共移动了多少个字符。 例如,如果我输入命令行“a.out fileinput.txt fileoutput.txt 2 4 2 4 0 1”它应该使我的程序识别转置数组中只有4个变量和转置中的数字数组是“2 4 0 1”。 基本上,我只是想知道是否有办法从命令行中获取数字,然后将它们存储到一个数组(特别是转置数组)中。 我已经尝试使用sscanf来接受命令行中的不同参数,但它似乎无法正常工作。

更新的当前代码:

#include <stdio.h>

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

char transposition[]={};
char input[256];

char ch;
int i, j, k, npos;

FILE *file1=fopen(argv[1], "r");
FILE *file2=fopen(argv[2], "w");

sscanf(argv[3], "%d", &npos);
for(i=0;i<npos;++i){
sscanf(argv[4+i], "%d", &k);
transposition[i] = k;
}

int len= sizeof(transposition);
char temp[len];

while(fgets(input,sizeof(input),file1)!=NULL){
i=0;
do {
for(j=0;j<len;j++){
    ch = input[i];
    if(ch != '\n' && ch != '\0'){
        temp[j] = ch;
        ++i;
    } else {
        temp[j] = ' ';
    }
}
if(temp[0] != '.')
    for(k=0;k<len;k++){
        fprintf(file2,"%c", temp[transposition[k]]);
    }
}
while(ch != '\n' && ch != '\0');
fprintf(file2,"\n");
}
return 0;
}

原始工作代码:

#include <stdio.h>

int main(int argc, char *argv[]){
char transposition[]={2,4,0,1,3};
char input[256];
int len= sizeof(transposition);
char ch, temp[len];
int i, j, k;

FILE *file1=fopen(argv[1], "r");
FILE *file2=fopen(argv[2], "w");

while(fgets(input,sizeof(input),file1)!=NULL){
i=0;
do {
    for(j=0;j<len;j++){
        ch = input[i];
        if(ch != '\n' && ch != '\0'){
            temp[j] = ch;
            ++i;
        } else {
            temp[j] = ' ';
        }
    }
    if(temp[0] != '.')
        for(k=0;k<len;k++){
            fprintf(file2,"%c", temp[transposition[k]]);
        }
}
while(ch != '\n' && ch != '\0');
fprintf(file2,"\n");
}
return 0;
}

===============>>#1 票数:2 已采纳

...
sscanf(argv[4], "%d", &npos);
char transposition[npos];
...
for(i=0;i<npos;++i){
    transposition[i] = atoi(argv[5+i]);//atoi : <stdlib.h> or sscanf(argv[5+i], "%d", &k);transposition[i] = k;
}
...

  ask by user3473994 translate from so

未解决问题?本站智能推荐:

4回复

C编程-基于命令行参数的数组大小

我正在尝试为棋盘游戏制作网格,我知道棋盘可以达到的最大尺寸,但是根据用户在命令行中输入的内容,它也可以更小。 我编写了以下程序,它可以成功编译,但是当我将尺寸标注写入命令行时,它显示“分段错误(核心已转储)”。 谁能告诉我我做错了什么?
2回复

命令行参数,打印列和行

我正在尝试打印出从命令行参数输入的字符。 我在解决这个问题时遇到了麻烦。 当我运行./test Foo bar时,我希望它打印 虽然这可能不是最佳解决方案,但我希望使用char数组组成的数组来完成它,它看起来像三维数组,因此我将使用三层嵌套的for循环。 我到目前为止所拥有的是
1回复

C-将命令行参数存储为Char数组

如果我有这两个命令行参数,是否可以采用第二个命令行参数,它是一个包含26个字符的单词,将所有字母分开并将它们放入一个新的字符数组中? 我尝试使用此语法,但不确定是否有效? 我认为该语句将创建一个称为映射的新字符数组,并将其分配给字符串,因为我假设argv[1]是字符串。 然后,
3回复

将命令行参数读入c中的新数组?

没有办法知道有多少论点; 用户可以提供不确定长度的列表。 我对C非常不好。如何从命令行数组中读取参数并将其转换为新的字符串数组? 坦率地说,如果我要诚实的话,我甚至不知道如何制作一系列单独的字符串。 一个例子是超级有用的。
3回复

如何将命令行中的数组转换为整数数组?

我想知道如何将{33,44,77,88}或{10,20,30}等数组作为命令行参数给定,并将它们从char转换为整数,然后最后将它们放入整数数组。 我一直在找几个小时,但找不到一个示例,他们从命令行获取数组并将其转换为整数数组。 这就是我在命令行FOO {33,44,77,88} {
3回复

将参数解析为数组

我正在尝试创建拉米纸牌游戏的简化版本。 我需要分析卡片缩写,例如SA是Spades Ace。 DT是Diamond 10等。我知道有一种更简单的方法可以做到这一点,但这就是我的作业希望完成的方式。 示例执行看起来像 拉米3 S2 H9 C4 ...等包括所有52张卡片。 a
4回复

C参数字符数组

我想传入参数并将其输出为字符或字符串数​​组。 最简单的方法是什么? 一旦将它们作为字符数组,我就希望能够操纵该数组。 我能够传递它们并使用字符指针遍历字符串,但我想使用char数组。 有没有简单的方法可以做到这一点? 我对C很陌生,这是到目前为止的内容。
1回复

命令行参数

我一直在学习书中做一些练习,但似乎无法弄清楚这个特定的练习。 说明如下:重复练习P7.2,但允许用户在命令行上指定文件名。 如果用户未指定任何文件名,则提示用户输入名称。 我已经完成了P7.2,我们应该编写一个程序,该程序读取包含文本的文件,读取每一行并将其发送到输出文件,然后加上行号
3回复

命令行参数

我在弄清楚如何使此代码正常工作时遇到了麻烦。 假定要取决于命令行中给出的参数,它应该打印出问候语。 如果某人仅输入姓氏,那么终端将打印出... 您好,姓氏先生 ...因为他们只提出了一个论点。 这很好。 我遇到的问题是给定的命令行参数为== 3 。 如果给出
2回复

将*作为命令行参数传递

我编写了一个C程序,通过将表达式作为命令行参数传递来评估反向修饰符号,但是当我传递*(用于乘法)时,它将传递该文件夹中的所有文件名。 例如我通过了: ./rpn 10 20 30 + * 当我打印所有参数时,