我想在使用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 ) ;
}
"在我的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!");
}