Вы можете прочитать отформатированные значения от stdin
с помощью функции scanf
и от строки с функцией sscanf
. См. Полный пример ниже.
#include <stdio.h>
typedef struct {
int id1;
int id2;
int num;
} gtid_t;
int main(void) {
gtid_t gtid;
// read from stdin
scanf("%d-%d-%d", &(gtid.id1), &(gtid.id2), &(gtid.num));
printf("id1 = %d, id2 = %d, num = %d\n", gtid.id1, gtid.id2, gtid.num);
// read from string
char* str = "4-5-6";
sscanf(str, "%d-%d-%d", &(gtid.id1), &(gtid.id2), &(gtid.num));
printf("id1 = %d, id2 = %d, num = %d\n", gtid.id1, gtid.id2, gtid.num);
return 0;
}
Вывод будет выглядеть следующим образом
id1 = 1, id2 = 2, num = 3
id1 = 4, id2 = 5, num = 6
Как @ DavidC.Rankin упомянуть в комментариях лучше, чтобы проверить, что вход был успешным. Вы можете добавить if
заявления как этот
if(sscanf(str, "%d-%d-%d", &(gtid.id1), &(gtid.id2), &(gtid.num)) != 3) {
fprintf(stderr, "Invalid input: %s\n", str);
}
В результате для str
значения 4-a-6
этого пример печатает ошибку
Invalid input: 4-a-6
Спасибо, Извините, но я не хочу, чтобы прочитать его из стандартного ввода. Строка уже определена как char * str. И сначала мне нужно проверить, находится ли строка в правильном формате, а затем преобразовать ее. –
@RebeccaTucker В моем ответе уже есть оба примера с 'stdin' и со строкой, определенной как' char * '. – NikolayKondratyev
О, спасибо. Что помогает. пожалуйста, считаете ли вы необходимым проверить, соответствует ли строка правильному формату x-y-z перед преобразованием? Я тоже хотел бы это сделать. Я начал учиться программированию в понедельник. Пожелай мне удачи !! –