2013-03-14 27 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