2017-03-29 72 views
-1

从用户接收命令行参数并将其与单个字符进行比较的正确方法是什么?例如,如果用户键入“是”运行某个功能,输入“否”运行另一个功能。命令行参数和字符

我的主要错误是“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(){ 
} 
+1

'STRNCMP(argv的[1] == 'C')== 0' - > 'strcmp(argv [1],“c”)== 0' – 4386427

+0

'strncmp(argv [1] =='c')' - >'strncmp(argv [1],“c”,1)' –

+1

顺便说一句,哪部分错误信息不清楚? –

回答

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

@ 4386427 - 这是真的,可以说,这可能是OP的意图。 – alvits

+0

@ 4386427我以为他只是想检查第一个字母。所以你可以键入y或是 – Barmar

+0

@ 4386427我已经添加了更多的解释这两种方式的答案。 – Barmar

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