从用户接收命令行参数并将其与单个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(){
}
答案 0 :(得分:1)
您没有正确调用strncmp()
。它应该是:
strncmp(argv[1], "c", 1)
它需要3个参数:两个字符串和一个限制。 'c'
是char
,而不是字符串,字符串文字放在双引号中。
您也可以简单地写一下:
if (argv[1][0] == 'c')
这只是检查第一个字符,因此用户可以键入y
或yes
,它们将匹配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();