Я озадачен следующим кодом, целью которого является перебирать все заданные строковые аргументы и печатать только гласные.
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
if (argc == 1){
printf("ERROR: You need one argument.\n");
// this is how you abort your program
return 1;
}
int i = 1;
int j = 0;
printf("Printing number of arguments %d\n", argc);
for (i = 1; i <= argc; i++){
for (j = 0; argv[i][j] != '\0'; j++) {
char letter = argv[i][j];
if(letter >= 'A' && letter <= 'Z'){
letter = letter + 32;
}
switch (letter) {
case 'a':
printf("'A'\n");
break;
case 'e':
printf("'E'\n");
break;
case 'i':
printf("'I'\n");
break;
case 'o':
printf("'O'\n");
break;
case 'u':
printf("'U'\n");
break;
case 'y':
if (i > 2) {
// it's only sometimes Y
printf("'Y'\n");
}
break;
default:
printf("%c is not a vowel\n", letter);
}
}
return 0;
}
}
Программа работает, но печатает только первый аргумент, который я передаю при вызове ./ MARIANO ARGUELLO RIVERA
, она печатает только результаты для аргумента MARIANO и игнорирует все остальные.
Мое предположение (и я все еще смотрю на экран, пытаясь найти решение), находится во втором цикле argv[i][j] != '\0'
, когда программа переходит к первому аргументу, видит нольбайт , в конце первой строки, останавливает итерацию и не переходит ко второй, чтобы обработать ее.
Я прав?
Или я должен позаботиться о других деталях кода, чтобы итерация прошла успешно?
Спасибо