Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 我在为比萨饼配送系统编写代码。从命令提示符运行时,显示错误。我应该如何运行它?_C_Command Line Interface_Command Line Arguments_Unistd.h - Fatal编程技术网

C 我在为比萨饼配送系统编写代码。从命令提示符运行时,显示错误。我应该如何运行它?

C 我在为比萨饼配送系统编写代码。从命令提示符运行时,显示错误。我应该如何运行它?,c,command-line-interface,command-line-arguments,unistd.h,C,Command Line Interface,Command Line Arguments,Unistd.h,我正在使用命令行参数和接口构建这个pizza程序。它应该返回参数中的成分 #include<stdlib.h> #include<stdio.h> #include<unistd.h> int main(int argc, char *argv[]) { char *delivery = ""; int thick = 0; int count = 0; char ch; while(ch = getopt(arg

我正在使用命令行参数和接口构建这个pizza程序。它应该返回参数中的成分

#include<stdlib.h>
#include<stdio.h>
#include<unistd.h>

int main(int argc, char *argv[])
{
    char *delivery = "";
    int thick = 0;
    int count = 0;
    char ch;


    while(ch = getopt(argc, argv, "d:t") != EOF)
        switch(ch)
        {
            case 'd' :
            delivery = optarg;
            break;

            case 't' :
            thick = 1;
            break;

            default:
            fprintf(stderr, "Invalid option : %s", optarg);
            return 1;
        }

    argc -= optind;
    argv += optind;

    if(thick)
        puts("thick crust");

    if(delivery[0])
        printf("To be delivered %s", delivery);

    puts("ingredients :");

    for(count = 0; count<argc; count++)
    {
        puts(argv[count]);
    }

    return 0;
}
#包括
#包括
#包括
int main(int argc,char*argv[])
{
char*delivery=“”;
int-thick=0;
整数计数=0;
char ch;
while(ch=getopt(argc,argv,“d:t”)!=EOF)
开关(ch)
{
案例“d”:
交付=optarg;
打破
案例“t”:
厚度=1;
打破
违约:
fprintf(标准,“无效选项:%s”,optarg);
返回1;
}
argc-=optind;
argv+=optind;
如果(厚)
放(“厚壳”);
如果(传递[0])
printf(“待交付%s”,交付);
配售(“配料:”);
对于(count=0;count您犯了五个错误(两个重要错误,三个不那么重要),其中一个重要错误是掩盖另一个错误

while(ch = getopt(argc, argv, "d:t") != EOF)
重要错误#1:of
=
低于
!=
,因此这会将比较结果分配给
ch
,而不是预期的
getopt
的返回值。不太重要的错误#1:
getopt
返回−1当到达选项末尾时。
EOF
不一定等于−一,

你应该写信的

while ((ch = getopt(argc, argv, "d:t")) != -1)
现在,如您所述调用时,在第一次迭代中,从
getopt
返回的值将是
'd'
,它不等于
EOF
(也不等于−1) ,因此分配给
ch
的值将是数字1(也称为Control-A,或
U+0001标题的开始处
)。该数字不等于
'd'
't'
(C标准保证
0<'a'<'b'<'C'<'d'<'z'
,因此,即使我们不假设ASCII,1也只能等于
'a'
)因此,采用
开关的
默认
分支,我们这样做:

fprintf(stderr, "Invalid option : %s", optarg);
return 1;
这里有一个重要的错误2:当你得到一个无效的选项时,你应该打印
ch
,而不是
optarg
ch
是选项;
optarg
是选项的参数,如果有的话。如果你打印了
ch
,你会意识到
ch
中的值不是你期望的值

其他不太重要的错误是

char ch;
这应该是
int ch;
就像在
getchar
循环中一样,从
getopt
返回的值到达参数末尾时超出了
char
的范围

fprintf(stderr, "Invalid option : %s", optarg);
printf("To be delivered %s", delivery);
这两种格式都需要在要打印的字符串末尾添加一个
\n

在问题的原始形式中,您的代码缩进严重,但我怀疑这是因为您使用了4个空格作为单个缩进级别,使用了8个空格宽的硬制表符作为第二个级别;这是堆栈溢出接口中的一个长期缺陷,这种代码在粘贴到问题中时会被损坏。因此这不是您的错误t、 (不过,您应该只使用空格缩进。)代码中更严重的样式问题是,一些单语句循环周围有花括号,而有些没有。在C中,是否应该在单语句块周围放花括号是最古老的问题之一;我个人认为双方都错了,但没关系;你应该学习的重要一点是s、 选择一种或另一种样式,并在整个代码中始终坚持它。

您已经犯了五个错误(两个重要错误,三个不那么重要),其中一个重要错误是掩盖另一个错误

while(ch = getopt(argc, argv, "d:t") != EOF)
重要错误#1:of
=
低于
!=
,因此这会将比较结果分配给
ch
,而不是预期的
getopt
的返回值。不太重要的错误#1:
getopt
返回−1当到达选项末尾时。
EOF
不一定等于−一,

你应该写信的

while ((ch = getopt(argc, argv, "d:t")) != -1)
现在,如您所述调用时,在第一次迭代中,从
getopt
返回的值将是
'd'
,它不等于
EOF
(也不等于−1) ,因此分配给
ch
的值将是数字1(也称为Control-A,或
U+0001标题的开始处
)。该数字不等于
'd'
't'
(C标准保证
0<'a'<'b'<'C'<'d'<'z'
,因此,即使我们不假设ASCII,1也只能等于
'a'
)因此,采用
开关的
默认
分支,我们这样做:

fprintf(stderr, "Invalid option : %s", optarg);
return 1;
这里有一个重要的错误2:当你得到一个无效的选项时,你应该打印
ch
,而不是
optarg
ch
是选项;
optarg
是选项的参数,如果有的话。如果你打印了
ch
,你会意识到
ch
中的值不是你期望的值

其他不太重要的错误是

char ch;
这应该是
int ch;
就像在
getchar
循环中一样,从
getopt
返回的值到达参数末尾时超出了
char
的范围

fprintf(stderr, "Invalid option : %s", optarg);
printf("To be delivered %s", delivery);
这两种格式都需要在要打印的字符串末尾添加一个
\n

在问题的原始形式中,您的代码缩进严重,但我怀疑这是因为您使用了4个空格作为单个缩进级别,使用了8个空格宽的硬制表符作为第二个级别;这是堆栈溢出接口中的一个长期缺陷,这种代码在粘贴到问题中时会被损坏。因此这不是您的错误t、 (不过,应该只使用空格缩进。)代码中更严重的样式问题是,一些单语句循环周围有大括号,而一些