2013-03-14 24 views
0

这个练习需要一个带有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; 
         } 
+0

到目前为止,您是如何调试的? – StoryTeller 2013-03-14 14:25:51

回答

4

表达式*argv[1] <= 4将是错误的。 argv[1]字符串*argv[1]是该字符串的第一个字符。您必须将数字的文字表示转换为适当的数字。

尝试改为strtol(argv[1], NULL, 10) <= 4

+0

谢谢你的回答。当你回答第一个问题时,我给了你正确的回答。 – Lind 2013-03-14 14:39:04

1

您必须在比较之前将字符串转换为整数。所以行:

if(*argv[1] <= 4) 

比较第一个字符串的地址是否小于4这不是你想要的。

转换使用strtol串入整数:

char *endptr; 
    long N = strtol(argv[1], &endptr, 10); 
    /* error checking for conversion failure*/ 

,然后比较:

if(N <= 4) 

同样的问题在您的循环条件。

+0

'if(* argv [1] <= 4)'不是无效的,它只是不会做OP所期望的。 – 2013-03-14 14:28:44

+0

函数中的参数太少 – Lind 2013-03-14 14:34:22

+0

@Lind是的,您必须将基址和指针传递给char **。 – 2013-03-14 14:36:09