sscanf()如何在C中拆分字符串
因此,基本上我有一个简单的字符串,我尝试使用sscanf()如何在C中拆分字符串,c,string,input,formatting,scanf,C,String,Input,Formatting,Scanf,因此,基本上我有一个简单的字符串,我尝试使用sscanf()拆分此字符串并将值存储在适当的变量中: #include<stdio.h> int main() { int i=10,j; char ch = 'A',ch2; float a=3.14,b; char str[20]="10A3.140000"; sscanf(str,"%d%c%f",&j,&ch2,&b);
sscanf()
拆分此字符串并将值存储在适当的变量中:
#include<stdio.h>
int main()
{
int i=10,j;
char ch = 'A',ch2;
float a=3.14,b;
char str[20]="10A3.140000";
sscanf(str,"%d%c%f",&j,&ch2,&b);
printf("%d %c %f\n",j,ch2,b);
return 0;
}
#包括
int main()
{
int i=10,j;
char ch='A',ch2;
浮点数a=3.14,b;
char str[20]=“10A3.140000”;
sscanf(str、%d%c%f、&j、&ch2、&b);
printf(“%d%c%f\n”,j,ch2,b);
返回0;
}
现在我的疑问是sscanf
如何准确地知道在哪里拆分字符串。这里的值10
进入变量j
。字符A
进入变量ch2
和3.140000
进入变量b
。sscanf是如何解析此字符串并将值存储在不同变量中的。如果您能解释sscanf
如何准确地与任何字符串一起工作,这是值得注意的。我很难理解它。scanf
根据您在格式字符串中定义的格式说明符使用输入字符串
让我们分析一下您的格式字符串:
sscanf(str,"%d%c%f",&j,&ch2,&b);
解析搜索十进制整数的字符串。这意味着只接受范围%d
中的数字字符。此外,接受前导符号字符(如数字0-9
)。将使用符合此条件的所有字符-123
扫描任何字符,将其ASCII值保存在目标变量中。使用单个字符%c
解析字符串以搜索浮点数。与%f
情况类似,所有十进制数字和符号字符都可以接受,但它也可以接受%d
字符,将其解释为浮点
char str[20]="10A3.140000";
scanf
从第一个字符开始解析。由于存在十进制数,因此在找到第一个非数字字符('A'
)之前,它一直使用十进制数。整数10
存储在j
中
如果字符串在这里结束,scanf
将返回1
scanf
继续解析字母'A'
。由于我们有%c
格式说明符,因此使用该字符,并将值65(ASCII表示'A'
)存储在ch2
中
如果字符串在这里结束,scanf
将返回2
'A'
用完后scanf
继续从字符'3'
解析。%f
格式说明符将接受所有剩余字符(因为它们都有效),值3.14
存储在变量b
中
scanf
现在返回3
我试图理解scanf返回的值,因为它正在检查您是否可以控制正在发生的事情。就你而言
if( sscanf(str,"%d%c%f",&j,&ch2,&b) == 3 )
{
printf("%d %c %f\n",j,ch2,b);
}
将防止出现格式错误的字符串会导致未定义行为的情况。要理解这种情况,请考虑以下字符串:
char str[20]="10AB3.140000";
在第一个整数后面有两个非数字字符。然后:
仍将使用值%d
10
仍将使用字母%c
'A'
- 但是
不会使用以下字符串,因为子字符串%f
不能被解析为浮点数:前导的“B3.140000”
强制'B'
中断解析,并返回值2scanf
b
。scanf
根据您在格式字符串中定义的格式说明符使用输入字符串
让我们分析一下您的格式字符串:
sscanf(str,"%d%c%f",&j,&ch2,&b);
解析搜索十进制整数的字符串。这意味着只接受范围%d
中的数字字符。此外,接受前导符号字符(如数字0-9
)。将使用符合此条件的所有字符-123
扫描任何字符,将其ASCII值保存在目标变量中。使用单个字符%c
解析字符串以搜索浮点数。与%f
情况类似,所有十进制数字和符号字符都可以接受,但它也可以接受%d
字符,将其解释为浮点
char str[20]="10A3.140000";
scanf
从第一个字符开始解析。由于存在十进制数,因此在找到第一个非数字字符('A'
)之前,它一直使用十进制数。整数10
存储在j
中
如果字符串在这里结束,scanf
将返回1
scanf
继续解析字母'A'
。由于我们有%c
格式说明符,因此使用该字符,并将值65(ASCII表示'A'
)存储在ch2
中
如果字符串在这里结束,scanf
将返回2
'A'
用完后scanf
继续从字符'3'
解析。%f
格式说明符将接受所有剩余字符(因为它们都有效),值3.14
存储在变量b
中
scanf
现在返回3
我试图理解scanf返回的值,因为它正在检查您是否可以控制正在发生的事情。就你而言
if( sscanf(str,"%d%c%f",&j,&ch2,&b) == 3 )
{
printf("%d %c %f\n",j,ch2,b);
}
将防止出现格式错误的字符串会导致未定义行为的情况。要理解这种情况,请考虑以下字符串:
char str[20]="10AB3.140000";
在第一个整数后面有两个非数字字符。