2012-09-18 1 views
0

Je dois créer un programme qui accepte pas moins de 2 et pas plus de 6 arguments sur la ligne de commande, puis imprime le 1er ou le 2e caractère EX: asdf asdf asdf asdf imprime comme: ASASUtilisation de la ligne de commande en C pour détecter les arguments, puis imprimer le premier ou le second char des arguments

J'ai la configuration initiale de la baie et de travail, les boucles for ci-dessous sont destinées à couper la chaîne à l'arrêt un espace dans l'entrée et copie à une nouvelle chaîne, mais il ne fonctionne pas correctement. Je suis nouveau à C, et à ce site. Toute aide est grandement appréciée.

#include <stdio.h> 
#include <string.h> 

int main(){ 

char a[50]; 
char b[50]; 
char c[50]; 
char d[50]; 
char e[50]; 
char f[50]; 

int i; 

printf("enter a string (Ex: asdf asdf asdf... Must have atleast 2 arguments but no more than six): "); 
scanf("%s", a); 
printf("%c", a); 

for (i = 0; i != 50; i++){ 

     if(a[i]==' '){ 
     char strncpy(b, &a[i], i+2); 
     printf("\n%c ",a[1]); 
     printf("%c ",b[0]); 
     } 
} 
for (i = 0; i != 50; i++){  
     if(b[i]==' '){ 
     char strncpy(c, &b[i], i+2); 
     printf("%c ",c[1]); 
     } 
} 
for (i = 0; i != 50; i++){  
     if(c[i]==' '){ 
     char strncpy(d, &c[i], i+2); 
     printf("%c ",d[0]); 
     } 
} 
for (i = 0; i != 50; i++){  
     if(d[i]==' '){ 
     char strncpy(e, &d[i], i+2); 
     printf("%c ",e[1]); 
     } 
} 
for (i = 0; i != 50; i++){  
     if(e[i]==' '){ 
     char strncpy(f, &e[i], i+2); 
     printf("%c ",f[0]); 
     } 
} 
return 0; 
} 
+0

Est-ce que je manque quelque chose? Quand vous dites 'passer des arguments à la ligne de commande', je m'attendrais à ce que vous parliez du tableau 'argv' passé dans' main() '. N'est-ce pas le cas? J'ai préparé une réponse en supposant que c'est le cas, mais peut-être pourriez-vous clarifier d'abord. – paddy

+0

Oui, c'est ce que je suis supposé faire. J'ai juste essayé de le faire de toute façon possible après quelque temps – Church

+0

Hmm, je vois que vous avez édité votre question pour que vous lisiez depuis la console, pas la ligne de commande. J'ai posté ma réponse en ligne de commande après avoir dit que c'est ce que vous essayez de faire. Je vais l'enlever si ce n'est pas ce que vous vouliez dire. – paddy

Répondre

0

Vous n'avez pas besoin de copier vos chaînes de partout ... En venant de la ligne de commande, vous aurez les assis dans argv:

int main(int argc, char **argv) 
{ 

} 

argc est le nombre total de arguments plus 1 (le premier est le nom qui a appelé votre programme), et argv est un tableau de pointeurs pour chaque chaîne d'argument. Ceux-ci ont déjà été jetés à partir de la ligne de commande.

Alors d'abord vous voulez tester, vous avez assez d'arguments. J'aime faire explicitement une nouvelle variable pour éliminer la confusion hors par une des comparaisons:

int nparams = argc - 1; 
if(nparams < 2 || nparams > 6) { 
    printf("Wrong number of arguments\n"); 
    return -1; 
} 

Ensuite, on boucle sur vos arguments. Le premier sera en position 1 du tableau ... De votre exemple, il semble que vous imprimiez le premier caractère du premier argument, et le second caractère du suivant, puis continuez en alternance. C'est une opération modulo. J'ai une variable which qui choisit quel caractère imprimer. Cela suppose que chaque deuxième argument a une longueur d'au moins deux caractères. Aucune vérification d'erreur. Si vous avez besoin d'une vérification d'erreur, vous devez vous assurer que le caractère que vous imprimez n'est pas le terminateur de chaîne (valeur 0). Dans le cas du second caractère, vous devez également vérifier la valeur avant qu'elle ne soit 0. Je ne sais pas s'il est possible de spécifier un argument qui est une chaîne de longueur nulle. Peut-être un lecteur qui sait peut commenter.

Eh bien, je peux aussi bien le mettre dans ... Donc, votre boucle chercherais un peu comme ceci:

if(argv[i][0] == 0 || argv[i][which] == 0) { 
    printf("\n"); 
} else { 
    printf("%c\n", argv[i][which]); 
} 
+0

Merci, vous êtes un sauveur! – Church

Questions connexes