C:来自* argv的打印元素

时间:2014-02-12 19:29:17

标签: c printf argv

我正在编写一个C程序,可选择接受来自命令行的字符输入。如果用户在命令行输入字符,程序应该打印这些字符的ascii值。我遇到了以下问题:1)编写printf语句和2)如果用户没有从命令行发送任何内容,则跳过打印输入。这是我写的:

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条件也会评估为真?

3 个答案:

答案 0 :(得分: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;
} 

答案 1 :(得分:0)

主要的正确原型是main(int argc, char *argv[]),而不是main(int argc, char *argv)char **argv也有效)。第二个参数是一个char指针数组,每个指针都指向一个字符串,表示命令行中的一个标记。

你需要循环遍历argv的每个元素,并为每个元素循环遍历字符(以空字节结尾),打印每个元素。

此外,argc始终至少为1,因为argv [0]是程序名称。

答案 2 :(得分: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;
}