#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
int main(int argc, const char *argv[])
{
argc++;
int number;
printf("Enter word you would like encoded\n");
scanf ("%s %i", argv[0], atoi(&argv[1]));
printf("%s", argv[1]);
int len = strlen(argv[1]);
for (int i = 0; i < len; i++)
{
char offsetWord;
offsetWord = atoi(argv[i])+len;
putchar(offsetWord);
}
putchar('\n');
return 0;
}
我试图做的是从Linux命令行编译一个C凯撒密码的程序。要求:
1)K / Ratn的
ABCDEF
nopqrs)
2)./rotn狗
戈尔Zvpeix Objee已经Hzkv熊戈尔Inml球。
3)通过“rotn”写入文件。
./rotn狗狐狸
$猫的狐狸
戈尔Zvpeix Objee已经Hzkv熊戈尔Inml球。
4)用各种位移./rotn -8狗
BPM ycqks jzwev野联rcuxa月神wdmz tihg LWO。
这是据我已经得到了。我已经陷入了编译错误。我在现在的一个是“警告格式%我预计类型为int *的说法,但论据3为int类型。
有什么建议么?
正如评论所指出的,你已经混了几件事情:
argc
和argv
是传递到被调用时程序的参数。总有至少有一个参数,argv[0]
,节目的名称。你应该使用这些信息来分析您的命令行。scanf
扫描从stdin
格式化输入。你并不真的需要格式化输入这里,你可以阅读fgets
一整行,也可以读取fgetc
单个字符。您存储在新的变数扫描数据;不要重复argv
了点。该解释你的命令行程序可能是这样的:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
int shift = 13; // default shift
const char *infile = NULL; // default is stdin
const char *outfile = NULL; // default is stdout
int i = 1;
if (i < argc && argv[i][0] == '-') {
shift = atoi(&argv[i][1]);
if (shift <= 0) {
fprintf(stderr, "Illegal shift.\n");
exit(1);
}
i++;
}
if (i < argc) {
infile = argv[i];
i++;
}
if (i < argc) {
outfile = argv[i];
i++;
}
if (i < argc) {
fprintf(stderr, "Illegal extra argument.\n");
exit(1);
}
printf("shift: %d\n", shift);
if (infile) printf("infile: %s\n", infile);
if (outfile) printf("outfile: %s\n", outfile);
// now use this inforation in your program
return 0;
}
当然,你仍然必须实现编码器本身。下面是一些提示:
stdin
是一个有效的文件句柄,因此您可以使用,如果用户没有指定文件名或把手从fopen(infile, "r")
否则返回。您可以测试用户是否指定用if (infile) ...
记得关闭时,它不stdin
的文件,但文件名。"w"
文件,您应该使用fprintf
或fputc
。