2014-02-12 104 views
1

我正在編寫一個C程序,它可以接受來自命令行的字符輸入。如果用戶在命令行輸入字符,程序應該打印這些字符的ascii值。我遇到了以下問題:1)編寫printf語句; 2)如果用戶沒有從命令行發送任何內容,則跳過打印輸入。以下是我已經寫了:C:打印元素* argv

int main(int argc, char *argv){ 
    char thisChar; //Holds the character value of the current character. 
    int ascii; //Holds the ascii value of the current character. 
    int x = 1; //Boolean value to test if user input 0, our while loop break condition. 
    int i = 0; //Counter for the following for loop 

    if(argc > 0){ 
     for(i; i<argc; i++){ 
      thisChar = argv[i]; 
      printf("%c\nAscii: %d\n", thisChar, thisChar);//prints the character value of thisChar followed by its ascii value. 
     } 
     printf("Done."); 
    } 
} 

當我把它從這樣的命令行:

./ascii F G h 

輸出是:

� 
k 
� 
� 
Done. 

是我printf的問題聲明?爲什麼if條件評估爲真,即使我沒有輸入?

+0

咦? 'int main(int argc,char * argv)' – this

回答

2

原型是

int main(int argc,char *argv[]) // argv is an array of char pointers (= string) 

如果要打印字符串的第一個字符,你應該嘗試這樣的事:

int main(int argc,char *argv[]) { 
    int i; 
    char thisChar; 
    for (i = 1; i < argc; i++) { // argv[0] may be the file name (no guarantee, see Peter M's comment) 
    thisChar = argv[i][0]; // If the parameter is "abc", thisChar = 'a' 
    printf("%c\tAscii: %d\n", thisChar, thisChar); 
    } 
    return 0; 
} 
+0

完美,解決了我的問題。那麼這是否意味着從命令行傳遞的每個參數都被視爲一個字符數組,因此argv是一個二維數組?謝謝! – itscharlieb

+2

技術上argv [0]'可能是文件名。請參閱http://stackoverflow.com/questions/2050961/is-argv0-name-of-executable-an-accepted-standard-or-just-a-common-conventi –

+0

@itscharlieb是的,一個參數(甚至只有一個字符)被視爲一個字符數組。彼得M你說得對,我編輯了我的答案。 –

0

正確的主要原型是main(int argc, char *argv[]),而不是main(int argc, char *argv)char **argv也有效)。第二個參數是一個char指針數組,每個指針指向一個代表命令行中的一個令牌的字符串。

您需要遍歷argv的每個元素,併爲每個元素循環遍歷字符(以空字節結尾),然後打印每個元素。

另外,argc總是至少爲1,因爲argv [0]是程序名稱。

0

int main(int argc, char *argv[])

argv參數是傳遞給上執行的可執行的每個命令行參數的字符串的數組。

int main(int argc, char *argv[]){ 
    char thisChar; //Holds the character value of the current character. 
    int i = 0; //Counter for the following for loop 

    if(argc > 0){ 
     for(i; i<argc-1; i++){ 
     thisChar = *argv[i + 1]; 
     printf("%c\nAscii: %d\n", thisChar, thisChar); 
     } 
     printf("Done."); 
    } 
return 0; 
}