我正在编写一个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条件也会评估为真?
答案 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;
}