用argc和argv构建一个尾部程序[]
这个练习需要一个带有argc和argv []的尾部程序,它会有一个特定的行数。用户输入一个N参数,然后程序会打印最后一个当我从cmd作为尾部3程序名称调用这个程序时,程序打开,但它不打印任何东西。下面是代码。用argc和argv构建一个尾部程序[]
#include <stdio.h>
int main (int argc,char *argv[])
{
char *linja[]={"Mjeshter Ciko", "Sisteme Elektronike" , "Bisha" , "Super Mario Bros" , "Pallim Gjoni"};
int i=0;
if (argc!=3)
{
printf("Your Request can't be completed\n");
printf("The format is Tail X Program Name\n");
return -1;
}
if(*argv[1] <= 4)
{
printf("The Last Lines Are: \n");
for(i=4 ;*argv[1]>=0; i--,*argv[1]--)
{
printf("%s\n",linja[i]);
}
}
return 0;
}
表达式*argv[1] <= 4
将是错误的。 argv[1]
是字符串和*argv[1]
是该字符串的第一个字符。您必须将数字的文字表示转换为适当的数字。
尝试改为strtol(argv[1], NULL, 10) <= 4
。
谢谢你的回答。当你回答第一个问题时,我给了你正确的回答。 – Lind 2013-03-14 14:39:04
您必须在比较之前将字符串转换为整数。所以行:
if(*argv[1] <= 4)
比较第一个字符串的地址是否小于4这不是你想要的。
转换使用strtol串入整数:
char *endptr;
long N = strtol(argv[1], &endptr, 10);
/* error checking for conversion failure*/
,然后比较:
if(N <= 4)
同样的问题在您的循环条件。
'if(* argv [1] 2013-03-14 14:28:44
函数中的参数太少 – Lind 2013-03-14 14:34:22
@Lind是的,您必须将基址和指针传递给char **。 – 2013-03-14 14:36:09
到目前为止,您是如何调试的? – StoryTeller 2013-03-14 14:25:51