使用 argv 读取特定字母,然后将其用于开关(C 程序)
Read a specific letter using argv then using that for a switch (C Program)
这是作业
这与我的 post 之一有点重复,但我在读取命令行时遇到问题。我必须按字母顺序排列行星,这是一项简单的任务,但是让我的程序读取命令行参数然后将其用于我的开关是问题所在。我会 post 我的程序,然后再详细介绍。
#include<stdio.h>
#include<string.h>
void alpha(char planet[][9], char tempo[9]){
int i, j;
for(i=0;i<=9;i++)
for(j=i+1;j<=9;j++){
if(strcmp(planet[i],planet[j])>0){
strcpy(tempo,planet[i]);
strcpy(planet[i],planet[j]);
strcpy(planet[j],tempo);
}
}
}
int main(int argc , char *argv[]){
char str[][9] = {"Earth", "Jupiter", "Mars", "Mercury", "Neptune", "Pluto", "Saturn", "Uranus", "Venus"};
char temp[9];
if (argc == 3) {
switch (argv[1][1]) {
case 'a':
alpha(str, temp);
printf("The planets in alphabetical order are: ");
for(int i=0;i<=9;i++)
printf("%s, " , str[i]);
printf("\n");
return 0;
}
}
}
因此,为了让我的程序继续按字母顺序排列行星,我需要在 运行 程序之后输入命令 -o a。
所以它会是这样的:
./planets -o a
根据我的理解,if (argc == 3) 代码行读取输入字符的位置。那将跳过 -o 并且只关心命令行中的 a 。但是,这不起作用,我不知道为什么。此外,当我编译程序时,它在地球和金星之前有一个逗号。
所以它符合这样(不使用命令行部分):
,地球,......金星,
如何去掉 Earth 之前和 Venus 之后的逗号?
如有任何帮助,我们将不胜感激!
./planets -o a
argv[0] argv[1] argv[2]
之前您通过 argv[1][1]
检查 o
。这就是 switch
失败的原因。
此外,您还存在越界访问数组索引的未定义行为。
这就是改变
的原因
for(i=0;i<9;i++)
因为数组有9个元素。同样在第二个循环中for(j=i+1;j<9;j++)
这是作业
这与我的 post 之一有点重复,但我在读取命令行时遇到问题。我必须按字母顺序排列行星,这是一项简单的任务,但是让我的程序读取命令行参数然后将其用于我的开关是问题所在。我会 post 我的程序,然后再详细介绍。
#include<stdio.h>
#include<string.h>
void alpha(char planet[][9], char tempo[9]){
int i, j;
for(i=0;i<=9;i++)
for(j=i+1;j<=9;j++){
if(strcmp(planet[i],planet[j])>0){
strcpy(tempo,planet[i]);
strcpy(planet[i],planet[j]);
strcpy(planet[j],tempo);
}
}
}
int main(int argc , char *argv[]){
char str[][9] = {"Earth", "Jupiter", "Mars", "Mercury", "Neptune", "Pluto", "Saturn", "Uranus", "Venus"};
char temp[9];
if (argc == 3) {
switch (argv[1][1]) {
case 'a':
alpha(str, temp);
printf("The planets in alphabetical order are: ");
for(int i=0;i<=9;i++)
printf("%s, " , str[i]);
printf("\n");
return 0;
}
}
}
因此,为了让我的程序继续按字母顺序排列行星,我需要在 运行 程序之后输入命令 -o a。
所以它会是这样的:
./planets -o a
根据我的理解,if (argc == 3) 代码行读取输入字符的位置。那将跳过 -o 并且只关心命令行中的 a 。但是,这不起作用,我不知道为什么。此外,当我编译程序时,它在地球和金星之前有一个逗号。
所以它符合这样(不使用命令行部分):
,地球,......金星,
如何去掉 Earth 之前和 Venus 之后的逗号?
如有任何帮助,我们将不胜感激!
./planets -o a
argv[0] argv[1] argv[2]
之前您通过 argv[1][1]
检查 o
。这就是 switch
失败的原因。
此外,您还存在越界访问数组索引的未定义行为。
这就是改变
的原因for(i=0;i<9;i++)
因为数组有9个元素。同样在第二个循环中for(j=i+1;j<9;j++)