2016-05-03 98 views
-1

我從c語言編寫了一本練習1-20的練習題。如何將參數傳遞給c語言的main()函數?

的程序是:

#include <stdio.h> 
#include <stdlib.h> /* for atoi() */ 
main(int argc, char *argv[]) { 
    int c,i,n; 
    if (argv[1]) 
     n=atoi(argv[1]); 
    while((c=getchar())!=EOF) { 
     if(c!='\t') { 
      printf("%c",c); 
     }else 
     { 
      for(i=1;i<=n;i++) { 
       printf(" "); 
      } 
     } 
    } 
} 

如何傳遞參數在C語言中的main()函數沒有的atoi()函數?

+0

對不起,我會解決這個問題。 –

+1

'argv'是零終止字符串的指針數組。要傳遞沒有'atoi'函數的參數,就不要調用'atoi'函數。 OTOH,練習1-20,唯一的參數是一個數字,它由'atoi'函數從一個字符串轉換爲'int'。你需要決定'if(arv [1])'檢查失敗時'n'應該有什麼值。一個不錯的選擇將是8. – user3386109

回答

3

程序的所有參數都以字符串形式傳遞,其中argc會告訴您有多少個參數以及包含實際參數的argv

如果你需要一個數值,你必須以某種方式將它們轉換,你可以使用的atoi爲你所做的一切,或使用許多圖書館的一個解析選項,如getopt

您應該檢查argc代替檢查argv[1],所以

if (argc >= 2) 
    n=atoi(argv[1]); 

看一看this方便的指南。

+0

感謝您的回覆索倫。 –

1

這是一個小程序,它打印傳遞給程序的所有參數,包括程序名稱本身。

int main(int argc, char *argv[]) { 
    int i; 
    for (i = 0; i < argc; i++) { 
     printf("Arg %d: %s\n", i, argv[i]); 
    } 
    return 1; 
} 
+0

感謝您的回覆Fjotten。 –

1

傳遞給main的參數是您在命令行中傳遞的參數。例如:你的二進制文件被稱爲a.out的,你會怎麼做:

./a.out 5 

argv數組現在將有兩個(ARGC)項:[0] "./a.out" [1] "5"

您應該始終在訪問argv之前測試argc是否足夠大。

順便說一句:atoi不只是傳遞的字符串(argv[1])轉換爲整數

+0

感謝您的回覆mame98 –

+0

沒問題...;) – mame98

相關問題