好的我正在创建一个允许用户以任何顺序输入的程序。术语-1或-2用于表示操作模式。而参数-c总是在文件名之前。这是我编写的循环,允许以用户希望的任何顺序输入这些循环。
int main(int argc, char *argv[])
{
string qcolors_name;
string inputFileName;
pmode_t mode = run_process2;
// perform command line argument checking
if(argc < 2){
cerr << "Not enough arguments" << endl;
return 0;
}
for(int i = 1; i < argc - 1; i++){
if(argv[i] == "-1"){
mode = run_process1;
cout << "Mode 1" << endl;
}else if(argv[i] == "-2"){
mode = run_process2;
}else if(argv[i] == "-c"){
qcolors_name = argv[i+1];
cout << qcolors_name << endl;
i++;
}else if(argc-1 == i){
break;
}else{
cout << argv[i] <<endl;
cerr << "arguments error"<<endl;;
return 0;
}
}
然而程序似乎总是转储到参数错误消息,即使它输出argv [i]是= -1。这是我测试过的东西之一,但绝不应该达到这种情况。我确定它的语法明智,我做错了。
修改
这是一个带有样本错误输出的输入。
USER> ./colorfun -1 -c qc_bw.txt mountains.ppm <- 9:46PM
-1
arguments error
答案 0 :(得分:2)
它是C,你不能只用str1 ==&#34; smth&#34;来比较字符串。请改用strcmp()
。
更详细的解释:C中的operator ==
比较整数实体:数字,指针等。"smth"
本质上是指向程序常量段内存区域的指针。这就是代码
const char* a = "abc";
const char* b = "abc";
assert(a == b);
可以给予真实,无论是&amp; b可以指向单个存储器位置。但是这个表达式从不比较字母&#34; a&#34;,&#34; b&#34;,&#34; c&#34;从a
和b
,它只比较指针。同样在Java中,您必须使用str1.equals(str2)
,因为Java运算符==还会比较整数实体(数字,字符和&#34;指向对象的指针&#34;)。相反,在C ++,Python和其他带有运算符重载的编程语言中,两个字符串的==
通常会导致逐字符比较。
答案 1 :(得分:0)
在C ++中,你必须首先将参数转换为std :: string,然后你可以使用==运算符对它们进行比较,如下所示:
int main(int argc, char* argv[]) {
for (int i = 1; i < argc; i++) {
if (std::string(argv[i]) == "-a") {
std::cout << "You passed parameter -a" << std::endl;
} else if (std::string(argv[i]) == "-b") {
std::cout << "You passed parameter -b" << std::endl;
}
}
return 0;
}