命令行参数和字符

时间:2017-03-29 16:52:37

标签: c

从用户接收命令行参数并将其与单个char进行比较的正确方法是什么?例如,如果用户键入" Y"是的,运行一些功能和" N"因为不会运行另一个功能。

我的主要错误是" ptr和整数之间的比较" &安培; "函数调用的参数太少,预期3有1"

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

void calculate();
void verify();

int main (int argc, char *argv[]) {
   if(argc < 2){
        printf("Please enter a mode of operation.\n");
        return 0;
    }
    else if(argc > 2){
        printf("Too many arguments supplied. Please try again.\n");
        return 0;
    }
    else if(strncmp(argv[1] == 'c') == 0)
        calculate();

    else if(strncmp(argv[1] == 'v') == 0)
        verify();

return 0;
}

void calculate(){
}

void verify(){
}

2 个答案:

答案 0 :(得分:1)

您没有正确调用strncmp()。它应该是:

strncmp(argv[1], "c", 1)

它需要3个参数:两个字符串和一个限制。 'c'char,而不是字符串,字符串文字放在双引号中。

您也可以简单地写一下:

if (argv[1][0] == 'c')

这只是检查第一个字符,因此用户可以键入yyes,它们将匹配y。如果你想匹配整个论点并要求它只是一个字符,你应该使用strcmp()而不是strncmp()

if (strcmp(argv[1], "c") == 0)

答案 1 :(得分:0)

strncmp(argv[1] == 'c') == 0

只是语法不正确。对于初学者来说,函数strncmp需要三个参数,它处理字符串,而在函数的avove调用中,只提供了一个int类型的参数。因为错误的表达式argv[1] == 'c'具有类型int并且等于0。

我可以建议以下解决方案

else if ( argc > 2 || strlen( argv[1] ) != 1 ){
    printf("Too many arguments supplied. Please try again.\n");
    return 0;
}
else if ( argv[1][0] == 'c' )
    calculateCRC();

else if ( argv[1][0] == 'v' )
    verifyCRC();