所以我终于能够让我的换位密码工作了。但我需要能够从命令行参数中获取变量。例如,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;
}
答案 0 :(得分: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;
}
...