2017-02-01 28 views
-1

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

所以我想出了这个代码:

#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部分是用户输入的字符串数组。所以我的想法是告诉编译器,当用户给出多个字符串时,它应该给出错误消息,所以我写了“plain [key]> 1)”。或者,我对命令行参数的理解完全在这里?谢谢。

+2

'plain [key]'将是'string'不是'int' –

+0

'plain [key]'可能是越界的。你应该检查传递给'main'的参数。 – Gerhardh

+0

C没有'string'类型。那是什么? 'main'的签名应该是'int main(int,int * [])',或者最后一个参数可以是'int **',它们是相同的。 – Olaf

回答

0

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

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

所以,如果你的可执行文件名为foo,你调用它作为foo 1 a bar,main的参数将作如下安排:

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

所以,如果你的程序必须接受一个参数,它必须认为argc == 2argv[1]是参数,您必须从字符串转换为数字。

0

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

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

所以,你想要的是

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

而且平原最后一个元素是key-1,“原因是基于0指数。