我无法让if语句与命令行中的参数一起使用。我每次都会收到一个错误消息:“指针与整数('char *'和'int')之间的比较”。任何帮助将不胜感激。这是我必须做的描述:
该程序将从命令行读取参数并将其转换为相应月份的名称。即如果使用以下参数运行程序:
它将显示以下消息:
月份是“四月”。
#include <stdio.h>
int main(int argc, char *argv[]) {
if(argv[1] == 1){
printf("You entered the number 1.");
} else {
printf("You entered a different number.");
}
return 0;
}
答案 0 :(得分:5)
在命令行上传递的参数是字符串,因此您需要使用strcmp
进行比较。
int main(int argc, char *argv[]) {
if(argc > 1 && (strcmp(argv[1],"1") == 0)){
printf("You entered the number 1.");
} else {
printf("You entered a different number.");
}
return 0;
}
答案 1 :(得分:3)
编译器是正确的-您正在比较char *
和int
。
您必须将argv[1]
转换为int
(例如使用strol()
)或将1
转换为char *
(通过添加引号-{{1} }),然后与"1"
而不是strcmp()
进行比较。
在处理自变量时,还应该检查==
中的自变量数量。 (感谢@Ingo Leonhardt)
答案 2 :(得分:1)
Argv返回指向字符数组的指针,因此您的程序必须类似于:
#include <stdio.h>
int main(int argc, char *argv[]) {
if(argv[1][0] == '1'){
printf("You entered the number 1.");
} else {
printf("You entered a different number.");
}
return 0;
}
或者您可以使用atoi
(man 2 atoi)
函数将ascii数组转换为int,如下所示:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
if(atoi(argv[1]) == 1){
printf("You entered the number 1.");
} else {
printf("You entered a different number.");
}
return 0;
}
答案 3 :(得分:1)
如果要使用命令行参数(如整数),则必须使用atoi修改类型
#include <stdio.h>
int main(int argc, char *argv[]) {
if(atoi(argv[1]) == 1){
printf("You entered the number 1.");
} else {
printf("You entered a different number.");
}
return 0;
}