2014-02-12 83 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; 
}