Как получить указанную c часть строки, используя функцию sscanf? - PullRequest
0 голосов
/ 08 апреля 2020

У меня проблема с чтением введенных пользователем данных.

Пользователь вводит "A Smaug 23 fire 10", и мне нужно получить всю информацию для моего кода, кроме первой буквы 'A'.

char buffer[80];
char *ret = fgets(buffer, 80, stdin)
if (ret == NULL){
     break;
}
char name[10],weapon[10];
int attackpoints, hitpoints;
int x = sscanf(ret," %s %d %s %d", name, &attackpoints,weapon,&hitpoints);

Это не будет работать.

Как я могу пропустить A и сохранить введенные пользователем данные в правильные переменные, такие как name = Smaug, attackpoints = 23, weapon = fire, et c?

1 Ответ

1 голос
/ 08 апреля 2020

Вам просто нужно добавить строку A[2] для первой буквы. Прочитать всю строку и вывести все ожидаемое значение A:

char A[2], name[10],weapon[10];
int x = sscanf(ret,"%s %s %d %s %d", A, name, &attackpoints,weapon,&hitpoints);

Полный код:

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

int main(int argc, char *argv[]) {
    char buffer[80];
    char *ret = fgets(buffer, 80, stdin);
    if (ret == NULL)
         exit(-1);
    char A[2], name[10],weapon[10];
    int attackpoints, hitpoints;
    int x = sscanf(ret,"%s %s %d %s %d", A, name, &attackpoints,weapon,&hitpoints);
    if (x != 5)
        exit(-1);
    printf("name = %s, attackpoints = %d, weapon = %s, hitpoints = %d\n", name, attackpoints, weapon, hitpoints);
    return 0;
}

Вход и выход:

./test 
A Smaug 23 fire 10
name = Smaug, attackpoints = 23, weapon = fire, hitpoints = 10
...