命令行参数条件pset2 caesar

时间:2017-02-01 13:39:29

标签: c cs50 caesar-cipher

我刚开始学习C课程,并且遇到了命令行参数的问题。赋值是这个(有更多,但这是关于开始时命令行参数的部分):
- 您的程序必须接受单个命令行参数,即非负整数 - 如果您的程序在没有任何命令行参数或多个命令行参数的情况下执行,程序应该打印出您选择的错误消息并返回1.
- 您可以假设,如果用户确实提供了命令行参数,则它将是非负整数(例如,1)。无需检查它确实是数字。

所以我想出了这段代码:

#include <stdio.h>
#include <cs50.h>
#include <string.h>


    int main(int key, string plain[]) {

        if (key < 0 || plain[key] > 1)
        {
            printf("error\n");
            return 1;
        }
        else

等...代码继续。

现在我已经尝试了几件事情,但是我遇到了问题。编译器并不想接受我提出的if条件,说比较有错误指针和整数之间,它指的是赋值列表中的粗体条件。所以我理解命令行参数的argv部分是用户输入的字符串数组。所以我的想法是告诉编译器当用户提供多个字符串时它应该给出错误消息,所以我写了&#34;普通[键]&gt; 1)&#34 ;.或者我对命令行参数的理解完全在这里?感谢。

2 个答案:

答案 0 :(得分:0)

你误解了main的论据的目的。第一个int参数(通常名为argc)是数组参数中的项数。

数组参数(通常称为argv)包含程序的所有参数(包括可执行文件名)作为文本。

因此,如果您的可执行文件被称为foo,并且您将其作为foo 1 a bar调用,则main的参数将如下所示:

int    argc == 4
char **argv => {"foo", "1", "a", "bar"}

因此,如果您的程序必须接受单个参数,则必须认为argc == 2argv[1]是参数,您必须从字符串转换为数字。

答案 1 :(得分:0)

plain[key]访问plain字符串指针数组的关键元素(argv)。

该数组的大小由key(argc)表示。

所以你想要的是

if (key > 1)
{
   //..
}

此外,普通的最后一个元素是key-1,'因为它是基于0的索引。