在终端中打印出错误消息

时间:2013-11-13 00:57:55

标签: c function command-line terminal strcmp

我正在开发一个程序来确定一组值的模式,例如(3 4 2 3 3)应打印出“3”。 catch是程序必须接收执行数学函数的选项,并将其参数作为main函数中的参数,因此无需用户输入。必须在命令行中插入所有内容并使用指针进行检查。我的程序工作,例如说用户输入(模式)但之后没有输入任何值。然后应该打印一条只显示“ERROR”并且程序结束的消息。但是它没有打印

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

何时打印

Johns-MacBook-Pro-2:AdvanceCalc jvdamore $ ./a.out mode ERROR

下面是我的代码。所以我的问题是我的if语句与strcmp(p [2],“”)== 0工作,以产生所需的错误信息?或者我做错了什么?

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);

        }

1 个答案:

答案 0 :(得分:2)

不是将字符串与""与strcmp进行比较,而是需要查看它是否为NULL。 strcmp( NULL, "" )效果不佳,您应该这样做:

if( p[2] == NULL ) 

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