0

この演習では、argcとargv []を含むテールプログラムを要求します。特定の行数があります。ユーザーはN引数を入力し、プログラムは最後のn行を出力します。このプログラムをcmdからtail3として呼び出すとプログラム名プログラムは開きますが、何も出力されません。コードは次のとおりです。

#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は false になります。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 に答える