C 在终端中打印错误消息
我正在编写一个程序,确定一组值的模式,例如(3 4 2 3 3)应打印“3”。问题是,程序必须接收要执行的数学函数的选项,并将其参数作为主函数中的参数,这样就不会有用户输入。所有内容都必须插入命令行,并使用指针进行检查。我的程序可以工作,除了例如用户进入(模式),但之后不输入任何值。然后,它会打印一条只写“ERROR”的消息,程序结束。但是,它不会打印 Johns-MacBook-Pro-2:AdvanceCalc jvdamore$/a.输出模式 分段错误:11 什么时候该打印 Johns-MacBook-Pro-2:AdvanceCalc jvdamore$./a.输出模式错误 下面是我的代码。所以我的问题是,带strcmp(p[2],“”)==0的if语句是否能够产生所需的错误消息?还是我做错了什么C 在终端中打印错误消息,c,function,command-line,terminal,strcmp,C,Function,Command Line,Terminal,Strcmp,我正在编写一个程序,确定一组值的模式,例如(3 4 2 3 3)应打印“3”。问题是,程序必须接收要执行的数学函数的选项,并将其参数作为主函数中的参数,这样就不会有用户输入。所有内容都必须插入命令行,并使用指针进行检查。我的程序可以工作,除了例如用户进入(模式),但之后不输入任何值。然后,它会打印一条只写“ERROR”的消息,程序结束。但是,它不会打印 Johns-MacBook-Pro-2:AdvanceCalc jvdamore$/a.输出模式 分段错误:11 什么时候该打印 Johns-M
int main(int n, char **p)
{
int i, x, A[100];
if (strcmp(p[1], "mode")==0){
if (strcmp(p[2], "") == 0){
printf("ERROR");
return -1;
}
for(i=2;i<n;i++){
if (sscanf(p[i], "%d", &x) != 1) {
printf("ERROR");
return -1;
}
if (x<1 || x>30){
printf("ERROR");
return-2;
}
A[i-2]= x;
}
find_mode(A, n-2);
}
int main(int n,char**p)
{
int i,x,A[100];
if(strcmp(p[1],“mode”)==0){
if(strcmp(p[2],“”)==0){
printf(“错误”);
返回-1;
}
对于(i=2;i而不是使用strcmp将字符串与“
进行比较,您需要查看它是否为NULL。strcmp(NULL)”
的效果不是很好,您应该:
if( p[2] == NULL )
(实际上,您应该重命名变量argv
,还有一些其他问题,但这是主要问题。在引用p[2]
之前,请确保检查p[1]
是否不为空)。strtol
比sscanf
使用更简单(更安全)。