Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.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_Function_Command Line_Terminal_Strcmp - Fatal编程技术网

C 在终端中打印错误消息

C 在终端中打印错误消息,c,function,command-line,terminal,strcmp,C,Function,Command Line,Terminal,Strcmp,我正在编写一个程序,确定一组值的模式,例如(3 4 2 3 3)应打印“3”。问题是,程序必须接收要执行的数学函数的选项,并将其参数作为主函数中的参数,这样就不会有用户输入。所有内容都必须插入命令行,并使用指针进行检查。我的程序可以工作,除了例如用户进入(模式),但之后不输入任何值。然后,它会打印一条只写“ERROR”的消息,程序结束。但是,它不会打印 Johns-MacBook-Pro-2:AdvanceCalc jvdamore$/a.输出模式 分段错误:11 什么时候该打印 Johns-M

我正在编写一个程序,确定一组值的模式,例如(3 4 2 3 3)应打印“3”。问题是,程序必须接收要执行的数学函数的选项,并将其参数作为主函数中的参数,这样就不会有用户输入。所有内容都必须插入命令行,并使用指针进行检查。我的程序可以工作,除了例如用户进入(模式),但之后不输入任何值。然后,它会打印一条只写“ERROR”的消息,程序结束。但是,它不会打印

Johns-MacBook-Pro-2:AdvanceCalc jvdamore$/a.输出模式 分段错误:11

什么时候该打印

Johns-MacBook-Pro-2:AdvanceCalc jvdamore$./a.输出模式错误

下面是我的代码。所以我的问题是,带strcmp(p[2],“”)==0的if语句是否能够产生所需的错误消息?还是我做错了什么

int main(int n, char **p)
{
int i, x, A[100];


if (strcmp(p[1], "mode")==0){

    if (strcmp(p[2], "") == 0){
        printf("ERROR");
    return -1;
}
        for(i=2;i<n;i++){

                if (sscanf(p[i], "%d", &x) != 1) {
                        printf("ERROR");
                        return -1;
                    }
                if (x<1 || x>30){
                        printf("ERROR");
                        return-2;
                    }

                A[i-2]= x;

            }
            find_mode(A, n-2);

        }
int main(int n,char**p)
{
int i,x,A[100];
if(strcmp(p[1],“mode”)==0){
if(strcmp(p[2],“”)==0){
printf(“错误”);
返回-1;
}

对于(i=2;i而不是使用strcmp将字符串与
进行比较,您需要查看它是否为NULL。
strcmp(NULL)”
的效果不是很好,您应该:

if( p[2] == NULL ) 

(实际上,您应该重命名变量
argv
,还有一些其他问题,但这是主要问题。在引用
p[2]
之前,请确保检查
p[1]
是否不为空)。

strtol
sscanf
使用更简单(更安全)。