【问题标题】:UPDATED command line arguments更新的命令行参数
【发布时间】:2014-06-04 06:51:15
【问题描述】:

所以我终于能够让我的转置密码工作了。但我需要能够从命令行参数中获取变量。例如,我由 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;
}

【问题讨论】:

  • 你不应该破坏有答案的问题。

标签: c arrays encryption command-line-arguments


【解决方案1】:
...
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;
}
...

【讨论】:

  • 我刚刚更新了我的代码,我似乎仍然遇到无法正确扫描的问题,你能看一下吗?
  • @user3473994 2 4 0 1 这应该是无效的规范。
  • 为什么 2 4 0 1 是无效规范
  • @user3473994 没有输出到3。也就是说不是基于一一对应的转换。
  • 哦,我知道他们能达到的最高值是 npos-1,所以 4 应该是 3
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-13
  • 1970-01-01
  • 2016-03-25
  • 2012-10-04
相关资源
最近更新 更多