先取小数,再取字符串,再取带空格的小数。

问题描述 投票:0回答:1

我想在使用scanf时存储一个带有空格的字符串,但我无法做到这一点,如果我键入 "25 byllie street 5093 New York",我只能在我的变量中得到byllie和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 ) ;

}
c scanf
1个回答
1
投票

"在我的cmd中,我要写例如 "14 afe afee 50 fafeef a",我想得到dom.number = 14 , dom.street = "afe afee", dom.number2= 50 and dom.town = "fafeef a" 。

"如果我输入 "25 byllie street 5093 New York",我的变量中只有byllie和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!");
} 
© www.soinside.com 2019 - 2024. All rights reserved.