0

练习要求一个带有 argc 和 argv[] 的尾部程序。它将有特定数量的行。用户将输入一个 N 参数,然后程序将打印最后 n 行。当我从 cmd 调用这个程序作为 tail 3程序名称程序打开但它不打印任何东西。这是代码。

#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;
                        }
4

2 回答 2

4

表达式*argv[1] <= 4将是错误的。argv[1]是一个字符串,并且*argv[1]是该字符串的第一个字符。您必须将数字的文本表示形式转换为正确的数字。

试试吧strtol(argv[1], NULL, 10) <= 4

于 2013-03-14T14:26:42.297 回答
1

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

if(*argv[1] <= 4)

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

使用strtol将字符串转换为整数:

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

然后比较:

if(N <= 4)

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

于 2013-03-14T14:28:04.810 回答