I need to make a program that accepts no less than 2 and no more than 6 arguments at the command line and then prints out the 1st or 2nd character
EX: asdf asdf asdf asdf
prints out as: a s a s
I have the initial array setup and working, the for loops below are meant to cut the string off at a space in the input and copy it to a new string, but it is not working correctly. I am new to C, and to this site. Any help is greatly appreciated.
#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;
}
You don’t need to copy your strings out of anywhere… Coming from the command line you’ll have them sitting in
argv:Where
argcis the total number of arguments plus 1 (the first is the name that invoked your program), andargvis an array of pointers to each argument string. These have already been tokenised from the command-line.So first you wanna test you have enough arguments. I like to explicitly make a new variable to remove the off-by-one confusion from comparisons:
Then you loop over your arguments. The first will be in position 1 of the array… From your example, it seems that you print the first character of the first argument, and the second character of the next, then continue alternating. That’s a modulo operation. I have a variable
whichthat chooses which character to print.This does assume that every second argument is at least two characters long. No error checking. If you need error checking, you need to make sure that the character you’re printing is not the string-terminator (value 0). In the case of the second character, you also need to check the value before it is not 0. I don’t know if it’s possible to specify an argument that is a string of zero length. Perhaps a reader who does know can comment.
Well, I may as well put it in… So your loop would look a little like this: