C печать конкретного символа в зависимости от ввода строки с указателями - PullRequest
0 голосов
/ 02 апреля 2019

Учитывая это:

 char c[]={ '0', 0, 'o', 'a', 'i', 'e' };

 char s_format[] = { "\nBra"
   "v%c!\n" };

Целью этой программы является печать различных строк кода в зависимости от ввода, который может быть:

                            OUTPUT
 ./nameofmyfile             Bravo
 ./nameofmyfile mp          Bravi
 ./nameofmyfile f           Brava
 ./nameofmyfile fp          Brave

В моем основном у меня естьдва указателя на символ:

char *q = c;      //this one is initialized at position c[0]
char *p = NULL; 

Полагаю, я мог бы использовать только указатель * q, чтобы вывести символ o, i, a или e в s_format без использования конструкции switch.

Возможно ли, что цикл for был бы верным?

for (unsigned int i=2; i<sizeof(c); ++i) {
     printf("%c", *(q+i), s_format[4]);
}

Или, возможно, мне следует использовать серию операторов if?

if ( argc > 3 && strlen(argv[3]) ) {
    if ( *(argv[3]) == 'f' )
        i = 3;
}

if ( argc > 4 && strlen(argv[4]) ) {
    if ( *(argv[4]) == 'mp' )
        i = 4;
}

if ( argc > 1 && strlen(argv[5]) ) {
    if ( *(argv[5]) == 'fp' )
        i = 5;
}

Ответы [ 3 ]

0 голосов
/ 03 апреля 2019

Я думаю, может быть, вы хотите что-то вроде

int *q = c;
if (argc == 2) {
    if (argv[1][0] == 'f') {
        if (argv[1][1] == 'p') { //assume argv[1][2] == 0
            q += 5;
        } else {
            q += 3; //assume argv[1][1] == 0
        }
    } else { //assume argv[1][0] == 'm'; argv[1][1] == 'p'; argv[1][2] = 0
        q += 4;
    }
} else { //assume argc == 1
    q += 2;
}
printf(s_format, *q);
0 голосов
/ 01 мая 2019

Выкладываю здесь мой ответ для Других:

if(argc>1 && strlen(argv[1])>1 && argv[1][1]==p[0])
     i+=2;
printf(s_format, q[i]);
0 голосов
/ 02 апреля 2019

Используйте это:

#include <stdio.h>
#include <math.h>

char c[]={ '0', 0, 'o', 'a', 'i', 'e' };

const char * s_begin = "Brav";
const char * s_end ="!\n";

int main()
{
    int i = 3;
    printf("%s%c%s",  s_begin,c[i],s_end); //prints brava
    return 0;
}

если вы принимаете мое предложение, вы можете проголосовать, нажав на верхнюю стрелку, и вы также можете принять ответ, нажав V

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...