簡體   English   中英

C將scanf()用於| 分隔字符串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM