![](/img/trans.png)
[英]Read in space delimited numbers using scanf and storing them in an array - C
[英]C using scanf() for | delimited string
我想輸入幾個字符串然后輸入兩個整數。 字符串之間用'|'分隔時,整數之間用'。'隔開。
在網上環顧四周,我已經看到了涉及[^]
某種語法。 我正在使用此功能,但根本無法正常工作。 有人可以指出我應該做什么,為什么我做錯了嗎?
sscanf(str, "%s[^|],%s[^|],%s[^|],%i[^|],%i[^.]", …);
語法充其量是奧秘的-我建議使用其他方法,例如strtok()
或使用字符串處理函數strchr()
等進行解析。
但是,您必須意識到的第一件事是%[^<delimiter-list>]
格式說明符(用很多其他地方的POSIX scanf()
記錄的行話中的術語“掃描集”)僅提取字符串字段-您必須如果提取的字符串代表它們,則將其轉換為整數。
其次,您仍然必須在格式說明符之外將定界符作為文字匹配字符包括在內-您已用逗號分隔了格式說明符,其中|
逗號|
在輸入流中。
考慮以下:
#include <stdio.h>
int main()
{
char a[32] ;
char b[32] ;
char c[32] ;
char istr[32] ; // Buffer for string representation of i
int i ;
int j ; // j can be converted directly as it is at the end.
// Example string
char str[] = "fieldA|fieldB|fieldC|15.27" ;
int converted = sscanf( str, "%[^|]|%[^|]|%[^|]|%[^.].%i", a, b, c, istr, &j ) ;
// Check istr[] has a field before converting
if( converted == 5 )
{
sscanf( istr, "%i", &i) ;
printf( "%s, %s %s, %d, %d\n", a, b, c, i, j ) ;
}
else
{
printf( "Fail - %d fields converted\n", converted ) ;
}
return 0 ;
}
您必須使用[]
或s
構造,但不能同時使用兩者, 並且格式字符串必須包含分隔符。
因此,您應該編寫如下內容:
sscanf(str, "%[^|]|%[^|]|...",...)
這似乎有效...
#include <stdio.h>
main()
{
char x[32] = "abc|def|123.456.";
char y[20];
char z[20];
int i =0;
int j =0;
sscanf(x,"%[^|]|%[^|]|%d.%d.",y,z,&i,&j);
fprintf(stdout,"1:%s 2:%s 3:%d 4:%d\n",y,z,i,j);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.