我刚开始学习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("errorn");
return 1;
}
else
等等。。。代码继续。
现在我试了好几种方法,但都碰壁了。编译器不想接受我提出的if条件,说指针和整数之间的比较有错误,整数指的是赋值列表上的粗体条件。所以我知道命令行参数的argv部分是用户输入的字符串数组。所以我的想法是告诉编译器,当用户给出多个字符串时,它应该给出一条错误消息,所以我写了"plain[key]>1)"。还是我对命令行参数的理解完全偏离了这里?谢谢
plain[key]
访问字符串指针plain
数组(argv
)的关键元素。
该数组的大小由关键字(argc
)表示。
所以你想要的是
if (key > 1)
{
//..
}
此外,最后一个元素是key-1
,因为它是基于0
的索引。
您误解了main
参数的用途。第一个int
参数(通常命名为argc
)是数组参数中的项数。
数组参数(通常称为argv
)以文本形式包含程序的所有参数(包括可执行文件名)。
因此,如果您的可执行文件名为foo
,并且您将其调用为foo 1 a bar
,那么main的参数如下:
int argc == 4
char **argv => {"foo", "1", "a", "bar"}
因此,如果您的程序必须接受一个参数,它必须保持argc == 2
和argv[1]
是参数,您必须将其转换为字符串中的数字。