Получить десятичную, затем строку, затем десятичную с пробелами - PullRequest
0 голосов
/ 04 мая 2020

хотел бы сохранить строку с пробелами при использовании scanf, но мне не удается это сделать. Если я наберу «25 byll ie street 5093 New York», я получу только byll ie и New в моих переменных

#include <stdio.h>
#include <stdlib.h>
#include "Adress.h"

int main (void)
{
Adress dom;
printf("Type number space string number string and store \n);
scanf("%d %s %d %s",&dom.number, dom.street, &dom.number2, dom.town ) ;

}

1 Ответ

1 голос
/ 04 мая 2020

" На моем cmd я напишу, например," 14 afe afee 50 fafeef a ", и я хочу получить dom.number = 14, dom.street =" afe afee ", dom. number2 = 50 and dom.town = "fafeef a"

" Если я наберу" 25 byll ie street 5093 New York ", я получу только byll ie и New в моем переменные ! * "

Спецификатор формата %s не перехватывает содержимое строки, разделенное пробелами. Вместо этого используйте %[.

Также достаточно перехватить целое сначала введите в виде строки fgets и сохраните ее в буфере, чтобы обеспечить безопасное потребление ввода:

char buf[100];

fgets(buf, sizeof(buf), stdin);

Затем выполните синтаксический анализ строки с помощью sscanf():

sscanf(buf,"%d %[^0-9]%d %[^0-9\n]",&dom.number, dom.street, &dom.number2, dom.town ) ;

Не забудьте проверить возвращаемое значение sscanf():

if (sscanf(buf,"%d %[^0-9]%d %[^0-9\n]",&dom.number, dom.street, &dom.number2, dom.town ) != 4)
{
    fprintf(stderr ,"Error at scanning the input string!");
} 
...